DAY-16 入门Go项目11 | 青训营笔记

41 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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架设在不同的通讯协议之上。