这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
这篇文章主要是收集了笔者在学习今天的课程,在学习了一些RPC原理与实践设计与实现课程后并进行实践操作后,总结了一些注意点。
RPC 原理与实践注意点
RPC概念
RPC,即Remote Procedure Call,顾名思义,就是“远程进程调用”,也就是进程之间相互通信的工具。
我们不妨假设一个场景:当我们学完分布式系统的设计后,从某个服务,想要获得另外的一个服务,的某个api接口函数返回结果,那么应该怎么操作。此时有个学完api的同学可能会说,直接在这个服务写个HTTP请求,发送个api请求不就得了!
可以是可以,但是有一点不好:http的效率太差了,在每个服务之间相互调用,会使得系统的效率大幅降低。那么,又会有同学会说:直接引入另外的服务的函数所在类不就得了?
毋庸置疑,这也不好,会使得代码的耦合度增加。决定一个系统的是否优秀的一大指标,就是耦合度的高低!
因此,我们需要一个工具,用来给我们的分布式系统之间,不同服务,或者是不同进程之间,互相调用的工具。而这个高效的工具,就是RPC了。
RPC信息格式——IDL
我们学习api的时候,在前后端之间传输的数据格式有:json、xml甚至是简单的字符串。而在RPC的也同理。然后,我们需要一份用来定义这些传输数据的格式,以及RPC本身名称等信息的文档,就是IDL文档。 目前,IDL有两种主流的类别:Thrift和Protobuf。
- Protobuf
比起Thrift,本人更常用Protobuf,而据我观察,目前利用Protobuf文件,的代码生成插件等第三方便利工具,也要更多。
Protobuf定义一个rpc,有两步:
先定义传输数据格式(request和reply):
message DeleteByIdentityReq {
string repositoryId = 1;
}
message DeleteByIdentityResp {
int64 size = 1;
}
再定义rpc的名称:
rpc deleteByIdentity(DeleteByIdentityReq) returns (DeleteByIdentityResp);
然后一个rpc的简单定义过程就结束了...