微服务架构中高效的通信方式是什么

问题描述 投票:0回答:3

我使用 Node.js 和基于 REST 的轻量级 Web 服务在服务器之间进行通信。我想知道服务器之间是否有另一种更有效的通信方式? 我在 VPN 中使用 ec2 实例。

node.js web-services amazon-ec2 microservices
3个回答
7
投票

比 HTTP 上的 REST 更高效,从效率最低到效率最高:

  • 通过 HTTP/2 进行 REST
  • WebSocket
  • TCP 套接字
  • UDP数据包

但是,如果您的微服务实际上正在做任何有用的事情并且没有花费大部分时间处理 HTTP 标头,那么这种差异可能完全无关紧要。

例如,当您花费半秒等待数据库,然后返回一兆字节的 JSON 时,添加几行额外的 HTTP 标头甚至是不可测量的。

您需要在进行过早优化之前对代码进行分析和测试,并记住,在发送更少字节方面更有效地进行通信的某些方法在开发时间、维护和调试方面可能会效率低得多。请记住,没有什么比基于文本的协议(例如旧的 HTTP/1.1)更容易检查和调试了,您可以使用 netcat 或任何其他处理纯文本的协议进行通信。


1
投票

有几个选项:

  • 如果您没有太多微服务,它们很强大,在服务间通信中具有大量 ACL/作用域逻辑,没有什么比通过 HTTP/1.1 的旧式 REST 更好了。它是默认的最基本的网络语言,任何语言都有大量良好的 REST 连接器,这使得通信的开发变得轻而易举。

  • 如果有很多服务,需要消息持久化,并且任何类型的分布式事务是不可避免的,那么选择强大的 u-boat 消息总线,如 RabbitMQ (AMQP)。可以使用任何其他消息传递协议/队列(ZeroMQ/通过 Redis) - 并且选择取决于您的系统 ISC 必须具备哪些特征。

  • IPC(通过 TCP 或 UDP),如上所述 - 对此选项的偏好取决于编写服务所用的语言,因为在某些语言中执行此操作比在其他语言中更容易,并且这需要编写大部分代码(如果您的系统中的语言很少 - 这将需要用每种语言编写)

  • 套接字,如上所述。

我个人最喜欢的是前 2 名 - 一个提供简单性和熟悉性,另一个提供速度、稳健性和控制力。


0
投票

以上2个答案完全没问题。我想知道您是否期待使用 Docker 来高效支持您的微服务并获得更高的可见性和安全性。 到目前为止,它被用作最流行的微服务架构组件。

这是一本好书:https://medium.com/aws-activate-startup-blog/using-containers-to-build-a-microservices-architecture-6e1b8bacb7d1#.qztlom227

© www.soinside.com 2019 - 2024. All rights reserved.