微服务通信方式:
1. 同步:RPC,REST等
2. 异步:消息队列。要考虑消息可靠传输、高性能,以及编程模型的变化等。
一、远程过程调用(Remote Procedure Invocation)
直接通过远程过程调用来访问别的service。
示例:
优点:
- 简单,常见
- 因为没有中间件代理,系统更简单
缺点:
- 只支持请求/响应的模式,不支持别的,比如通知、请求/异步响应、发布/订阅、发布/异步响应
- 降低了可用性,因为客户端和服务端在请求过程中必须都是可用的
二、消息
使用异步消息来做服务间通信。服务间通过消息管道来交换消息,从而通信。
示例:
消息队列中间件如何选型
1.协议:AMQP、STOMP、MQTT、私有协议等。2.消息是否需要持久化。3.吞吐量。4.高可用支持,是否单点。5.分布式扩展能力。6.消息堆积能力和重放能力。7.开发便捷,易于维护。8.社区成熟度。
RabbitMQ是一个实现了AMQP(高级消息队列协议)协议的消息队列中间件。RabbitMQ支持其中的最多一次和最少一次两种。网易蜂巢平台的服务架构,服务间通过RabbitMQ实现通信。