有没有可能在Go中创建一个既使用消息流(来自Kafka)又读取REST API请求的服务?

j5fpnvbx  于 2023-03-27  发布在  Go
关注(0)|答案(1)|浏览(90)

我最近读了一篇文章Sharing Data Between Microservices on High Scale
这是一张关于异步连接的图片。

如果我没记错的话,这张图中的【订单页面】服务似乎可以读取Kafka的消息流,也可以读取前端APP的REST API请求。
因此,我想知道是否有可能编写一个可以同时完成这两项任务的服务:

  • 阅读来自Kafka的消息流
  • 读取REST API请求

在一个服务中,例如在Go中。
也是一个好主意吗?

olmpazwi

olmpazwi1#

是的,你绝对可以编写一个从Kafka消费的go服务,同时也公开一个REST端点。但是,这不是一个理想的设计决策。
基于Kafka的流媒体系统允许生产者和消费者之间的异步通信。然而,基于REST API的系统在调用者和被调用者之间进行同步通信。
同步和同步模式通信的可用性保证是不同的。基于Kafka流的系统将有与REST API不同的可用性保证。在流系统中,我们关注消息处理的吞吐量,而在同步通信端到端中,延迟是主要关注点(你不想让调用者等待很长时间才能得到结果)。
如果我们把这两种类型的系统放在一个服务中,就很难看到服务的可用性。此外,服务的异步部分或同步部分可能会在另一方的嘈杂邻居中发挥作用,从而使服务不可用。
因此,一般来说,建议将基于REST的API和Kafka流作为两个单独的服务。

相关问题