Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Microservices 使用动态分区跨microservice实例拆分工作_Microservices_Partitioning_Worker - Fatal编程技术网

Microservices 使用动态分区跨microservice实例拆分工作

Microservices 使用动态分区跨microservice实例拆分工作,microservices,partitioning,worker,Microservices,Partitioning,Worker,我在DB中有一个“要发送的消息”表。相同目的地的消息顺序很重要 例如: create table outbox ( id int serial, destination varchar payload varchar ) 目前我有一个线程,它通过id从发件箱订单中选择*,因为id是已订购的,所以我可以根据目的地将其分组并发送 现在我想让它成为一个独立的微服务,但如果我必须扩展它,我不确定如何处理它。这将扩展到DB可以扩展的范围(因为您将同步的负担放在DB上) 请注意,您

我在DB中有一个“要发送的消息”表。相同目的地的消息顺序很重要

例如:

create table outbox (
    id int serial,
    destination varchar
    payload varchar
)
目前我有一个线程,它通过id从发件箱订单中选择*,因为id是已订购的,所以我可以根据目的地将其分组并发送


现在我想让它成为一个独立的微服务,但如果我必须扩展它,我不确定如何处理它。

这将扩展到DB可以扩展的范围(因为您将同步的负担放在DB上)

请注意,您的ID是全局同步的,而您实际上只需要对每个目的地进行同步。通过按目的地对发件箱表进行分片,您可以走得更远:创建
N
发件箱表,并一致地将给定的目的地映射到给定的发件箱表。您可以根据需要增加发件箱表的数量,只要这样做不会导致现有目标使用的发件箱表发生变化(这可以通过表跟踪给定目标要使用的发件箱表来实现:可以通过发件箱表的哈希模数将条目添加到该表中)。在极限情况下,当您将其向外扩展时,每个目的地可能会有一个发件箱表

上述内容在任何情况下都是可以实现的

这就是说,消息发送的重要顺序要求与actor计算模型惊人地相似(例如,大多数(如果不是全部的话)actor实现提供了一种保证,即如果actor a向actor B发送消息X、Y、Z,actor B将按照发送的顺序接收这些消息)。许多参与者模型框架(例如JVM上的Akka、Akka.Net、Orleans、Lagom、Cloudstate、Ray(?)支持跨集群切分参与者并使用事件源持久性的概念,这将管理我上面为您概述的许多方面。因此,值得研究这种方法,而不是自己尝试实现所有这些