混合 sync/async 交互中的微服务和消息消费

Microservices and message consumption in mixed sync/async interaction

我正在使用微服务架构开发文档管理系统 (DMS)。虽然大多数服务通过直接同步调用(Netflix Ribbon + Hystrix)相互交互,但中间有消息系统(Apache Kafka)用于异步文档处理。

我的 DocumentService,处理文档(也使用其他服务)并提供 public API 非常好 "fat",我无法决定它是否值得使 DocumentService 使用文档或创建另一个微服务,将文档委托给 DocumentService 进行进一步处理?

以下是这些变体的图表: Without pre-processing microservice


With document consuming service


一方面,我不想创建太多的微服务,因为它更难控制实例,但我也不想让微服务变得太胖。

P.S。每个微服务可能有多个实例。

如果文档消费者的目的只是隐藏文档服务的API,那几乎肯定是在浪费时间。如果问题是文档服务太大,并且难以按异步文档处理所需的方式进行扩展,那就是另一个问题了。

我过去通过使用相同的二进制文件并为其创建多个接口来解决这个问题,允许我在 "service mode" 或 "worker mode" 中部署它。在 "service mode" 中,它服务于 public 和同步请求。在工作者模式下,系统的一个子集只是为了服务队列中的消息而启动。