- 鳳凰架構:構建可靠的大型分布式系統
- 周志明
- 1365字
- 2021-06-24 11:30:52
2.1.2 通信的成本
之所以花費那么多篇幅來介紹IPC的手段,是因為最初計算機科學家們的想法,就是將RPC作為IPC的一種特例來看待,這個觀點在今天,僅從分類上說也仍然合理,只是到具體操作手段上就不合適了。
請特別注意最后一種基于套接字接口的通信方式(IPC Socket),它不僅適用于本地相同機器的不同進程間通信,由于Socket是網絡棧的統一接口,它也能支持基于網絡的跨機進程間通信。譬如Linux系統的圖形化界面、X Window服務器和GUI程序之間的交互就是由這套機制來實現的。這樣做的好處是,由于Socket是各個操作系統都提供的標準接口,完全有可能把遠程方法調用的通信細節隱藏在操作系統底層,從應用層面上來看可以做到遠程調用與本地的進程間通信在編碼上完全一致。事實上,在原始分布式時代的早期確實是奔著這個目標去做的,但這種透明的調用形式反而給程序員帶來通信無成本的假象,因而被濫用,以致于顯著降低了分布式系統的性能。1987年,在“透明的RPC調用”一度成為主流范式的時候,Andrew Tanenbaum教授曾發表論文“A Critique of The Remote Procedure Call Paradigm”[1],對這種透明的RPC范式提出一系列質問。
·兩個進程通信,誰作為服務端,誰作為客戶端?
·怎樣進行異常處理?異常該如何讓調用者獲知?
·服務端出現多線程競爭之后怎么辦?
·如何提高網絡利用的效率?連接是否可被多個請求復用以減少開銷?是否支持多播?
·參數、返回值如何表示?應該有怎樣的字節序?
·如何保證網絡的可靠性?調用期間某個鏈接忽然斷開了怎么辦?
·發送的請求服務端收不到回復怎么辦?
論文的中心觀點是:把本地調用與遠程調用當作同樣的調用來處理,這是犯了方向性的錯誤,把系統間的調用透明化,反而會增加程序員工作的復雜度。此后幾年,關于RPC應該如何發展、如何實現的論文層出不窮,透明通信的支持者有之,反對者有之,冷靜分析者有之,狂熱唾罵者也有之,但歷史逐漸證明Andrew Tanenbaum的預言是正確的。最終,到1994年至1997年間,由ACM和Sun院士Peter Deutsch、套接字接口發明者Bill Joy、Java之父James Gosling等一眾在Sun公司工作的專家們共同總結了通過網絡進行分布式運算的八宗罪(8 Fallacies of Distributed Computing)[2]。
1)The network is reliable.——網絡是可靠的。
2)Latency is zero.——延遲是不存在的。
3)Bandwidth is infinite.——帶寬是無限的。
4)The network is secure.——網絡是安全的。
5)Topology doesn’t change.——拓撲結構是一成不變的。
6)There is one administrator.——總會有一個管理員。
7)Transport cost is zero.——不必考慮傳輸成本。
8)The network is homogeneous.——網絡都是同質化的。
以上這八條反話被認為是程序員在網絡編程中經常忽略的八大問題,潛臺詞就是如果遠程服務調用要透明化,就必須為這些罪過埋單,這算是給RPC能否等同于IPC來暫時定下了一個具有公信力的結論。至此,“RPC應該是一種高層次的或者說語言層次的特征,而不是像IPC那樣,是低層次的或者說系統層次的特征”的觀點成為工業界、學術界的主流觀點。
在20世紀80年代初期,傳奇的施樂Palo Alto研究中心發布了基于Cedar語言的RPC框架——Lupine,并實現了世界上第一個基于RPC的商業應用——Courier,這里施樂Palo Alto研究中心所定義的“遠程服務調用”的概念就是完全符合以上對RPC的結論的,所以,盡管此前已經有用其他名詞指代“調用遠程服務”的操作,一般仍認為RPC的概念最早是由施樂公司提出的。
額外知識
首次提出遠程服務調用的定義
遠程服務調用是指位于互不重合的內存地址空間中的兩個程序,在語言層面上,以同步的方式使用帶寬有限的信道來傳輸程序控制信息。

——Bruce Jay Nelson,Remote Procedure Call,Xerox PARC,1981
[1] 下載地址:https://www.cs.vu.nl/~ast/Publications/Papers/euteco-1988.pdf。
[2] 詳見:https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing。
- 發布!設計與部署穩定的分布式系統(第2版)
- Linux Mint Essentials
- Learning Android Intents
- 操作系統基礎與實踐:基于openEuler平臺
- 零基礎學鴻蒙PC:新一代國產操作系統
- Microsoft Operations Management Suite Cookbook
- 蘋果OS X Mavericks 10.9應用大全
- Kali Linux 2018:Windows Penetration Testing
- 計算機系統的自主設計
- Windows 8實戰從入門到精通(超值版)
- Python UNIX和Linux系統管理指南
- UI設計手繪表現從入門到精通
- iOS Programming Cookbook
- Linux應用大全 服務器架設
- Hyper-V Replica Essentials