本書(shū)由淺入深、詳細(xì)地介紹了RPC技術(shù)和RPC框架的原理。除此之外,本書(shū)還詳細(xì)介紹了與RPC框架原理相關(guān)的技術(shù),包括遠(yuǎn)程通信技術(shù)、通信協(xié)議、序列化技術(shù)、動(dòng)態(tài)代理技術(shù)、IDL等。
本書(shū)首先介紹了RPC技術(shù)和RPC框架的發(fā)展背景、歷史及演進(jìn)過(guò)程,以加深讀者對(duì)RPC技術(shù)的理解。然后介紹了常見(jiàn)的RPC框架,讓讀者能夠?qū)@些RPC框架有整體上的了解。接下來(lái)將RPC框架的核心組成部分拆開(kāi),對(duì)這些組成部分逐個(gè)進(jìn)行介紹,并且介紹相關(guān)的技術(shù)和概念,比如介紹遠(yuǎn)程通信方式時(shí),會(huì)介紹Socket技術(shù)、I/O模型等。本書(shū)接著介紹了實(shí)現(xiàn)簡(jiǎn)易的RPC框架的流程,讓讀者能夠上手實(shí)際操作。本書(shū)還介紹了RPC框架是如何應(yīng)對(duì)異構(gòu)語(yǔ)言下的挑戰(zhàn)的,并且介紹了與RPC框架相關(guān)的服務(wù)治理內(nèi)容,包括注冊(cè)中心、配置中心、元數(shù)據(jù)中心、服務(wù)路由策略、負(fù)載均衡策略、高可用策略及服務(wù)可觀測(cè)性,讓讀者能夠全面地了解RPC框架。
RPC概覽
主要介紹RPC的核心概念、歷史背景、演進(jìn)過(guò)程及技術(shù)原理,并且介紹四個(gè)常見(jiàn)的RPC框架與使用示例。
RPC框架核心組件
詳細(xì)介紹RPC框架的核心組成部分、異構(gòu)語(yǔ)言下RPC框架的挑戰(zhàn),以及解決異構(gòu)語(yǔ)言的方案,并且針對(duì)每個(gè)核心組成部分介紹業(yè)界常見(jiàn)的實(shí)現(xiàn)方案;谶@些核心組成部分,還介紹如何編寫(xiě)一個(gè)RPC框架的示例。
服務(wù)治理
詳細(xì)介紹服務(wù)治理的核心內(nèi)容,包括注冊(cè)中心、配置中心、元數(shù)據(jù)中心、服務(wù)路由策略、負(fù)載均衡策略、高可用策略及服務(wù)可觀測(cè)性。
RPC作為目前的主流技術(shù)之一,它打破了某一項(xiàng)任務(wù)所需的計(jì)算資源只能靠一臺(tái)計(jì)算機(jī)來(lái)實(shí)現(xiàn)的固有想法,對(duì)分布式計(jì)算、微服務(wù)等領(lǐng)域都有著重要而深遠(yuǎn)的影響。從20世紀(jì)80年代至今近四十年的時(shí)間內(nèi),由RPC衍生出來(lái)的技術(shù)非常多,包括很多現(xiàn)在常見(jiàn)的中間件技術(shù)都離不開(kāi)RPC。RPC是技術(shù)時(shí)代的產(chǎn)物,它是由當(dāng)時(shí)的社會(huì)發(fā)展、時(shí)代背景及需求所決定的。網(wǎng)絡(luò)技術(shù)的發(fā)展,以及操作系統(tǒng)中的進(jìn)程間通信技術(shù)越發(fā)多樣化和成熟,這些都為RPC的出現(xiàn)打下了非常好的基礎(chǔ)。
RPC是一種技術(shù)思想,它不可能一直停留在理論層面,需要落地,因此RPC框架慢慢地衍生出來(lái)。RPC框架是為了實(shí)現(xiàn)RPC而衍生出來(lái)的技術(shù)產(chǎn)物,它是RPC領(lǐng)域中可復(fù)用的軟件架構(gòu)解決方案。從以O(shè)NC RPC(Open Network Computing Remote Procedure Call)和DCE RPC(Distributed Computing Environment Remote Procedure Call)為首的初代RPC框架,到CORBA、DCOM、ZeroC ICE,再到現(xiàn)在流行的Apache Dubbo、Spring Cloud、gRPC、Thrift等,其間RPC框架也經(jīng)歷了幾十年的發(fā)展,許多RPC框架都是從公司或者組織內(nèi)開(kāi)始生根發(fā)芽的,逐漸發(fā)展成熟后,被貢獻(xiàn)到開(kāi)源社區(qū),由開(kāi)源社區(qū)來(lái)發(fā)展和維護(hù)。
筆者待過(guò)的公司或多或少都使用了RPC技術(shù),有的采用開(kāi)源的RPC框架,有的采用自研RPC框架,使用RPC框架來(lái)實(shí)現(xiàn)RPC技術(shù)已經(jīng)成為非常普遍的現(xiàn)象,而在使用RPC框架的時(shí)候,難免會(huì)遇到一些問(wèn)題,此時(shí)需要熟悉RPC框架的原理才能解決這些問(wèn)題。不同的RPC框架的實(shí)現(xiàn)細(xì)節(jié)會(huì)有所不同,但是底層的抽象都離不開(kāi)幾十年前的RPC技術(shù)理論,所以RPC技術(shù)的理論知識(shí)將是打開(kāi)RPC框架原理之門(mén)的鑰匙。
本書(shū)寫(xiě)作目的
筆者作為Apache Dubbo Committer,在參與Dubbo開(kāi)源社區(qū)建設(shè)的同時(shí),也在技術(shù)博客及自媒體平臺(tái)上撰寫(xiě)和分享了一些有關(guān)RPC框架源碼解讀的文章,筆者經(jīng)常收到一些讀者的私信,希望筆者能夠給他們推薦一些有關(guān)RPC的學(xué)習(xí)資料,讓他們通過(guò)學(xué)習(xí)RPC來(lái)提高對(duì)這些開(kāi)源的RPC框架源碼和原理的理解程度,降低學(xué)習(xí)和研讀RPC框架源碼的成本和門(mén)檻。所以撰寫(xiě)本書(shū)的想法并不是突然出現(xiàn)的,隨著類(lèi)似的私信變多,撰寫(xiě)本書(shū)的想法逐漸形成了。
撰寫(xiě)本書(shū)的初衷是希望能夠給讀者介紹RPC技術(shù)及RPC框架的實(shí)現(xiàn)原理,讓讀者在面對(duì)如此眾多的RPC框架時(shí),能夠較快地參透其原理。除此之外,本書(shū)的寫(xiě)作目的還有以下三點(diǎn):
- 希望本書(shū)可以讓讀者了解RPC及RPC框架的發(fā)展歷史和背景,了解其演進(jìn)過(guò)程。通過(guò)了解RPC的發(fā)展背景和歷史加深對(duì)RPC的理解。
- 希望本書(shū)可以讓讀者了解在實(shí)現(xiàn)RPC框架或者在對(duì)RPC框架選型時(shí),該考慮哪些重要的因素,并且了解常見(jiàn)的技術(shù)選型。
- 希望本書(shū)可以讓讀者了解RPC框架提供的服務(wù)治理的內(nèi)容。
本書(shū)特點(diǎn)
想要了解RPC框架原理,重要的就是了解RPC框架怎么使用,了解RPC框架內(nèi)對(duì)RPC技術(shù)的抽象,以及RPC框架提供的服務(wù)治理的內(nèi)容。本書(shū)的內(nèi)容涵蓋了這三部分,除了介紹市面上主流的RPC框架,還介紹了使用這些RPC框架的示例,方便讀者通過(guò)這些示例上手RPC框架。除此之外,本書(shū)還介紹了對(duì)RPC框架的選型,為讀者提供選型指南。
在介紹RPC框架的核心組成部分時(shí),對(duì)每一個(gè)核心組成部分,本書(shū)都會(huì)完整地介紹該部分的周邊知識(shí),旨在讓該領(lǐng)域的新手讀者也能夠輕松理解。除此之外,在介紹每一個(gè)核心組成部分時(shí),本書(shū)都會(huì)介紹業(yè)界不同的實(shí)現(xiàn)方案,加深讀者對(duì)這一核心組成部分的理解。本書(shū)還提供了一個(gè)實(shí)現(xiàn)簡(jiǎn)易的RPC框架的示例,通過(guò)動(dòng)手實(shí)現(xiàn)RPC框架,可加深讀者對(duì)RPC框架實(shí)現(xiàn)原理的認(rèn)知,不單單停留在理論層面,而是能夠直接運(yùn)用RPC技術(shù)理論編寫(xiě)RPC框架。
本書(shū)結(jié)構(gòu)
本書(shū)主要分為三部分。
部分為RPC概覽(第1章、第2章),第1章主要介紹RPC的核心概念、歷史背景、演進(jìn)過(guò)程及技術(shù)原理,第2章主要介紹RPC框架的概念、發(fā)展歷史及現(xiàn)狀,并且介紹了四個(gè)常見(jiàn)的RPC框架,提供了這四個(gè)RPC框架的使用示例。
第二部分為RPC框架核心組件(第3章至第8章),詳細(xì)介紹了RPC框架的核心組成部分、異構(gòu)語(yǔ)言下RPC框架的挑戰(zhàn),以及解決異構(gòu)語(yǔ)言的方案,并且針對(duì)每個(gè)核心組成部分介紹業(yè)界常見(jiàn)的實(shí)現(xiàn)方案;谶@些核心組成部分,本部分還介紹了編寫(xiě)一個(gè)RPC框架的示例。
第三部分為服務(wù)治理(第9章至第14章),詳細(xì)介紹了服務(wù)治理的核心內(nèi)容,其中每章的內(nèi)容相對(duì)獨(dú)立,讀者可按照自身所需選擇對(duì)應(yīng)的內(nèi)容進(jìn)行閱讀。
本書(shū)大部分的示例采用的編程語(yǔ)言都是Java,但各部分內(nèi)容及其原理與語(yǔ)言無(wú)關(guān),即使是沒(méi)有Java基礎(chǔ)的讀者,也能通過(guò)本書(shū)理解RPC的原理和RPC框架的原理。
源代碼與官方參考
本書(shū)示例代碼位于www.broadview.com.cn/42094的下載資源處,讀者可以從此處獲取示例代碼。
勘誤和支持
若讀者在閱讀本書(shū)的過(guò)程中有任何問(wèn)題或者建議,可以通過(guò)本書(shū)源碼倉(cāng)庫(kù)提交Issue或者PR,也可以關(guān)注加點(diǎn)代碼調(diào)調(diào)味微信公眾號(hào)并加入微信群與筆者交流。筆者十分感謝并重視讀者的反饋,會(huì)對(duì)讀者提出的問(wèn)題、建議進(jìn)行梳理與反饋,并在本書(shū)后續(xù)版本中及時(shí)做出勘誤與更新。
致謝
在本書(shū)寫(xiě)作和出版的近一年半時(shí)間里,感謝陳曉猛編輯的鼓勵(lì)和支持,同時(shí)感謝理解我的家人,讓我能夠借用大量陪伴他們的時(shí)間創(chuàng)作本書(shū)。
華鐘明