第32讲 | RPC协议综述:远在天边,近在眼前
刘超
该思维导图由 AI 生成,仅供参考
前面我们讲了容器网络如何实现跨主机互通,以及微服务之间的相互调用。
网络是打通了,那服务之间的互相调用,该怎么实现呢?你可能说,咱不是学过 Socket 吗。服务之间分调用方和被调用方,我们就建立一个 TCP 或者 UDP 的连接,不就可以通信了?
你仔细想一下,这事儿没这么简单。我们就拿最简单的场景,客户端调用一个加法函数,将两个整数加起来,返回它们的和。
如果放在本地调用,那是简单的不能再简单了,只要稍微学过一种编程语言,三下五除二就搞定了。但是一旦变成了远程调用,门槛一下子就上去了。
首先你要会 Socket 编程,至少先要把咱们这门网络协议课学一下,然后再看 N 本砖头厚的 Socket 程序设计的书,学会咱们学过的几种 Socket 程序设计的模型。这就使得本来大学毕业就能干的一项工作,变成了一件五年工作经验都不一定干好的工作,而且,搞定了 Socket 程序设计,才是万里长征的第一步。后面还有很多问题呢!
如何解决这五个问题?
问题一:如何规定远程调用的语法?
客户端如何告诉服务端,我是一个加法,而另一个是乘法。我是用字符串“add”传给你,还是传给你一个整数,比如 1 表示加法,2 表示乘法?服务端该如何告诉客户端,我的这个加法,目前只能加整数,不能加小数,不能加字符串;而另一个加法“add1”,它能实现小数和整数的混合加法。那返回值是什么?正确的时候返回什么,错误的时候又返回什么?
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
RPC协议是一种实现跨主机服务调用的重要技术,本文深入探讨了在远程调用中面临的挑战和解决方案。文章首先介绍了远程调用中的协议约定问题,包括语法规定、参数传递和数据表示,以及服务端实现和端口访问等方面的讨论。接着,文章详细探讨了传输问题,包括错误处理、重传、丢包和性能问题的解决方案。此外,文章还介绍了服务发现问题,即如何找到RPC服务端的随机端口。通过对这些问题的深入分析,读者能够快速了解RPC协议的复杂性和技术特点。 在技术层面上,文章提到了大牛Bruce Jay Nelson的论文和早期ONC RPC框架,以及NFS的实现,这些都为解决远程调用中的各种问题提供了示范性实现。此外,文章还提出了两个思考题,引发读者对远程调用技术的深入思考。 总之,本文通过深入浅出的方式解释了远程调用中的技术挑战和解决方案,为读者提供了全面的视角。对于想要深入了解远程调用技术的读者来说,这篇文章是一份极具价值的资料。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《趣谈网络协议》,新⼈⾸单¥68
《趣谈网络协议》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(40)
- 最新
- 精选
- 吴军旗^_^越往后人的留言越少, 看来成为大牛的路上会越来越孤单
作者回复: 坚持到最后,你就是大牛
2019-07-10224 - 忆水寒刘老师,我们目前的分布式系统采用以下方式。我们实现了一种中间件,每个进程(客户端)要与其他进程通信,就要到中间件注册(注册了自己进程的一个ID,任务名称,还有一个消息队列),然后将消息用google的protobuf封装进行传输(因为这种序列化的效率高)。在其他进程中接收到消息,会解析消息id,然后根据定义好的格式去取内容。这样也算RPC调用吧?
作者回复: 是的
2018-07-305 - 小谢同学作为一名不会coding的从业者,想问刘老师几个基础问题,首先是文中提到的onc rpc框架,就是包含了stub(编解码)+传输(类库)+服务发现的一套东西?那么目前主流的rpc框架,比如dubbo也是实现了这些功能的集大成者?另外一个问题就是,thrift 和protobuf 我理解只是实现了rpc编解码环节的工作,也就是所说的序列化与反序列化,对么?
作者回复: 是的,rpc的几个时代,就是这样演进过来的
2018-07-3124 - Geek_37984c老师GABAGE_ARGS 是写错了吗 GARBAGE_ARGS?
作者回复: 是的
2019-08-241 - java_zhao想问一下 我们平时的程序不都是指定端口的吗 为什么还会随机端口 用portmapper呢?
作者回复: portmapper作为一个服务发现中心,不同端口的都可以注册到他这里,例如有个8081,再有个8082,都行。
2019-07-101 - zKerry哦...原来是有示范性标准的啊
作者回复: 是的
2019-09-08 - N_H老师,您好,文章里面,“RPC程序是用户自己写的,会监听在一个随机端口上”。我们公司用的grpc服务,都会自己指明一个端口号
作者回复: 当然可以指定。我这里的RPC还比较老。
2019-08-07 - Geek_Huahui刘老师,能讲解一下现在用的比较多的JSON-RPC吗
作者回复: restful会讲的
2019-06-19 - 迭代升级看了这个大端小端有一些疑惑,百度百科https://m.baidu.com/sf_bk/item/%E5%A4%A7%E5%B0%8F%E7%AB%AF%E6%A8%A1%E5%BC%8F/6750542?fr=aladdin&ms=1&rid=8203658230675846926 上说:大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。 小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。 而文章上说:最低位放在最后一个位置,叫做小端 最低位放在第一个位置,叫做大端 感觉有点矛盾呀,是我的理解出错了吗?
作者回复: 不矛盾呀,不是一个意思吗
2019-06-123 - zj插问一下,http协议中有类似XID这样的标识别唯一请求id吗
作者回复: header里面可以自己加
2019-06-03
收起评论