这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天
初识 Go 语言微服务框架
一、Go 微服务与RPC
RPC 与 微服务
RPC 全称是 远程过程调用(Remote Procedure Call);微服务属于RPC的一种,但是广义上的RPC指的是项目之间的调用。
RPC 是把单体项目做了粗粒度的拆分,微服务把单体项目拆分的更零碎。
- RPC 是独立系统之间的调用,不过于注重事务的一致性,毕竟独立系统各自使用的数据库也不同,不能组成全局的分布式事务。
- 微服务更注重分布式事务,微服务原本是一个系统,拆分出来的各个模块,模块之间有分布式事务。
RPC的优点:像使用本地函数一样使用远程服务
- 简单
- 高效
跨语言 RPC
跨语⾔的RPC
标准库的RPC默认采⽤Go语⾔特有的gob编码,因此从其它语⾔调⽤Go语⾔实现的RPC服务将⽐较困难。
相比较与通用的JSON编码,每个语言都认识它,他就是一个跨语言的编码,但是gob不是跨语言的编码,所以我们要选择一个合适的编码。
- 常见的编解码有:
MessagePack:高效的二进制序列化格式
JSON:文本编码(即肉眼可以看懂的)
XML:文本编码
ProtoBuf:二进制编码(即肉眼看不懂,需要按照他的规范去解码,才可以看懂)
在微服务时代,每个RPC以及服务的使用者都可能采用不同的编程语⾔,跨语言是互联网时代 RPC的⼀个首要条件。得益于RPC的框架设计,Go 语⾔的 RPC 也是很容易。
Go语⾔的 RPC 框架的特色设计:
- RPC 数据打包时可通过插件实现自定义的编码和解码
- RPC 建⽴在抽象的
io.ReadWriteCloser接口之上,可将RPC架设在不同的通讯协议之上。