【问题标题】:Rabbitmq, Redis and Hazlecast in a scalable microservice architecture可扩展微服务架构中的 Rabbitmq、Redis 和 Hazlecast
【发布时间】:2020-03-11 20:00:19
【问题描述】:

我有一个关于微服务架构内可扩展性的问题:

独立于服务间通信方式(REST HTTP基于消息),如果服务可扩展,这意味着服务的多个副本 服务即将启动,共享主内存如何 实现了吗? 更准确地说,instance1 怎么访问 实例2?

我问这个问题是因为服务的所有实例之间共享的非内存数据库可能会降低读写过程的速度。

设计可扩展系统架构的专家能否解释一下, 究竟有什么区别在使用(开源)Redis 解决方案或使用(开源)Hazlecast 解决方案 有问题吗?

作为另一种可能的解决方案:使用 Rabbitmq 设计可扩展系统:

将消息队列用作共享内存解决方案是否可行,通过 将消息中的大/中型对象发送到工作队列?

感谢您的帮助。

【问题讨论】:

  • 消息队列一般不处理大对象。有关详细信息,请参阅this answer。你的问题的其余部分充其量是太宽泛了。你能缩小范围,或者问一个更具体的问题吗?

标签: redis rabbitmq microservices scalability hazelcast


【解决方案1】:

要启动多个服务实例,如何实现共享主存?更准确地说,instance1如何访问instance2的内存?

你没有。 无状态工作负载通过添加更多副本来扩展。重要的是,这些副本实际上是无状态松散耦合 - 不共享任何内容。所有副本仍然可以与内存中的服务或数据库通信,但该有状态服务是它自己的独立服务(在微服务架构中)。

使用(开源)Redis 解决方案和使用(开源)Hazelcast 解决方案解决这个问题到底有什么区别?

两者都是有效的解决方案。哪个最适合您取决于哪种库、协议或集成模式最适合您。

通过将消息中的大/中大小对象发送到工作队列,将消息队列用作共享内存解决方案是否可行?

是的,这很好。或者,您可以使用分布式发布-订阅消息传递平台,例如 Apache KafkaApache Pulsar

【讨论】:

  • sry,我似乎在这里混合了术语:例如,我的意思是复制品。不确定实例还有什么含义。我不是指物理实例。
  • 感谢您的回答,我可能会给出一个直接的用例示例,以便为讨论提供更好的基础。一个主要问题是,数据库访问是否会成为一个巨大的瓶颈,是否可以通过使用内存解决方案来克服这一瓶颈?如果是,哪个适合实际问题?
  • @Jwf 实例和副本在我的回答中是一回事,很抱歉没有使用与您相同的词。
  • @Jwf 数据库可能是一个瓶颈,但这是一个不同的问题。您可以扩展数据库或添加缓存...这完全取决于您的情况。
  • 感谢您的意见。我在这里发布了一个更具体的用例:stackoverflow.com/questions/58902946/…
猜你喜欢
  • 2020-11-07
  • 2017-08-28
  • 2021-12-10
  • 2020-03-27
  • 2021-04-25
  • 1970-01-01
  • 2017-05-08
  • 2012-09-17
  • 2011-06-20
相关资源
最近更新 更多