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

What is an efficient way to communicate in microservices architecture

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

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

  • REST 结束 HTTP/2
  • WebSocket
  • TCP 套接字
  • UDP 数据包

但是,如果您的微服务实际上在做任何有用的事情并且不花费大部分时间处理 HTTP headers。

,那么这种差异可能完全无关紧要

例如,当您花半秒钟等待数据库然后 return 兆字节 JSON 然后添加几行额外的 HTTP headers 甚至无法测量.

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

选项很少:

  • 如果你没有太多的微服务,它们很强大,在 inter-service 通信中有很多 ACL/scoping 逻辑,没有什么比通过 [=33 的旧 REST 更好的了=].1.它是默认的最基本的网络语言,任何语言都有很多好处REST-connectors,这使得通信的发展变得轻而易举。

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

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

  • 套接字,如上所述。

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

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

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