发布于 2026-01-06 4 阅读
0

Actor 模型 vs 微服务 DEV 的全球展示挑战赛,由 Mux 呈现:展示你的项目!

Actor 模型与微服务

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

我最近突然想到:如果微服务是重复发明轮子呢?如果微服务试图实现与 Actor 模型相同的功能呢?

我不是第一个问这个问题的人

StackExchange 上也有类似的问题。我对给出的答案并不信服。

Actor 模型——是并发计算的数学模型,而微服务——是面向服务的架构的一种实现。

然后呢?有很多东西都可以用于计算,例如,Lambda演算(逻辑中的形式系统)、台球、量子力学、活细胞、生命游戏等等。它们虽然属于不同的类别,但这并不妨碍我们将它们全部用于计算。

再次强调,微服务也可以是有状态的,但这违背了微服务的设计原则。

没错,但是你需要把这些信息(账户、记录、用户)存储在某个地方?如果你不把数据库本身算作服务,那么同样的逻辑也可以应用于参与者。

如果什么?

对于微服务架构,你需要使用某种通信协议,例如 REST、Protocol Buffer、GraphQL 等等。在 Actor 模型中,这和函数调用一样简单。

部署微服务时,通常假设每个微服务都隔离在各自的机器上(虚拟机、Jail、Docker 等),因此最终需要大量的机器。部署大量机器既困难又昂贵,而部署虚拟机则需要使用 Kubernetes 或类似的工具。Actor 模型则不同,它将 Actor 部署到集群中,并且可以自动分布。

使用微服务时,需要利用分布式追踪来调试问题。在 Actor 模型中,可以使用“堆栈跟踪”(这可能是编程语言本身提供的功能)。

开发微服务时,你会把所有东西都放在单独的代码仓库里,但这样一来,跨多个服务进行更改就变得很困难,所以你又会把所有东西都放到单体仓库里。感觉就像在原地打转。

最大的区别在于,在微服务中你可以使用不同的编程语言,但在 Actor 模型中你只能使用一种编程语言(不包括外部接口和 shell 调用)。

一旦程序员习惯了复杂的解决方案,那么简单的解决方案就会让他们觉得不完整、不舒服。

——道格·霍伊特

免责声明:我指的并非Actor模型的具体实现,而是一种更理想化的Actor模型。我希望这匹小马能接近我的设想,但我还没有实际操作过。

文章来源:https://dev.to/stereobooster/actor-model-vs-microservices-d60