老钱的处女作《深入理解RPC》正式上线了

RPC(Remote Procedure Call)服务,也即远程过程调用,在互联网企业技术架构中占据了举足轻重的地位,尤其在当下微服务化逐步成为大中型分布式系统架构的主流背景下,RPC 更扮演了重要角色。Google 开源了 gRPC,Facebook 开源了 Thrift,Twitter 开源了 Finagle,百度开源了 bRPC,腾讯开源了 Tars,阿里开源了 Dubbo 和 HSF,新浪开源了 Motan 等,一线互联网大厂们纷纷亮出自己研制的 RPC 框架武器,在解决分布式高并发业务问题的同时,也向外界展示自己的技术实力。

互联网公司百花齐放,貌似高深复杂的 RPC 框架解决了哪些业务难题?其技术含量究竟高在哪里?后端开发者该如何深入掌握 RPC 开发?这些都是本小册想要解读的问题。

分布式高并发服务是只有高手才能涉足的领域

虽然大部分后端开发者在日常开发中都会隐式或显式的使用 RPC,但对初级开发者来说 RPC 总是略显神秘而有距离,而即便有多年 RPC 使用经验的程序员,也可能依然对 RPC 背后的原理不甚了解,难以精通,遇到复杂问题时难免误用。

由于 RPC 本身理论繁杂,涉及的技术栈和工具也比较多,能将理论落实到代码层面,并结合业务实际情况,避开各种坑,最终实现性能和工程上的极致优化,这对后端开发者来说是一个极大的挑战。而对 RPC 服务开发原理的认知水平,也正是区分后端高级开发者和普通开发者的重要参考标准之一。在分布式高并发服务领域,只有高手才能担当重任,在业务工程领域有创新建树。

程序员的成长层级

作为一名资深面试官,身边不少工程师会经常问我如何判断一个程序员的技术水平,如何区分他是高级的资深的,还是普通的一般的。我相信每个面试官都有自己的一套判断标准和参考答案,但通常最重要的一个评判依据是:

  • 高级程序员在技术选择的自由度上往往更大,他们不只会用,而且还知道为什么要这么用,能不能不这么用,有没有更好的办法。
  • 初级程序员只会搬砖,看到别人怎么写我就怎么写,缺乏自主思考的能力。

初级程序员之所以创新能力不足,根本原因在于没有系统深入的掌握技术背后的基础原理,无法进行有效思考,所谓“浮沙之上,难筑高台”。只有在深入理解技术原理之后,工程能力才可能突飞猛进提升。

不想造轮子的程序员成为不了技术专家

软件工程领域有一句很经典的名言「不要重复造轮子」,这句话旨在指导软件工程以低成本高效开发。不过它也有适用范围,因为程序员平时学习使用的所有开源框架和编程语言,本质上都是「新轮子」。从这个角度看,不断造「新轮子、好轮子」才是计算机科学的演进历史,也构建了现代软件工程的基石。

虽然大多数新轮子最终不会被很多人使用,但是 「造轮子」无疑是深入理解技术原理的最佳方法。不会造轮子的同学永远只能停在技术表层,难以进行有创造性的工作。尤其是在高级阶段,造轮子的能力就是开发者的核心竞争力,而轮子也将成为公司之间差异化竞争的重要资本。可以说,要想成为中大型互联网公司的高级工程师或技术专家,必须具备通过造轮子开发出更好工具的实战能力。

本小册的一个核心目的,就是通过实战模块教大家打造一个属于自己的小轮子 —— RPC 服务小框架,带领大家体验这种深度学习方法的价值。这里也引用理论物理大师费曼先生的名言与诸位同学共勉。

注:理查德·费曼——美国理论物理学家,量子电动力学创始人之一,纳米技术之父。

本小册的内容设计和特点

网络上讲解 RPC 的文章也有不少,但相对来说都比较散乱或不够深入,对 RPC 服务器的实现往往都是蜻蜓点水,浅尝辄止,在基础原理上的讲解也多流于表面,不及内核本质。

本小册内容不会对那些网上博客文章常见的浅层内容做过多重复讲解,而将写作重心放在作者从多年实战经验中摸索出来的更有深度、极为重要或多数人未曾深入的诸多知识点上,期望带领读者同时从深度和广度上充分理解 RPC 服务架构的深度内核设计原理和实现细节,并会拓展介绍一些 RPC 相关的协议开发知识和业界实战框架介绍,作为进阶学习参考。

这本小册在内容结构上主要划分为 6 大块:

  1. 基础篇:RPC 在企业技术中的地位、应用场景、基础原理和交互流程
  2. 进阶篇:RPC 通讯协议原理、流行协议解构和实例代码分析
  3. 高级篇:RPC 客户端的实现要点
  4. 实战基础篇:RPC 服务器多种并发模型实例讲解
  5. 实战高级篇:分布式 RPC 服务实战(代码实例)
  6. 拓展学习篇:开源框架 gPRC/Thrift 原理入门与实践

为什么选择 Python 语言实现?

虽然在超大型企业内部很少使用 Python 来打造 RPC 服务,他们多半会使用 Java 或者 Golang 开发,因为 RPC 服务对性能有非常极致的要求。但是考虑到本小册的核心目标是让大家深入理解 RPC 背后的原理,而 Python 语言更加适合入门,实现代码比较简短,更利于阅读学习,尤其是对初、中级开发者更为友好。另外,还有些服务器并发模型是 Java 和 Golang 都不具备而 Python 独有的,选择 Python 语言 可以使得内容更加丰富多彩。所以,基于教学目的,本小册最终选择了 Python 作为 RPC 框架实现语言。相信这并不会妨碍真正有志于分布式高并发领域的后端开发者从中获取对 RPC 的理解和实战开发经验。

P.S. Python 作为人工智能/大数据时代的首选“全栈”语言,也值得每一位程序员去学习掌握。

名人推荐

读者福利

作者决定拿出一部分自己收藏的好书作为福利,以抽奖的形式免费赠予购买小册的用户(国内用户包邮),数量有限,大家就拼人品吧(抽奖规则时间在读者微信群同步)。

  1. 《C Primer Plus》
  2. 《动手玩转 Arduino》
  3. 《白帽子讲 Web 安全》
  4. 《深入理解程序设计——使用 Linux 汇编语言》
  5. 《图解服务器网络架构》
  6. 《构建 Oracle 高可用环境》

除了以上 6 本外,还有很多其它的好书,这里就不一一列举了。

原文发布于微信公众号 - 码洞(codehole)

原文发表时间:2018-06-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互联网数据官iCDO

19个令人大开眼界的可靠消费者研究数据源

译者:董梁 本文长度为3058字,预估阅读时间5分钟。 我们今天要向大家分享19个令人大开眼界的可靠消费者研究数据源。 Kyle的注释: 数据是分享洞察、支持...

3516
来自专栏BestSDK

AnySDK可实现原生、H5、VR、三大平台快速接入

AnySDK拥有“全渠道接入,快人一步”的特点,其免费版提供超过200家渠道接入,企业版提供国内全渠道接入,在发行联运方面能够提高单款产品10%的收入。仅201...

2609
来自专栏数据和云

内外兼修:Oracle ACED熊军谈Oracle学习

编辑手记:熊军是中国西部第一位,也是到目前为止唯一的Oracle ACE总监,在这篇文章中熊军描述了他的学习过程和理念供大家参考。 ORACLE 的学习,就好...

2958
来自专栏我是攻城师

关于未来编程发展趋势的九大预测

3896
来自专栏企鹅号快讯

让你轻松学习嵌入式的几种线路图方向

嵌入式学习是一个循序渐进的过程,如果是希望向嵌入式软件方向发展的话,目前最常见的是嵌入式Linux方向,关注这个方向,我认为大概分3个阶段: 1、嵌入式lin...

2346
来自专栏阮一峰的网络日志

Wikipedia创始人访谈

2001年,当他决定创办维基百科的时候,所有人都感到太疯狂了。办一个网上的百科全书,访问者可以自由编辑,连注册也不需要,你想怎么写就怎么写,目标是整理和呈现人类...

1582
来自专栏Android 开发者

深圳 Google Playtime 2017 完美收官!

1955
来自专栏养码场

一周播报|超级独角兽面试经验,速点!

首先技术一定要过关。最基本的是在自己职责范围内没有无法解决的。其次是精通某一方面,这是你说的开发。至于架构师那块范围就大了。语言不能仅仅只会JAVA,脚本语言也...

702
来自专栏企鹅号快讯

程序员编程障碍

? 编程效率障碍No.1:会议 最常见的抱怨是打断开发人员编码思绪的会议。如果老板信任该程序员,就会要求他们时不时地去那间数周甚至数年昏昏暗暗的会议室闲聊有关...

17810
来自专栏数据库新发现

拉里·埃里森亲自支招,数据库自动化之后,DBA何去何从?

作者:eygle |English 【转载时请标明出处和作者信息】|【恩墨学院 OCM培训传DBA成功之道】 链接:http://www.eygle.com...

1523

扫码关注云+社区