大多数异步微服务架构中的同步通信

时间:2016-10-15 11:40:51

标签: architecture publish-subscribe microservices

我正在尝试从我的整体应用程序宠物项目中提取一些服务,主要是作为学习练习。我正在使用AMQP(RabbitMQ)进行服务之间的通信,这很好用。但是,我无法将Web前端与应用程序的其余部分分开。 Web服务负责视图和UI逻辑,但需要查询后端“核心”服务以获取主数据。 AMQP看起来不太合适,因为前端服务需要等待响应,响应时间至关重要。我的第一个想法是为这条通信线路实现REST接口,但同样的服务也使用AMQP来订阅其他服务的通信。

这似乎应该是很常见的事情,但我找不到任何答案。

我想我的主要问题是当一个服务需要提供同步和异步通信时该怎么做。我也使用Ruby,它不适合拥有在两个接口上监听所需的多个线程。我考虑过的一些事情:

  • 只需使用AMQP,发送带有reply_to字段的邮件,然后阻止直到收到回复。
  • 提取核心后端服务的数据访问部分并为其提供REST API。然后,Web服务和“订阅”部分都将查询此其他服务。似乎没有必要为访问数据库提供服务。
  • 拥有多个线程并使用某种事件循环来侦听两个接口。看起来过于复杂。

1 个答案:

答案 0 :(得分:0)

在构建分布式系统(SOA /微服务)时,您将使用CQS模型(命令查询分离),这可以转换为2个不同的通道,一个用于命令和事件,一个用于状态更改(异步消息传递)和另一个对于查询,只读数据模型(同步读取)。

在您开始工作之后,您可以查看创建反映数据业务状态(而不是瞬态OLTP数据)的视图模型,并结合使用pub / sub进行数据分发(不是完整数据集,而是上下文数据 - 即产品价格变动)

是的,它使事情变得更复杂,但有助于减少耦合,这有助于您构建更好的系统

有意义吗?