什么是微服务架构中有效的通信方式
Posted
技术标签:
【中文标题】什么是微服务架构中有效的通信方式【英文标题】:What is an efficient way to communicate in microservices architecture 【发布时间】:2017-07-01 03:42:17 【问题描述】:我正在使用 Node.js 和基于 REST 的轻量级 Web 服务在服务器之间进行通信。我想知道服务器之间是否有另一种更有效的通信方式? 我在 *** 中使用 ec2 实例。
【问题讨论】:
【参考方案1】:将比基于 HTTP 的 REST 更高效,从最低效率到最高效率:
基于 HTTP/2 的 REST WebSocket TCP 套接字 UDP 数据包但是,如果您的微服务实际上在做任何有用的事情并且没有花费大部分时间处理 HTTP 标头,那么这种差异可能完全无关紧要。
例如,当您花费半秒等待数据库然后返回一兆字节的 JSON 时,添加几行额外的 HTTP 标头甚至可能无法衡量。
在进行过早优化之前,您需要对代码进行概要分析并对其进行测试,并记住,其中一些在发送更少字节方面更有效地进行通信的方式,在开发时间、维护和调试方面的效率可能会低得多.请记住,没有什么比基于文本的协议更容易检查和调试的了,比如您可以使用 netcat 或其他任何处理纯文本的方式与之对话的老式 HTTP/1.1。
【讨论】:
【参考方案2】:有几个选项:
如果你没有太多的微服务,它们很强大,在服务间通信中有很多 ACL/范围逻辑,没有什么比通过 HTTP/1.1 的旧 REST 更好的了。它是默认的最基本的网络语言,任何语言都有大量良好的 REST 连接器,这使得通信开发变得轻而易举。
如果有许多服务,需要消息持久性,并且任何类型的分布式事务都是不可避免的,那么选择功能强大的 u-boat 消息总线,如 RabbitMQ (AMQP)。可以使用任何其他消息传递协议/队列(ZeroMQ/通过 Redis) - 选择取决于您的系统 ISC 必须使用哪些特征。
IPC(通过 TCP 或 UDP),如上所述 - 对此选项的偏好取决于您编写服务所使用的语言,因为在某些语言中这样做比在其他语言中更容易,这需要大部分编写的代码(如果您的系统中的语言很少 - 这需要用每种语言编写)
套接字,如上所述。
我个人最喜欢的是前 2 个 - 一个提供简单和熟悉,另一个提供速度、稳健性和控制。
【讨论】:
【参考方案3】:以上2个答案都很好。我想知道您是否期待使用 Docker 来有效地支持您的微服务并具有更高的可见性和安全性。 所以,目前它被用作最流行的微服务架构组件。
这是一个很好的阅读:https://medium.com/aws-activate-startup-blog/using-containers-to-build-a-microservices-architecture-6e1b8bacb7d1#.qztlom227
【讨论】:
以上是关于什么是微服务架构中有效的通信方式的主要内容,如果未能解决你的问题,请参考以下文章