别老想着怎么用好 RPC 框架,你得多花时间琢磨原理

简介: 2011年加入京东,亲历技术演进,现任技术架构部首席架构师。主导微服务、消息中间件等核心系统研发,深耕分布式架构。课程涵盖RPC基础、进阶与高级实战,带你掌握网络通信核心,构建高效可靠分布式系统。(238字)

2011 年,我正式加入京东,刚好赶上了京东的快速发展期,一路做到了现在的技术架构部首席架构师。盘点下在京东的这 9 年时间,我参加过 17 次大促备战,和我的技术团队一起见证了京东的技术演进过程。我也曾带领团队攻克过很多技术领域难题,包括自主研发微服务框架、高性能消息中间件、智能监控以及容器平台等等。
近几年,我主攻分布式系统架构与设计,这也是我的专长所在。而在搭建分布式系统的过程中,我发现 RPC 总能充当较为关键的角色,它对整个分布式系统性能的提升起到了非常重要的作用。
为什么要学习 RPC?
做任何事情都应该 Start with Why,那我们就先来说说为什么要学习 RPC。要回答这个问题,我们就得先考虑下 RPC 的实际应用场景。
说到 RPC,可能你的第一反应就是「微服务」。RPC 最大的特点就是可以让我们像调用本地一样发起远程调用,这一特点常常会让人感觉 RPC 就是为微服务或 SOA 而生的。现在的大多数应用系统发展到一定规模之后,都会向「微服务化」演进,演进后的大型应用系统也的确是由一个个微服务组成的。
我们可以说 RPC 是微服务的基础,这一点是毋庸置疑的。现在我们就可以反过来想这样一个问题——RPC 是不是只应用在微服务中呢?当然不是,只要涉及到网络通信,我们就可能用到 RPC。一起看例子:
例 1:大型分布式应用系统可能会依赖消息队列、分布式缓存、分布式数据库以及统一配置中心等,应用程序与依赖的这些中间件之间都可以通过 RPC 进行通信。比如 etcd,它作为一个统一的配置服务,客户端就是通过 gRPC 框架与服务端进行通信的。
例 2:我们经常会谈到的容器编排引擎 Kubernetes,它本身就是分布式的,Kubernetes 的 kube-apiserver 与整个分布式集群中的每个组件间的通讯,都是通过 gRPC 框架进行的。
所以说,RPC 的应用场景还是非常广泛的。既然应用如此广泛,那它的核心价值又在哪里呢?
在我看来,RPC 是解决分布式系统通信问题的一大利器。
分布式系统中的网络通信一般都会采用四层的 TCP 协议或七层的 HTTP 协议,在我的了解中,前者占大多数,这主要得益于 TCP 协议的稳定性和高效性。网络通信说起来简单,但实际上是一个非常复杂的过程,这个过程主要包括:对端节点的查找、网络连接的建立、传输数据的编码解码以及网络连接的管理等等,每一项都很复杂。
你可以想象一下,在搭建一个复杂的分布式系统过程中,如果开发人员在编码时要对每个涉及到网络通信的逻辑都进行一系列的复杂编码,这将是件多么恐怖的事儿。所以说,网络通信是搭建分布式系统的一个大难题,是一点不为过的,我们必须给予足够的重视。
而 RPC 对网络通信的整个过程做了完整包装,在搭建分布式系统时,它会使网络通信逻辑的开发变得更加简单,同时也会让网络通信变得更加安全可靠。
现在你是不是感觉到学好 RPC 是很有必要的?
如何学习 RPC?
那我们应该怎么去学习 RPC 呢?其实,深刻了解了为什么之后,怎么学这个问题并不难找到答案。就我自己的经验来看,我觉得可以用 逐步深入 这四个字来概括我的学习方式。
说起来也特别简单。当我们认识到,使用 RPC 就可以像调用本地一样发起远程调用,用它可以解决通信问题,这时候我们肯定要去学序列化、编解码以及网络传输这些内容。把这些内容掌握后,你就会发现,原来这些只是 RPC 的基础,RPC 还有更吸引人的点,它真正强大的地方是它的治理功能,比如连接管理、健康检测、负载均衡、优雅启停机、异常重试、业务分组以及熔断限流等等。突然间,你会感觉自己走进了一个新世界,这些内容会成为你今后学习 RPC 的重点和难点。
这个逐步深入的过程,一定离不开真实的实践场景。学习知识,解决问题,遇到新问题,继续学习,不断解决问题,最后你会发现自己的学习曲线大概是这样的。
总结一下,学习 RPC 时,我们先要了解其基本原理以及关键的网络通信部分,不要一味依赖现成的框架;之后我们再学习 RPC 的重点和难点,了解 RPC 框架中的治理功能以及集群管理功能等;这个时候你已经很厉害了,但这还不是终点,我们要对 RPC 活学活用,学会提升 RPC 的性能以及它在分布式环境下如何定位问题等等。
你能学到什么?
我把整个课程的内容分为了三大部分,分别是基础篇、进阶篇和高级篇。
基础篇:重点讲解 RPC 的基础知识,包括 RPC 的基本原理以及它的基本功能模块,夯实基础之后,我们会以一场实战,通过剖析一款 RPC 框架来将知识点串联起来。
进阶篇:重点讲解 RPC 框架的架构设计,以及 RPC 框架集群、治理相关的知识。这部分我会列举很多我在运营 RPC 框架中遇到的实际问题,以及这些问题的解决方案。
高级篇:通过对上述两部分的学习,你已经对 RPC 有了较高层次的理解了。在这部分,我主要会从性能优化、线上问题排查以及一些比较有特色的功能设计上讲解 RPC 的应用。

相关文章
|
4天前
|
Java API
用链表实现队列/栈
本文介绍如何用链表实现栈和队列,利用双链表头尾操作均为O(1)的特性,通过调用LinkedList API高效实现。栈可选头部或尾部作栈顶,队列同理,只需调整增删位置。文末引出数组实现队列的性能问题,启发优化思考。
|
4天前
|
存储 API 索引
队列/栈基本原理 ❗前置知识
本文介绍队列和栈两种“操作受限”的数据结构:队列遵循先进先出(FIFO),只能队尾入、队头出;栈遵循先进后出(FILO),仅在栈顶进行增删操作。二者底层多由数组或链表实现,核心API包括push、pop、peek和size,是后续复杂数据结构的基础。
|
4天前
|
Java 索引 容器
单/双链表代码实现
本文详解双链表与单链表的 MyLinkedList 实现,重点介绍三个关键优化:1)同时持有头尾节点引用,提升尾部操作效率;2)使用虚拟头尾节点简化边界处理;3)解析链表删除中的内存泄露误区,并强调指针置空的良好编程习惯。
|
3天前
|
存储 消息中间件 开发框架
应用架构图
技术架构是将业务需求转化为技术实现的关键过程,涵盖分层设计、技术选型与关键技术整合。基于应用架构,构建包括表现层、业务层、数据层和基础层的单体或分布式架构,明确系统内外调用关系与边界,支撑业务高效落地。(238字)
|
3天前
|
Java
多叉树的递归/层序遍历
多叉树是二叉树的扩展,节点可有多个子节点。遍历方式与二叉树类似,DFS无中序位置,BFS通过队列实现,支持按层遍历并记录深度,代码结构清晰,易于扩展。
|
3天前
|
缓存 网络协议 算法
核心原理:能否画张图解释下 RPC 的通信流程?
RPC(远程过程调用)是一种实现分布式系统间通信的技术,它让调用远程服务像调用本地方法一样简单。本文深入浅出地讲解了RPC的定义、核心目标、通信流程及在微服务架构中的关键作用,帮助开发者理解其底层原理,掌握如何通过动态代理、序列化、协议设计等机制屏蔽网络复杂性,提升开发效率与系统可维护性。
|
3天前
|
算法 Java 索引
双指针技巧秒杀七道数组题目
本文介绍双指针技巧在数组和链表中的应用,重点解析快慢指针如何实现原地修改。通过LeetCode经典题如删除有序数组/链表重复项,展示如何用慢指针记录结果、快指针遍历数据,高效完成去重,时间复杂度O(N),避免频繁数据搬移。
|
3天前
|
算法
双指针技巧秒杀七道链表题目
本文总结单链表七大技巧:合并有序链表、链表分解、合并K个有序链表、找倒数第k个节点、找中点、判断环及起点、判断相交及交点,均基于双指针思想,涵盖LeetCode多道经典题目,助你系统掌握链表算法核心。
|
3天前
|
存储 缓存 算法
学习数据结构和算法的框架思维
本文系统总结数据结构与算法本质:所有数据结构皆源于数组和链表,核心操作为遍历与访问;算法本质是穷举,关键在于无遗漏、无冗余。文章提炼出通用框架,帮助读者建立计算机思维,掌握高效解题方法,适合初学者建立全局观,也适合进阶者温故知新。
|
3天前
|
JSON 前端开发 Java
另外几个接口文档
提供班级与学员信息管理功能,支持班级列表分页查询、添加、修改、删除及详情查看,同时支持学员信息条件查询,涵盖基本信息、班级关联、学历等字段,便于高效管理教学资源。