Redis与HTTP之间的服务之间通信

时间:2019-03-26 05:16:23

标签: web-services http design-patterns redis microservices

我们有一个整体式Rails API,该API也正在为我们的Websocket提供服务。最近,我们超过了ActionCable,我们决定将Websockets迁移到Elixir的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的事情。

0 个答案:

没有答案