微服务的混合通信方法

时间:2019-09-06 14:20:52

标签: apache-kafka architecture microservices

我正在研究一个实际上将是旧项目的更好版本的项目。我们希望它具有可伸缩性,以能够应对高负载。因此,我们决定使用微服务而不是单片服务。然后,我开始进行有关微服务,它们如何通信,通用设计模式和其他方面的研究。由于我希望我的服务具有可伸缩性,因此基于事件的通信对我来说很有意义。因此,我决定为此目的使用kafka。

我们在系统中拥有更多的服务,但是为了简化我的问题,可以说我有两种服务类型,即工作节点和主节点。我希望它们都是可扩展的。目前,他们正在通过kafka进行交流。

我的问题:对于这种情况,我想从主节点发布一个事件(在主题上生成消息),并从所有工作节点获取该事件(从主题中消费)。但是对于其他情况,我需要向特定的工作节点发送一条消息。为了能够解决第一种情况,我所有的工作节点在kafka中都有不同的组ID,并且当在某个主题上发布消息时,他们都会收到该消息。我知道我无法使用kafka向特定用户发送消息。由于我的节点是可伸缩的,并且其数量可以根据负载而增加或减少,因此为每个节点创建主题似乎不是一个好主意。我的第一个解决方案是在消息中添加工作节点ID。因此,其他工作节点可以忽略该消息。很好,但是我认为这不是一个好的解决方案。我的第二个解决方案是如果要向特定节点发送消息,则发送http请求。但是我不知道混合两种通信方法是一个好的解决方案。

你们如何看待这个问题。是否有我所缺少的更好的解决方案?还是我的整个设计出错了?

2 个答案:

答案 0 :(得分:0)

对于您描述的用例,Kafka不是合适的技术。我建议使用Cadence Workflow,它本身支持将任务路由到特定节点以及消息传递系统缺少的许多其他功能。

如有特殊问题,随时加入Cadence Workflow slack channel

答案 1 :(得分:0)

我认为您应该能够。考虑常规的卡夫卡流程。您有一些消费群体订阅了该主题。在您指定之前,生产者不会将消息发送到特定分区。

Regular Flow

现在考虑一下您根据算法向特定分区生成一些消息的情况。

Partitioned Flow

  • 从A收到的消息
  • 某种算法,例如哈希码,对于A总是生成0
  • 邮件发送到分区0
  • 消费者1连接到Partiton 0
  • 只有消费者1收到来自A的消息
相关问题