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

时间:2017-02-13 08:03:56

标签: node.js web-services amazon-ec2 microservices

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

3 个答案:

答案 0 :(得分:7)

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

  • REST over HTTP / 2
  • 的WebSocket
  • TCP套接字
  • UDP数据包

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

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

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

答案 1 :(得分:1)

选项很少:

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

  • 如果有许多服务,需要消息持久性,以及任何类型的分布式事务都是不可避免的,那么选择就像RabbitMQ(AMQP)这样强大的u-boat消息总线。可以使用任何其他消息传递协议/队列(ZeroMQ / via Redis) - 选择取决于系统ISC必需的特性。

  • IPC(通过TCP或UDP),如上所述 - 此选项的优先选择取决于您的服务编写语言,因为在某些语言中这样做比其他语言更容易,这需要大多数编写的代码(如果您的系统中只有少量语言 - 需要在每个语言中编写)

  • 套接字,如上所述。

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

答案 2 :(得分:0)

以上2个答案完全没问题。我想知道您是否期待使用Docker以便有效地支持您的微服务并提高可见性和安全性。 因此,它被用作最流行的微服务架构组件。

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