【发布时间】:2019-10-26 00:57:56
【问题描述】:
我们拥有基于微服务架构的应用程序的第一个版本。我们使用 REST 进行外部和内部通信。
现在我们要从 CP(CAP 定理)* 切换到 AP,并使用消息总线进行微服务之间的通信。 有很多关于如何基于Kafka、RabbitMQ等创建事件总线的资料。 但是我找不到 REST 和消息传递组合的任何最佳实践。 例如,您创建了一个汽车服务,您需要添加不同的汽车组件。为此,将 REST 与 POST 请求一起使用会更有意义。另一方面,预订汽车的服务对于基于事件的方法来说将是一项很好的任务。
当您拥有不同的字典和业务逻辑功能时,您是否有类似的方法?你如何将它们结合起来?只是分别支持这两种方法?还是用一种方法统一它们?
* 对于第一个版本,我们同意选择一致性和分区容差。但现在可用性对我们来说变得更加重要。
【问题讨论】:
-
我觉得这个问题很难理解。你的意思是“AP from CP”而不是“AP form CP”?您能否改进这句话:“我看不出有任何理由使用事件 (..) 但为基于事件的方法创建汽车服务预订好任务。” “你如何结合它们”是什么意思?是否要同时实现 REST-API 和非 REST-API?
-
@www.admiralalit.nl 感谢您的评论。我已经编辑了。
-
如果您将 CQRS(命令查询职责分离)视为事件驱动(命令)和基于 REST(查询)之间的拆分,那么您会看到不同的操作如何使用不同的通信方法。我不会在给定的操作中同时使用这两种协议,因为 REST 是一种阻塞协议,而事件本质上是非阻塞和异步的。
-
在微服务之间,你永远不会使用 Post 请求。就像有人提到的 REST/HTTP 是阻塞协议。所以你不能很好地扩展。通常你会使用 SAGA 模式。您在本地提交事务并在消息代理上发出事件。该事件将被其他服务消费。如果有任何问题,您需要提出有偿交易/事件。您还可以在本地保存事件,然后再发布它们调用发件箱模式。因此,如果服务总线不可用,您不会丢失事件microservices.io/patterns/data/saga.html
标签: rest microservices messagebroker event-bus cap-theorem