Py学习  »  Python

基于 Python 自建分布式高并发 RPC 服务

程序员小灰 • 5 年前 • 802 次点击  


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 服务开发原理的认知水平,也正是区分后端高级开发者和普通开发者的重要参考标准之一。在分布式高并发服务领域,只有高手才能担当重任,在业务工程领域有创新建树。


程序员的成长层级

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

  • 高级程序员在技术选择的自由度上往往更大,他们不只会用,而且还知道为什么要这么用,能不能不这么用,有没有更好的办法。

  • 初级程序员只会搬砖,看到别人怎么写我就怎么写,缺乏自主思考的能力。

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


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

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

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

本小册的一个核心目的,就是通过实战模块教大家打造一个属于自己的小轮子 —— 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 作为人工智能/大数据时代的首选“全栈”语言,也值得每一位程序员去学习掌握。


作者介绍


钱文品(老钱),互联网分布式高并发技术十年老兵,知乎专栏「码洞」资深洞主,掘金技术专栏作者,目前任掌阅科技资深后端工程师,曾服务于人人网,果壳。熟练使用 Java、Python、Golang 等多种计算机语言,开发过游戏制作过网站,写过消息推送系统和MySQL 中间件,实现过开源的 ORM 框架、Web 框架、RPC 框架等。Github 地址: github.com/pyloque


名人推荐


掌阅科技技术总监「陈超」

RPC服务主要用来满足企业业务系统发展到一定程度后,对于服务调用效率的提升要求。虽然业内有比较成熟的框架gRPC, Thrift等可用,但作为稍有追求的开发者来说,通晓细节和原理比仅仅会用更为重要,该小册采用Python语言由浅入深,并结合实例详细讲解了RPC相关的原理知识以及常用模型,推荐给想真正了解并应用RPC服务解决实际问题的小伙伴们!


启萌教育技术总监 「王东永」

从RPC概念的提出到如今大概有40多年的历史了,作为一种成熟的编程模型,RPC已经成为分布式系统的重要组成部分。当企业的IT系统发展到一定规模后,系统架构向分布式演进将是大势所趋,RPC服务将是其中的基石。 这本小册对RPC服务涉及到的网络层、操作系统层和应用层都进行了完整而细致的讲解,同时使用Python语言作为示范语言,能够很快上手,边学习边实践,有助于更深刻地理解RPC的原理、架构模型和编程模型。将这本小册推荐给想了解并掌握RPC服务技术的工程师们。


适宜人群


  1. 掌握Python 语法基础,有至少1-2年后端开发经验,想系统深入的掌握 RPC服务开发;

  2. 不满足于只埋头搞业务的普通开发者和 CRUD 熟手;

  3. 期待持续进阶的 Python、Java、Golang 中高级程序员;

  4. 有志于向架构师方向迈进的 Geek 们;

  5. 渴望逃离技术舒适区的造轮子爱好者们;


读者福利


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

  1. 《C Primer Plus》

  2. 《动手玩转 Arduino》

  3. 《白帽子讲 Web 安全》

  4. 《深入理解程序设计——使用 Linux 汇编语言》

  5. 《图解服务器网络架构》

  6. 《构建 Oracle 高可用环境》 除了以上 6 本外,还有很多其它的好书,这里就不一一列举了。


最后如果你有兴趣,可以通过长按下方的二维码,享受5折优惠购买。  



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/jo9qRZpANW
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/13511
 
802 次点击