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

640?wx_fmt=gif


640?

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


程序员的成长层级

640?

作为一名资深面试官,身边不少工程师会经常问我如何判断一个程序员的技术水平,如何区分他是高级的资深的,还是普通的一般的


我相信每个面试官都有自己的一套判断标准和参考答案,但通常最重要的一个评判依据是:

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

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


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


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


软件工程领域有一句很经典的名言「不要重复造轮子」,这句话旨在指导软件工程以低成本高效开发。不过它也有适用范围,因为程序员平时学习使用的所有开源框架和编程语言,本质上都是「新轮子」。


如果全世界的程序员都完全信奉这句名言,那今天就只有一种编程语言,一种 Web框架,这样的世界是令人难以想象的。从这个角度看,不断造「新轮子、好轮子」才是计算机科学的演进历史,也构建了现代软件工程的基石。


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


也可以说,要想成为中大型互联网公司的高级工程师或技术专家,必须具备通过造轮子开发出更好工具的实战能力。


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

640?

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


为什么会有这本小册?


这是我在技术写作领域完成的第一本 主题小册。内容不多,却浓缩了这十年来工作学习修来的精华。十年前,我跟大多数人一样,从校园毕业来到人山人海的帝都,从基础的业务做起,慢慢积累提升,从技术小白逐步成长为技术专家。


期间也曾经历过职业发展迷茫期,在技术上一度缺乏自信,也缺少过来人方向性的指引,在从初、中级开发者向高级开发者跃迁这个阶段,走得尤其艰难

640?

这也是我写这本小册的初衷,希望能给像曾经的我一样面临同样挑战的朋友们提供一些帮助和指引,尤其是具有一定稀缺性的知识。“授人以鱼不若授人以渔”,“磨刀不误砍柴工”。


希望阅读这本小册,既能让你收获很多构建分布式系统的方法和技巧,也能收获实用的方法论和思考方式,让你能码的更快码的更好,快速进入高手行列。


本小册的内容设计和特点


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


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


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

640?


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 作为人工智能/大数据时代的首选“全栈”语言,也值得每一位程序员去学习掌握。


作者介绍


640?

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


名人推荐


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

640?

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


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

640?

从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 本外,还有很多其它的好书,这里就不一一列举了。


最后如果你有兴趣,可以通过长按下方的二维码,以及复制好本公众号专属优惠码(super)享受7折优惠购买。

  

640?wx_fmt=png

长按识别,并在优惠码中输入 super


点击【阅读原文】也可以购买

↓↓↓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员江湖鄙视链大全,看看你处于链条的哪一级?

有人的地方就有江湖。程序员,是一个知识、智商、都异于常人的 群体,有人总结了程序员江湖等级鄙视链的方法和流程。老婆漂亮的程序员鄙视老婆不漂亮的程序员鄙视有女友的程序员鄙视单身狗程序员而在单身狗之间,才有了语言,编辑器和…

java什么是静态_什么是java静态

什么是java静态java静态包括静态变量、静态方法、静态初始化块,以下是静态的详解。(推荐教程:java教程)1. 什么是静态变量大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立。然而在…

如何在 .NET 程序万种死法中有效的生成 Dump (上)

一:背景相信很多人都知道通过 任务管理器 抓取dump,虽然简单粗暴,但无法满足程序的无数种死法,比如:内存膨胀,程序爆炸CPU爆高,程序累死应用无响应,用户气死意外退出,和人…

74款app源码,值得你拥有的干货

最近,小编一直在整理一些app的源码,如:BiliClient(仿bilibili客户端)、WeChat高仿微信、知乎专栏App、Compass(MIUI指南针的社区开源版)等。现在小编打算将这些资料免费分享给大家!&…

监控系统简介:使用 Prometheus 与 Grafana

注:本文虽以 Docker 进行演示,但 Docker 并不是必须的,相关软件也可以直接安装到计算机上背景如果我们是Web应用的开发者,会对响应时间、接口的稳定性等比较敏感,在站点尚未部署到生产环境时,我们有充足的时…

7500 cpuz跑分 i5_核心硬盘 i5 7500性能测试_DIY攒机酷品测试-中关村在线

下面我们进入CPU测试环节。为保测试性准确可靠,以下测试均采用Windows 10 1周年版 64位正版系统,且不对操作系统进行任何优化,用以获取最大的系统稳定性与兼容性。Intel 酷睿i5 7500i5 7500 CPU-ZFritz Chess BenchmarkFritz Chess Benchmark…

Android Ap 开发 设计模式第七篇:生成器模式

Builder Pattern 模式解读 生活在深圳这所高速发展的城市,高楼大厦林立。所谓万丈高楼平地起,在我们感慨楼层的高耸之外,更要配服楼层的建造者和设计者。大楼首先得打稳地基、搭建骨架,再由下往上一层层盖上去。而这样的架构从程序…

MySQL 创始人:写代码比打游戏还爽,程序员应该多泡开源社区

编者按:根据StackOverflow的最新调查,MySQL仍然是全世界最流行的数据库,受访的开发者中有44.3%的人在使用,超过了第二位的SQL Server 10多个百分点。可是你知道MySQL是怎么诞生的吗?openocean 的一篇有关MySQL开发者Mi…

tomcat如何修改java版本_Java程序员必备——Tomcat配置技巧Top10

一、配置系统管理(Admin Web Application)大多数商业化的J2EE服务器都提供一个功能强大的管理界面,且大都采用易于理解的Web应用界面。Tomcat按照自己的方式,同样提供一个成熟的管理工具,并且丝毫不逊于那些商业化的竞争对手。Tomcat的Admin …

祝福!微软 46 周年生日快乐!

46 年前的今天,即 1975 年 4 月 4 日,比尔盖茨(Bill Gates)和保罗艾伦(Paul Allen)共同创立了微软公司。他们是小时候认识的朋友及高中同学,并对电脑编程充满激情。1975 年 1 月,MIT…

荐书 | 没有数学思维的程序员不是好的问题解决者

今天小木给大家推荐以下五本关于数学历史或数学思维的名家著作。读者推荐:01《这才是最好的数学书》[日] 笹部贞市郎55.00赠:《谁谋杀了希尔伯特教授》数学漫画随机一本《神笔涂绘》内容简介:有人曾请教笹部贞士郎,是如何引领近代…

java反射sethaha_Java反射深度测试

通过反射API构造对象,并使用反射调用方式访问对象的public/private方法和字段。package lavasoft.test;/*** 测试的业务类** author leizhimin 2010-5-6 20:16:10*/public class MyService {private String msg;public MyService() {System.out.println("log: …

监控系统简介(二):使用 App Metrics 在 ASP.NET Web API 中记录指标

回顾在《监控系统简介:使用 Prometheus 与 Grafana》一文中,我们了解了什么是监控系统,Prometheus 这一监控工具及它提供的数据类型、PromQL 以及 Grafana 可视化工具的基本用法。今天这一篇我们将在 ASP.NET Web API 项目中进行实战&#xf…

剧透人生!你什么时候结婚换工作甚至狗带,Facebook都知道

来源:大数据文摘即将换工作?要结婚了?有亲人朋友要去世了?你关心的这些人生重大节点,有人希望比你提前知道它们何时发生,并基于此对你精准投放广告。惊悚?这是Facebook在2010年以来提交的一系列…

如何在 NET 程序万种死法中有效的生成 Dump (下)

一:背景 上一篇我们聊到了如何通过 procdump 抓取 cpu爆高 和 内存暴涨 两种情况,这一篇再聊聊如何去抓程序 挂死 和 意外退出。二:程序挂死 1. 定义程序挂死 简单的说就是程序没有响应,既然没响应了,可能 死锁, 可能 …

C++程序运行时内存布局之--无继承情况下的虚函数

2019独角兽企业重金招聘Python工程师标准>>> 虚函数是C实现多态的关键,没有虚函数,C只能是OB,不能完成OO。 本文介绍的是没有继承情况下,带有虚函数的类在内存中布局,以及其实例(对象&#xff0…

纠结学哪种编程语言?请看这个回答

各位童鞋,如果最近/未来几年有人还纠结学习哪种编程语言,那你可以请他/她参考一下这个 Quora 帖子的最高赞回答:> 能找一份工作:Java> 能找一份高薪工作:C> 啥样工作都能找到:Python> 总能找到…

NET问答: 有最干净利落的读写文件方式吗?

咨询区 ApprenticeHacker:在 C# 中有很多种读写文件的方式 (文本文件,非二进制)。为了践行 do more, write less 的思想,现寻找一种最简单最少代码量的方式,因为在我的项目中有太多的功能需要读写文件了。回答区 vc 74&#xff1a…

写好一份数据分析报告的13个要点

先说说写一份好的数据分析报告的重要性,很简单,因为分析报告的输出是你整个分析过程的成果,是评定一个产品、一个运营事件的定性结论,很可能是产品决策的参考依据,既然这么重要那当然要写好它了。我认为一份好的分析报…

oracle11g安装和基本的使用,手把手看图教你用起来。

前面技术架构和系统选型说到了使用oracle,看到园友们一些评论。我也不想卖弄,不想争论什么数据库好。喜欢就是理由,用了多年了为何不可。 我可以想象,大家没有使用oracle的原因可能有以下几点: 被oracle价格吓破胆的有…