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