Web services Redis vs HTTP用于服务之间的通信

Web services Redis vs HTTP用于服务之间的通信,web-services,http,design-patterns,redis,microservices,Web Services,Http,Design Patterns,Redis,Microservices,我们有一个整体Rails API,它也为我们的WebSocket提供服务。最近,我们超过了ActionCable,我们决定将我们的WebSocket迁移到Elixir's Phoenix 在这个模型中,客户端仍然与Rails应用程序进行HTTP请求交互,但Phoenix处理所有Websocket流量。Rails向Phoenix发送什么数据以及在什么信道上,Phoenix基本上充当Rails发送数据的传递 我最初是使用Redis PubSub设置的,用于从Rails到Phoenix的通信。它在目前

我们有一个整体Rails API,它也为我们的WebSocket提供服务。最近,我们超过了ActionCable,我们决定将我们的WebSocket迁移到Elixir's Phoenix

在这个模型中,客户端仍然与Rails应用程序进行HTTP请求交互,但Phoenix处理所有Websocket流量。Rails向Phoenix发送什么数据以及在什么信道上,Phoenix基本上充当Rails发送数据的传递

我最初是使用Redis PubSub设置的,用于从Rails到Phoenix的通信。它在目前的规模下运行良好,但我开始认为它可能是一个较差的选择。以下是我的利弊清单:

Redis

优点:

  • 有序消息(在我们的情况下不重要)
  • 充当适当的排队机制
  • 来自Rails的快速而简单的发布
缺点:

  • 没有竞争性消费者-如果我有多个Phoenix消费者,我将不得不手动实现平衡(很有可能)
  • 并发更难很好地实现(这实际上与Elixir的优势背道而驰)
HTTP

优点:

  • 并发是免费的
  • 负载平衡是免费的-一个请求只能由一个Phoenix消费者完成
  • 实现起来稍微简单一些
缺点:

  • 无序消息(对我们来说不重要)
  • 从Rails发送消息要慢得多
  • 必须手动对来自Rails的HTTP请求执行重试和超时
  • 如果消息丢失(由于服务器重启或类似原因),它将永远消失

即使在权衡之后,我仍然发现很难声称这是一个明确的选择。服务之间是否有Redis或HTTP通信模式可以缓解我的一些问题?如果没有,考虑到缺点,这两个选项中哪一个更可取


有没有其他我忽略的简单选择?如果可以避免的话,我不想涉及像Rabbit MQ这样的东西。

你为什么不喜欢实际的队列?它可以从HTTP中获得所需的并发性,没有任何缺点。@aridlehoover我觉得Rabbit MQ之类的东西似乎是解决我的“小钉子”问题的“大锤”解决方案。然而,如果这是标准,我当然愿意尝试一下。但我也很好奇人们是如何用更传统的工具实现跨服务通信的。为什么你不喜欢实际的队列?它可以从HTTP中获得所需的并发性,没有任何缺点。@aridlehoover我觉得Rabbit MQ之类的东西似乎是解决我的“小钉子”问题的“大锤”解决方案。然而,如果这是标准,我当然愿意尝试一下。但我也很好奇人们是如何使用更传统的工具实现服务间通信的