Lagom:是否可以在多个群集中拆分服务实例?

时间:2019-06-03 09:46:02

标签: scala event-sourcing akka-cluster lagom

假设我有Hello-Service。在Lagom中,此服务可以跨单个群集的多个节点运行。

因此,在集群1中,我们可以有Hello-Service的多个“副本”:

Cluster1: Hello-Service-1, Hello-Service-2, Hello-Service-3

但是可以在多个群集中运行服务Hello-Service吗?

赞:

Cluster1: Hello-Service-1, Hello-Service-2, Hello-Service-3,
Cluster2: Hello-Service-4, Hello-Service-5, Hello-Service-6

我想要实现的是读取侧处理器和事件使用者的更好的可伸缩性:

在Lagom中,我们需要预先设置集群中给定事件标签的分片数量。

所以我想知道是否可以添加另一个集群以在它们之间分配负载。

当然,我想通过一些键对持久性实体进行分片。

(假设我正在构建一个多租户应用程序,我将按组织标识对实体进行分片,因此,一组组织中的所有实体都将进入集群1,而另一组组织中的实体将进入集群2,因此我可以为每个群集分配分片的读取侧处理器,这些处理器仅处理群集中事件/实体的子集(以实现更好的可伸缩性)。

采用单集群方法时,随着系统的发展,单个集群中的分片处理器可能会变得越来越慢,因为它需要处理越来越多的事件。

因此,随着系统的扩展,我将添加一个新集群(假设集群2,然后集群3,它将处理自己的事件/实体子集)

1 个答案:

答案 0 :(得分:1)

如果您使用分片读取面,Lagom将在群集中的所有节点之间分配分片的处理。因此,如果您有10个分片,并且1个群集中有6个节点,则每个节点将处理1-2个分片。如果您尝试部署两个集群,每个集群3个节点,那么每个节点将处理3-4个分片,但是每个事件将被处理两次,每个集群一次。这无助于扩展性,所做的工作是需要完成的工作的两倍。所以我不明白为什么要两个群集,而只有一个群集,而Lagom会将碎片均匀地分布在整个群集中。

如果您不使用分片读取面,那么群集中有多少个节点都没有关系,所有事件将由一个节点处理。如果部署第二个群集,它将不会分担负载,它还将处理相同的事件,因此每个群集将对每个事件进行双重处理,这不是您想要的。

因此,只需使用分片读取面,然后让Lagom即可为您在单个群集中分配工作,这就是它的设计目的。