服务与服务之间通信的核心就是RPC框架
异步通信偏消息队列
gRPC
gRPC用官网一句话概括“A high-performance, open-source universal RPC framework"
- 多语言:语言中立,支持多种语言
- 轻量级、高性能:序列化支持PB(Protocal Buffer,Protocol buffers 是一种语言中立,平台无关,可扩展的序列化数据的格式,可用于通信协议,数据存储等。),和Json,PB是一种语言无关的高性能序列化框架
- 可插拔:支持内部各种各样的插件,如扩展负载均衡、服务发现等
- IDL:基于文件(PB)定义服务,听过proto3工具生成任何指定语言的数据结构、服务端接口以及客户端Stub
- 设计理念
- 移动端:基于标准的HTTP/2.0设计,支持双向流、消息头压缩、单 TCP的多路复用、服务端推送等特性,这些特性使得gRPC在移动端设备商更加省电和节省网络流量。HTTP/1.x是单向request、response模型,导致这个连接在发送请求后无法使用,除非再返回,其复用情况很差,所以必须要有很多连接,连接多起来就会造成资源大量浪费。HTTP/2.0支持单个TCP连接的多路复用。
- 服务非对象、消息非引用:促进微服务的系统间粗粒度消息交互设计理念。
- 负载无关的:支持不同的服务需要使用不同类的消息类型和编码,例如protocol buffers、Json、XML、Thrift。
- 流:支持Streaming API。
- 阻塞式和非阻塞式:实现中支持异步和同步处理在客户端和服务端交互的消息序列。
- 支持元数据交换:常见的横切关注点,如认证或跟踪,依赖数据交换。
- 标准化状态码:客户端通常以有限的方式响应API调用返回的错误。