Micro - 服务间的通讯浅析

传输层 (Transport )

目前官方支持的Transport

  • HTTP
  • NATS
  • Rabbitmq

Transport的作用

  • 将传输的内容统一成如下格式,并序列化成
1
2
3
4
type Message struct {
Header map[string]string
Body []byte
}
  • 服务 Node 和 Node 之间的消息传输

协议 (Codec)

目前支持的协议

  • JSON
  • PROTOBUF

服务底层的协议格式

1
2
3
4
type Message struct {
Header map[string]string
Body []byte
}

Q&A

  1. 两个服务节点之间是否可以支持使用不同的 Transport

不支持,因为传输层是需要进行数据序列化和反序列化的,同时节点通讯其实是Transport的Client和Server进行通讯。(Server部分可以使用martini, gin, echo 等框架实现,但是他们同属于HTTP范畴,所以可以认定为相同的Transport)

  1. 服务于服务之间是如何传输的,如果客户端使用某种协议时,服务端是如何响应并解码的?

Micro 服务是基于 Transport 进行的,Transport 可以有多种实现方式,例如 RabbitMQ,NSQ,HTTP,NTATS……,由于不同的Transport有自己的协议,例如HTTP的协议我们基本可以认为他会分为 Header 和 Body 两个部分,因此,HTTP Transport 的实现就会把请求里的HTTP Request Header 作为 Message 里的 Header, Body 也直接从请求里获取,也就正好填充了 Message 这个结构体,Micro Server 根据 Header 里的 Content-Type 来确定使用哪一种 Codec 来进行解码,目前只有JSON和 ProtoBuf,Codec 的作用是将Body里的数据解码到具体的服务的协议。