基於 Python 自建分散式高併發 RPC 服務

Python之禪發表於2018-06-12

RPC(Remote Procedure Call)服務,即遠端過程呼叫,在網際網路企業技術架構中佔據了舉足輕重的地位,尤其在當下微服務化逐步成為大中型分散式系統架構的主流背景下,RPC 更扮演了重要角色。Google 開源了 gRPC,Facebook 開源了 Thrift,百度開源了 bRPC,騰訊開源了 Tars,阿里開源了 Dubbo 和 HSF,一線網際網路大廠們紛紛亮出自己研製的 RPC 框架武器,解決分散式高併發業務問題。

高深複雜的 RPC 框架解決了哪些業務難題?其技術含量究竟高在哪裡?後端開發者該如何深入掌握 RPC 開發?

雖然大部分後端開發者在日常開發中都會隱式或顯式的使用 RPC,但對初級開發者來說 RPC 總是略顯神祕而有距離,而即便有多年 RPC 使用經驗的程式設計師,也可能依然對 RPC 背後的原理不甚瞭解,難以精通,遇到複雜問題時難免誤用。

RPC 本身理論繁雜,涉及的技術棧和工具也比較多,能將理論落實到程式碼層面,並結合業務實際情況,避開各種坑,最終實現效能和工程上的極致優化,這對後端開發者來說是一個極大的挑戰。而對 RPC 服務開發原理的認知水平,也正是區分後端高階開發者和普通開發者的重要參考標準之一。在分散式高併發服務領域,只有高手才能擔當重任,在業務工程領域有創新建樹。


程式設計師的成長層級

640?wx_fmt=png

作為一名面試官,身邊不少工程師會經常問我如何判斷一個程式設計師的技術水平,如何區分他是高階的資深的,還是普通的一般的。相信每個面試官都有自己的一套判斷標準和參考答案,但通常最重要的一個評判依據是:

  • 高階程式設計師在技術選擇的自由度上往往更大,他們不只會用,而且還知道為什麼要這麼用,能不能不這麼用,有沒有更好的辦法。

  • 初級程式設計師只會搬磚,看到別人怎麼寫我就怎麼寫,缺乏自主思考的能力。

初級程式設計師之所以創新能力不足,根本原因在於沒有系統深入的掌握技術背後的基礎原理,無法進行有效思考,所謂“浮沙之上,難築高臺”。只有在深入理解技術原理之後,工程能力才可能突飛猛進提升。

不想造輪子的程式設計師成為不了技術專家


軟體工程領域有一句很經典的名言「不要重複造輪子」,這句話旨在指導軟體工程以低成本高效開發。不過它也有適用範圍,因為程式設計師平時學習使用的所有開源框架和程式語言,本質上都是「新輪子」。如果全世界的程式設計師都完全信奉這句名言,那今天就只有一種程式語言,一種 Web框架,這樣的世界是令人難以想象的。從這個角度看,不斷造「新輪子、好輪子」才是電腦科學的演進歷史,也構建了現代軟體工程的基石。


雖然大多數新輪子最終不會被很多人使用,但是「造輪子」無疑是深入理解技術原理的最佳方法。不會造輪子的同學永遠只能停在技術表層,難以進行有創造性的工作。在造輪子的初級階段,確實應該避免將自己的輪子直接應用在公司業務系統中帶來維護成本問題,但是到了高階階段,造輪子的能力就是開發者的核心競爭力,而輪子也將成為公司之間差異化競爭的重要資本。也可以說,要想成為中大型網際網路公司的高階工程師或技術專家,必須具備通過造輪子開發出更好工具的實戰能力。

說了這麼多,就是為了推薦一本小冊給大家,通過實戰模組教大家打造一個屬於自己的小輪子 —— RPC 服務小框架,帶領大家體驗這種深度學習方法的價值。這裡也引用理論物理大師費曼先生的名言與諸位同學共勉。

640?wx_fmt=png

                                  

為什麼會有這本小冊?

這是作者在技術寫作領域完成的第一本主題小冊。內容不多,卻濃縮了這十年來工作學習修來的精華。“授人以魚不若授人以漁”,“磨刀不誤砍柴工”。希望閱讀這本小冊,既能讓你收穫很多構建分散式系統的方法和技巧,也能收穫實用的方法論和思考方式,讓你能碼的更快碼的更好,快速進入高手行列。


本小冊的內容設計和特點


網路上講解 RPC 的文章也有不少,但相對來說都比較散亂或不夠深入,對 RPC 伺服器的實現往往都是蜻蜓點水,淺嘗輒止,在基礎原理上的講解也多流於表面,不及核心本質。

本小冊內容不會對那些網上部落格文章常見的淺層內容做過多重複講解,而將寫作重心放在作者從多年實戰經驗中摸索出來的更有深度、極為重要或多數人未曾深入的諸多知識點上,期望帶領讀者同時從深度和廣度上充分理解 RPC 服務架構的深度核心設計原理和實現細節,並會擴充介紹一些 RPC 相關的協議開發知識和業界實戰框架介紹,作為進階選修參考。

這本小冊在內容結構上主要劃分為 6 大塊:

640?wx_fmt=png

  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


名人推薦


掌閱科技技術總監「陳超」

640?wx_fmt=png

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 搞懂

640?wx_fmt=png

另外,我還爭取了5個免費閱讀碼,將在留言區傳送,按照評論的先後順序傳送給 01、10、101、111、1000 樓,所以你不僅要手快,還要運氣好。有讀者可能要問,能蓋那麼多樓層嗎?我覺得可以,因為我們使用的二進位制。

相關文章