假设我有Hello-Service
.在 Lagolm 中,此服务可以跨单个群集的多个节点运行。
因此,在集群 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
我想要实现的是读取端处理器和事件使用者更好的可伸缩性:
在 Lagolm 中,我们需要预先设置集群中给定事件标签的分片数量。
所以我想知道我是否可以添加另一个集群来在它们之间分配负载。
而且,当然,我想通过一些键对持久实体进行分片。
(假设我正在构建一个多租户应用程序,我将按组织 ID 对实体进行分片,因此一组组织的所有实体都将进入集群 1,另一组组织的实体将进入集群 2,因此我可以为每个集群分片读取端处理器,这些处理器仅处理集群内事件/实体的子集(以获得更好的可扩展性))。
使用单集群方法,随着系统的增长,单个集群中的分片处理器可能会变得越来越慢,因为它需要处理越来越多的事件。
因此,随着系统的增长,我只会添加一个新集群(假设集群 2,然后是集群 3,它将处理自己的事件/实体子集)
如果您使用的是分片读取端,Lagom 会将分片的处理分布到集群中的所有节点上。因此,如果您有 10 个分片,1 个集群中有 6 个节点,则每个节点将在 1-2 个分片之间处理。如果您尝试部署两个集群,每个集群 3 个节点,那么您最终将每个节点处理 3-4 个分片,但每个事件将被处理两次,每个集群中一次。这对可扩展性没有帮助,而是做了两倍于需要完成的工作。所以我不明白为什么你想要两个集群,只有一个集群,Lagom会将碎片均匀地分布在上面。
如果您没有使用分片读取端,那么无论您集群中有多少节点,所有事件都将由一个节点处理。如果部署第二个群集,它不会共享负载,它还将处理相同的事件,因此每个群集都会对每个事件进行双重处理,这不是您想要的。
因此,只需使用分片读取端,让 Lagom 为您跨单个集群分配工作,这就是它的设计目的。