Actor模型和微服务有什么区别?


Answers:


11

Actor模型-是用于并发计算的数学模型,而微服务是面向服务的体系结构的实现。相似之处是偶然的。

当然,有可能基于某些参与者模型构建微服务,并使用参与者模型对某些微服务架构进行建模,但这并不意味着它们是等效的。用“电子邮件系统”替换“微服务系统”,它仍然是正确的。用“通信顺序过程”(CSP)替换“角色模型”,它也将是“ true”,因为CSP和角色模型系统可以相互建模。

给定参与者模型,您可以使用微服务,SOA甚至电子邮件来实现它,但这并不意味着它们具有相同的抽象级别才能真正进行比较。

而且,参与者模型强调缓冲区(在微服务领域中可以被视为消息队列),因此某些参与者/微服务可能尚未准备就绪,而固有的异步通信仍然可能。

换句话说,与演员模型进行比较可以带来很高的考虑度,从而带来一些创造性的见解,但主要是苹果与橘子。

如果目标是将SOA /微服务的数学模型与Actor模型进行比较,那么它也不是微不足道的,因为:1)SOA的数学模型没有达成共识,2)模型通常包含此目的。SOA /微服务建模很可能与参与者模型的目的不同。此处尝试对SOA建模的一个示例。

当然,可以使用微服务创建参与者模型系统,并将每个服务称为参与者(请参阅严格定义参与者模型)。但这并不意味着两者在一般意义上都没有任何有意义的关系。


我的意思是,参与者模型无法与同一级别的微服务进行比较。让我更新我的答案
Roman Susi 2016年

我不这么说。微服务可以实现参与者模式,汇编或C程序也可以。但是我没有说他们总是或什至经常这样做。是的,Erlang也是参与者模型实现的示例。不确定我是否理解您的论点。
罗曼·苏西

抱歉,我首先读过Actor是数学模型,而uServices实现了该模型。我还没有注意到他们实现了服务体系结构。因此,我的问题是Actor和SOA这两个数学模型如何相互比较。服务是具有消息循环的事物,该消息循环接受请求并生成响应消息。这就是演员的角色。它与SOA中的微服务有什么区别?换句话说,当我拥有分布式服务网络时,应该将它们称为微服务还是参与者?
小外星人

请注意,这是一个问答网站,而不是论坛或新闻源。不需要诸如UPDATE和EDIT之类的名词。Stack Exchange上的每个帖子都已经有详细的编辑历史记录,任何人都可以查看。
罗伯特·哈维

1

微服务是一种将软件的关注点划分为自己的可部署工件(可执行文件,脚本,JAR,WAR等)的一种组织方式。这为您提供了灵活性,例如,通过允许您在需要的地方部署更多实例来进行扩展。假设用户花费更多的时间在查看目录上,而不是在购物车中添加东西。一个可部署的工件处理目录功能,另一个可处理购物车功能-您可以运行目录服务的更多副本来处理负载。

它还将它们与内部更改隔离开来。假设您从关系数据库转移到用于存储产品数据的文档数据库-很有可能您的购物车服务不需要更改。

actor模型的级别比可部署工件的级别低,更多地是用来实现服务的对象类型。继续上面的示例,您的系统中的购物车可能由actor表示,因此每个用户的购物车都是一个不同的actor,并且消息告诉它添加商品,删除商品,以当前内容进行响应,添加运输,签出等等。在这种情况下,您仍然拥有微服务,并且使用actor模型来实现。


当您告诉您可以拥有同一服务的多个实例时,我开始认为它是相反的:服务是一种类型,而参与者是对象:)
Little Alien

演员不能单独部署吗?你确定吗?dotnet.github.io/orleans/Documentation/Grain-Versioning/...
达菲朋克

在我看来,在实现方面很明智,这两个概念之间可能有些融合……
Daffy Punk

1

我要说的主要区别是粒度之一。

对于actor模型,它的粒度相对较细,因为actor倾向于表示OOP中一个对象的等效项。

对于微服务,它的粒度相对较粗,因为单个微服务可能包含大量的参与者或对象。

请注意,您实际上并不需要太想像一下就可以说现代网络是同一件事,甚至粒度更大(“宏服务”);并且(例如)HTTP服务器是宏服务,数据库服务器是宏服务,Web浏览器是宏服务等。

大致相同-相互沟通的孤立片段。改变的只是碎片的大小(因此碎片的数目)。


每个Java应用程序(无论大小)都是一个对象。对象由其他对象组成,并且可以无限地增大。我猜uServices也是由其他对象组成的各种应用程序。
小外星人

0

微服务通过创建多个副本进行水平扩展,由于服务的无状态性质,每个副本都能够处理请求。他们凭借其无状态的特性对失败具有弹性。

Actor通过将它们移动到负载较小或可用资源更多的分区来进行扩展。他们是有状态的。它们对失败具有恢复能力,因为根据参与者的框架,可以动态地旋转另一个参与者,或者可以随时维护参与者的热备份以应对主要参与者的失败。

同样,微服务也可能是有状态的,但这违反了微服务的设计原则。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.