基于 Python 自建分布式高并发 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 服務開發原理的認知水平,也正是區分后端高級開發者和普通開發者的重要參考標準之一。在分布式高并發服務領域,只有高手才能擔當重任,在業務工程領域有創新建樹。
程序員的成長層級
作為一名資深面試官,身邊不少工程師會經常問我如何判斷一個程序員的技術水平,如何區分他是高級的資深的,還是普通的一般的。
我相信每個面試官都有自己的一套判斷標準和參考答案,但通常最重要的一個評判依據是:
高級程序員在技術選擇的自由度上往往更大,他們不只會用,而且還知道為什么要這么用,能不能不這么用,有沒有更好的辦法。
初級程序員只會搬磚,看到別人怎么寫我就怎么寫,缺乏自主思考的能力。
初級程序員之所以創新能力不足,根本原因在于沒有系統深入的掌握技術背后的基礎原理,無法進行有效思考,所謂“浮沙之上,難筑高臺”。只有在深入理解技術原理之后,工程能力才可能突飛猛進提升。
不想造輪子的程序員成為不了技術專家
軟件工程領域有一句很經典的名言「不要重復造輪子」,這句話旨在指導軟件工程以低成本高效開發。不過它也有適用范圍,因為程序員平時學習使用的所有開源框架和編程語言,本質上都是「新輪子」。
如果全世界的程序員都完全信奉這句名言,那今天就只有一種編程語言,一種 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 本外,還有很多其它的好書,這里就不一一列舉了。
最后如果你有興趣,可以通過長按下方的二維碼,以及復制好本公眾號專屬優惠碼(super)享受7折優惠購買。
??
長按識別,并在優惠碼中輸入 super
點擊【閱讀原文】也可以購買
↓↓↓
總結
以上是生活随笔為你收集整理的基于 Python 自建分布式高并发 RPC 服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【资源】机器学习资料包来袭
- 下一篇: 程序员江湖鄙视链大全,看看你处于链条的哪