0

我们计划将 pub-sub 和 request-reply 通信模型引入我们的 microservices 架构。两种通信模型都需要。

一种解决方案可能是使用 RabbitMQ,因为它可以提供两种模型并提供 HA、集群和其他有趣的功能。

RabbitMQ 请求-回复模型需要使用队列,用于输入和输出消息。只有一个服务可以从输入队列中读取,这增加了耦合。

在同一系统中使用请求-回复和发布-订阅通信模型是否有任何其他推荐的解决方案?服务网格会是更好的选择吗?

它应由 node.js、python 和。净核心。

谢谢您的帮助

4

2 回答 2

3

有多个 pub-sub 和 request-reply 支持 HA 通信模型:

1. 卡夫卡

Kafka 严重依赖文件系统来存储和缓存消息。所有数据都会立即写入文件系统上的持久日志,而不必刷新到磁盘。实际上这只是意味着它被转移到内核的页面缓存中。

Kafka 的设计考虑到了失败。在某个时间点,Web 通信或存储资源出现故障。当代理离线时,其中一个副本将成为分区的新领导者。当代理重新上线时,它没有领导分区。Kafka 会跟踪哪台机器被配置为领导者。一旦原始代理恢复并处于良好状态,Kafka 就会恢复它在此期间丢失的信息,并再次使其成为分区领导者。

看 :

2.Redis

Redis 是一个开源(BSD 许可)的内存数据结构存储,用作数据库、缓存和消息代理。它支持数据结构,例如字符串、散列、列表、集合、具有范围查询的排序集合、位图、超日志、具有半径查询和流的地理空间索引。Redis 内置复制、Lua 脚本、LRU 驱逐、事务和不同级别的磁盘持久性,并通过 Redis Sentinel 和 Redis Cluster 自动分区提供高可用性。

看 :

3. 零MQ

ZeroMQ(也称为 ØMQ、0MQ 或 zmq)看起来像一个可嵌入的网络库,但其行为却像一个并发框架。它为您提供跨各种传输(如进程内、进程间、TCP 和多播)传输原子消息的套接字。您可以使用扇出、发布-订阅、任务分发和请求-回复等模式连接 N 对 N 套接字。它的速度足以成为集群产品的结构。它的异步 I/O 模型为您提供可扩展的多核应用程序,构建为异步消息处理任务。它有许多语言 API,可以在大多数操作系统上运行。

看 :

4.RabbitMQ

RabbitMQ 是轻量级的,易于在本地和云端部署。它支持多种消息传递协议。RabbitMQ 可以部署在分布式和联合配置中,以满足大规模、高可用性的要求。

于 2020-08-01T19:42:38.517 回答
2
  • 我的偏好是拥有用于 模式的RESTapi 。request-reply这特别适用于您控制通信机制的内部微服务。如果您正确定义它们并且您可以根据需求横向扩展和缩减服务的实例数量,我不理解您关于为什么它们不可扩展的评论。无论是Kafka,RabbitMQ还是任何其他代理,我都不认为它们是request-reply为主要用例而开发的。并且不要忘记您使用的任何代理,如果它A->B->C在 REST 中,它将是A->broker->B->broker->C->broker->A并且代理需要进行内部管理。

  • 然后对于 pub-sub,我会使用Kafka统一模型,它可以支持 pub-sub 以及点对点。

  • 但是,如果您仍然想使用代理进行请求-回复,我会检查Kafka它可以通过分区进行大规模扩展,并且使用它构建了许多接近真实的流应用程序。所以它可能接近request-reply 模式的最小延迟要求。但是我希望在此之上有一个框架来关联请求和回复。所以我会考虑使用 Spring Kafka 来实现这一点

于 2020-07-30T18:47:50.757 回答