68

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

 5 years ago
source link: http://www.10tiao.com/html/761/201806/2650368486/1.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

RPC(Remote Procedure Call)服务,即远程过程调用,在互联网企业技术架构中占据了举足轻重的地位,尤其在当下微服务化逐步成为大中型分布式系统架构的主流背景下,RPC 更扮演了重要角色。Google 开源了 gRPC,Facebook 开源了 Thrift,百度开源了 bRPC,腾讯开源了 Tars,阿里开源了 Dubbo 和 HSF,一线互联网大厂们纷纷亮出自己研制的 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 的理解和实战开发经验。


作者介绍

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


名人推荐


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

RPC服务主要用来满足企业业务系统发展到一定程度后,对于服务调用效率的提升要求。虽然业内有比较成熟的框架gRPC, Thrift等可用,但作为稍有追求的开发者来说,通晓细节和原理比仅仅会用更为重要,该小册采用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折优惠购买,花不到10块钱把 RPC 搞懂

另外,我还争取了5个免费阅读码,将在留言区发送,按照评论的先后顺序发送给 01、10、101、111、1000 楼,所以你不仅要手快,还要运气好。有读者可能要问,能盖那么多楼层吗?我觉得可以,因为我们使用的二进制。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK