當前位置:
首頁 > 最新 > 深入理解 RPC:基於 Python 自建分散式高並發 RPC 服務

深入理解 RPC:基於 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 大塊:

基礎篇:RPC 在企業技術中的地位、應用場景、基礎原理和交互流程

進階篇:RPC 通訊協議原理、流行協議解構和實例代碼分析

高級篇:RPC 客戶端的實現要點

實戰基礎篇:RPC 伺服器多種並發模型實例講解

實戰高級篇:分散式 RPC 服務實戰(代碼實例)

拓展學習篇:開源框架 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服務技術的工程師們。

適宜人群

掌握Python 語法基礎,有至少1-2年後端開發經驗,想系統深入的掌握 RPC服務開發;

不滿足於只埋頭搞業務的普通開發者和 CRUD 熟手;

期待持續進階的 Python、Java、Golang 中高級程序員;

有志於向架構師方向邁進的 Geek 們;

渴望逃離技術舒適區的造輪子愛好者們;

讀者福利

作者決定拿出一部分自己收藏的好書作為福利,以抽獎的形式免費贈予購買小冊的用戶(國內用戶包郵),數量有限,大家就拼人品吧。

《C Primer Plus》

《動手玩轉 Arduino》

《白帽子講 Web 安全》

《深入理解程序設計——使用 Linux 彙編語言》

《圖解伺服器網路架構》

《構建 Oracle 高可用環境》 除了以上 6 本外,還有很多其它的好書,這裡就不一一列舉了。

最後如果你有興趣,

可以通過長按下方的二維碼,

享受5折優惠購買。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

Github上最受歡迎的Python框架Flask入門

TAG:Python |