RPC 实战与核心原理
何小锋
京东云混合云首席架构师
40244 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
推荐试读
换一换
03 | 序列化:对象怎么在网络中传输?
时长 14:22
04 | 网络通信:RPC框架在网络通信上更倾向于哪种网络IO模型?
时长 13:38
08 | 服务发现:到底是要CP还是AP?
时长 13:32
课程目录
已完结/共 29 讲
开篇词 (1讲)
开篇词 | 别老想着怎么用好RPC框架,你得多花时间琢磨原理
时长 07:15
基础篇 (6讲)
01 | 核心原理:能否画张图解释下RPC的通信流程?
时长 12:05
02 | 协议:怎么设计可扩展且向后兼容的协议?
时长 10:49
03 | 序列化:对象怎么在网络中传输?
时长 14:22
04 | 网络通信:RPC框架在网络通信上更倾向于哪种网络IO模型?
时长 13:38
05 | 动态代理:面向接口编程,屏蔽RPC处理流程
时长 09:12
06 | RPC实战:剖析gRPC源码,动手实现一个完整的RPC
时长 11:15
进阶篇 (11讲)
07 | 架构设计:设计一个灵活的RPC框架
时长 10:09
08 | 服务发现:到底是要CP还是AP?
时长 13:32
09 | 健康检测:这个节点都挂了,为啥还要疯狂发请求?
时长 13:06
10 | 路由策略:怎么让请求按照设定的规则发到不同的节点上?
时长 09:15
11 | 负载均衡:节点负载差距这么大,为什么收到的流量还一样?
时长 11:22
12 | 异常重试:在约定时间内安全可靠地重试
时长 09:22
13 | 优雅关闭:如何避免服务停机带来的业务损失?
时长 11:00
14 | 优雅启动:如何避免流量打到没有启动完成的节点?
时长 10:39
15 | 熔断限流:业务如何实现自我保护?
时长 11:57
16 | 业务分组:如何隔离流量?
时长 09:25
答疑课堂 | 基础篇与进阶篇思考题答案合集
时长 08:44
高级篇 (8讲)
17 | 异步RPC:压榨单机吞吐量
时长 14:02
18 | 安全体系:如何建立可靠的安全体系?
时长 11:09
19 | 分布式环境下如何快速定位问题?
时长 11:52
20 | 详解时钟轮在RPC中的应用
时长 11:08
21 | 流量回放:保障业务技术升级的神器
时长 07:54
22 | 动态分组:超高效实现秒级扩缩容
时长 09:14
23 | 如何在没有接口的情况下进行RPC调用?
时长 08:20
24 | 如何在线上环境里兼容多种RPC协议?
时长 08:38
结束语 (1讲)
结束语 | 学会从优秀项目的源代码中挖掘知识
时长 04:31
加餐 (2讲)
加餐 | 谈谈我所经历过的RPC
时长 09:01
加餐 | RPC框架代码实例详解
时长 18:19
RPC 实战与核心原理
15
15
1.0x
00:00/00:00
登录|注册

06 | RPC实战:剖析gRPC源码,动手实现一个完整的RPC

HTTP/2 Frame构造
writePayload
Header和Body数据分离
FrameListener处理数据
开启Netty Server
发送RPC请求
构建Stub
构建Channel连接
Protocol Buffer代码
利用HTTP/2的多路复用特性提升性能
gRPC是一种采用HTTP/2协议,默认采用PB序列化方式的RPC
接收原理
发送原理
生成消息对象和基础代码
定义接口
序列化支持PB和JSON
基于HTTP/2设计的通信协议
跨语言
高性能
总结
gRPC通信示例
gRPC特点
课后思考
gRPC源码剖析
RPC实战

该思维导图由 AI 生成,仅供参考

你好,我是何小锋。上一讲我分享了动态代理,其作用总结起来就是一句话:“我们可以通过动态代理技术,屏蔽 RPC 调用的细节,从而让使用者能够面向接口编程。”
到今天为止,我们已经把 RPC 通信过程中要用到的所有基础知识都讲了一遍,但这些内容多属于理论。这一讲我们就来实战一下,看看具体落实到代码上,我们应该怎么实现一个 RPC 框架?
为了能让咱们快速达成共识,我选择剖析 gRPC 源码(源码地址: https://github.com/grpc/grpc-java)。通过分析 gRPC 的通信过程,我们可以清楚地知道在 gRPC 里面这些知识点是怎么落地到具体代码上的。
gRPC 是由 Google 开发并且开源的一款高性能、跨语言的 RPC 框架,当前支持 C、Java 和 Go 等语言,当前 Java 版本最新 Release 版为 1.27.0。gRPC 有很多特点,比如跨语言,通信协议是基于标准的 HTTP/2 设计的,序列化支持 PB(Protocol Buffer)和 JSON,整个调用示例如下图所示:
gRPC调用示例图
如果你想快速地了解一个全新框架的工作原理,我个人认为最快的方式就是从使用示例开始,所以现在我们就以最简单的 HelloWord 为例开始了解。
在这个例子里面,我们会定义一个 say 方法,调用方通过 gRPC 调用服务提供方,然后服务提供方会返回一个字符串给调用方。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

gRPC是一款高性能、跨语言的RPC框架,采用HTTP/2协议和Protocol Buffer序列化方式,充分利用HTTP/2的多路复用特性,解决了HTTP/1.X的性能问题。本文通过剖析gRPC源码,以HelloWorld示例为例,介绍了如何使用Protocol Buffer定义接口、生成消息对象和gRPC通信所需的基础代码。在调用端代码中,通过生成的Stub对象发起RPC调用,实现了RPC通信的透明化。文章深入讲解了gRPC的请求发送原理,包括对象序列化、HTTP/2协议的特点以及构造HTTP/2 Frame等细节。此外,还介绍了服务提供方收到请求后的处理流程,以及开启Netty Server并绑定编解码逻辑的步骤。通过本文,读者可以快速了解gRPC的工作原理和实现一个完整的RPC框架的方法。文章还提到了gRPC的负载均衡、服务发现等功能,以及通过Stream方式来调用服务以提升调用性能。整体而言,本文通过深入剖析gRPC源码和示例代码,使读者能够全面了解gRPC的技术特点和工作原理。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《RPC 实战与核心原理》
新⼈⾸单¥59
立即购买
03 | 序列化:对象怎么在网络中传输?
04 | 网络通信:RPC框架在网络通信上更倾向于哪种网络IO模型?
08 | 服务发现:到底是要CP还是AP?
10 | 路由策略:怎么让请求按照设定的规则发到不同的节点上?
12 | 异常重试:在约定时间内安全可靠地重试
18 | 安全体系:如何建立可靠的安全体系?
登录 后留言

全部留言(20)

  • 最新
  • 精选
  • 雨霖铃声声慢
    InputStream封装了底层传输的字节缓冲区实现,它通常是一组通过指针连接起来的内存块的集合,这些内存块由网络的零拷贝获取的。由于不能保证能够从内存块中获取一个byte[],我们不能传递一个简单的byte[]或byte[][],并且可能需要一个目标byte[]来从缓冲区中获取数据。 另外byte[]的缺点是需要从缓冲区中复制一个大的、连续的数据,而实际上没有什么方法可以使它执行得更好。当使用压缩时,我们也不知道消息未压缩的长度,它是动态解压缩的。

    作者回复: 没错,避免二次拷贝

    2020-03-03
    4
    68
  • 超威丶
    难道http2的核心实现不就是基于流实现?

    作者回复: stream传输是建立在多路复用的基础上

    2020-03-02
    9
  • 忆水寒
    老师,有个疑问。按道理客户端发起一次rpc调用,通过序列化、网络传输、服务端处理再响应,这期间有时间差的。上面客户端代码除非是阻塞的,否则不可能立马得到结果吧。

    作者回复: 是的,例子里面的需要在客户端等待

    2020-03-02
    7
  • 飞翔
    老师 有说法是内部调用用rpc 外部用http 这是为什么呀

    作者回复: 内部应用之间通信更强调性能

    2020-03-04
    5
    3
  • cricket1981
    以流的方式处理请求数据,适合请求数据数据量大情况。好比Sax和Dom区别。

    作者回复: 在传输层也需要用stream,避免二次拷贝

    2020-03-02
    2
  • 我们讲到,在 gRPC 调用的时候,我们有一个关键步骤就是把对象转成可传输的二进制,但是在 gRPC 里面,我们并没有直接转成二进制数组,而是返回一个 InputStream,你知道这样做的好处是什么吗? 这个不知道哎😂 猜测是为性能故,看评论区的讨论,猜测是正确的,不过细节还是不太清楚,需要后补一下。 Inputstream——避免二次拷贝(序列化+encode)——更高的性能。

    作者回复: 👍

    2020-05-13
    1
  • 密码123456
    为什么能避免二次拷贝?

    作者回复: 序列化和encode

    2020-04-27
    1
  • eason2017
    老师好,可以把 为客户端和服务器端生成消息对象和 RPC 基础代码 的命令提供出来吗?谢谢。

    作者回复: 可以看下grpc官网或者搜索一下

    2020-03-29
    2
    1
  • 蚂蚁内推+v
    这样跟HTTP2有什么区别呢

    作者回复: grpc是用http2来传输的

    2020-03-06
  • tulip
    老师可以出一期go 的嘛
    2020-03-29
    2
    28
收起评论
显示
设置
留言
20
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部

玻璃钢生产厂家招聘雕塑师傅玻璃钢模具师傅楼盘玻璃钢雕塑参考价玻璃钢雕塑怎么清理商场玻璃钢雕塑施工方案浚县玻璃钢雕塑加工厂家江西公园玻璃钢雕塑价位玻璃钢花盆厂家怎么选淮阳玻璃钢雕塑价格玻璃钢花盆哪个牌子好常年商场门头美陈商场美陈有什么用玻璃钢孔子雕塑供应商北京通道商场美陈批发江阳玻璃钢花盆花器太原门头玻璃钢雕塑甘南玻璃钢雕塑订做现代玻璃钢人物雕塑图片呼和浩特市玻璃钢雕塑公司广东树脂玻璃钢雕塑厂家电话包头玻璃钢雕塑制作上海玻璃钢佛像雕塑制作青海玻璃钢仿真雕塑同安园林玻璃钢雕塑热线深圳玻璃钢泡沫雕塑宁波玻璃钢飞马雕塑台州玻璃钢雕塑市场四川装饰商场美陈批发价蚌埠玻璃钢雕塑哪家便宜福建公园玻璃钢雕塑公司淄博公园玻璃钢雕塑定制香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化