简单说说 RPC 框架,你 悟到了吗?

举报
看,未来 发表于 2021/11/26 18:45:01 2021/11/26
【摘要】 愿打开此篇对你有所帮助。网上讲的不明不白的居多,我来试试,争取让==做过后端开发项目的学生==能看明白,基础再往下我就没办法了。如果有大佬,可以帮我看看我理解的是不是有错。最基本的 CS 框架先说一下是怎么交流业务的吧,不画图,画图麻烦,几句话的事情而已。1、客户端把请求打个包,发给服务端。2、服务端收到请求包,解包,判断业务类型。3、根据业务类型,调用相应方法,有数据返回则返回,没有则结束...

愿打开此篇对你有所帮助。

请添加图片描述

网上讲的不明不白的居多,我来试试,争取让==做过后端开发项目的学生==能看明白,基础再往下我就没办法了。

如果有大佬,可以帮我看看我理解的是不是有错。


最基本的 CS 框架先说一下是怎么交流业务的吧,不画图,画图麻烦,几句话的事情而已。

1、客户端把请求打个包,发给服务端。
2、服务端收到请求包,解包,判断业务类型。
3、根据业务类型,调用相应方法,有数据返回则返回,没有则结束。
4、若有数据返回,服务端再打个包,发回给客户端。

熟悉吧。

写个简单架构设计哈:

客户端

网络层

业务转发层

业务层

model层

持久层

这个难道不是RPC吗?有点迷


RPC,远程过程调用协议,Remote Procedure Call Protocol。网上有一部分人把 RPC 和 什么传入服务端类、函数名及参数,然后直接调用服务端方法扯在一起,以去掉上面的业务转发层。不晓得,云里雾里的,就看那一层业务转发层那么讨厌吗,曾经我也有点喜欢这种直接传函数名的方式,感觉真直接。但是去思考如何实现的时候有点想不明白。


来张 RPC 调用的图吧:
在这里插入图片描述


其实吧,把 ORM 和 RPC 放在一起理解我觉得会比较好一些,初学的时候,我们调用数据库,是在业务层面直接拿数据库句柄,传SQL语句进去,获取结果。
后来使用 ORM 框架,将数据库和业务层解耦,我们在业务层只需要将参数传入数据库映射层,由映射层去构造SQL语言,执数据库句柄,和数据库交互,如果有结果就把结果返回给业务层。
从此我们在业务层再也不用关心数据库选型、数据表、SQL语句等具体实现。

那 RPC 呢,我是不是可以这样理解。我们在业务层要向服务端发送请求包的时候,我们要拿着通信套接字,然后构造数据包,往里面 send。(别说数据包模块是分离出来的,分离出来了不要调用数据包模块接口吗?)当服务端返回结果时,又要拿着通信套接字,从里面 recv 数据包,然后分包,解包,获取数据。
这一切细节都要放在业务层,亲力亲为。如果是长连接还稍微好点,短链接像HTTP,我还交流一次连一次啊?
所以,我们就把和网络交流的这些流程都抽象到一个层,上面是写个 RPCruntime 哈,咱也叫它 model 层呗,网络映射层。

==ORM 框架使得业务层调用数据库就像调用本地方法一样,RPC 则使得调用网络通信接口如同调用本地方法一样==。
这样讲,明白吗?流程还是我们最开始的那个C/S流程,只是加了个网络通信映射层。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。