RPC-01-架構(gòu)

聲明:原創(chuàng)文章屡久,轉(zhuǎn)載請注明出處潮太。http://www.reibang.com/u/e02df63eaa87

1碑定、簡介

RPC全稱是Remote Procedure Call奕纫,它是一種進程間通信方式涩馆。允許像調(diào)用本地服務(wù)一樣調(diào)用遠程服務(wù)行施,它的具體實現(xiàn)方式可以不同,例如Spring的HTTP Invoker魂那,F(xiàn)acebook的Thrift
二進制私有協(xié)議通信蛾号。

RPC概念術(shù)語在上世紀80年代由Bruce Jay Nelson提出,在他的論文中對RPC進行了如下總結(jié)涯雅。

  • 簡單:RPC概念的語義十分清晰和簡單鲜结,這樣建立分布式計算就更容易。
  • 高效:過程調(diào)用看起來十分簡單且高效活逆。
  • 通用:在單機計算中過程往往是不同算法和API精刷,跨進程調(diào)用最重要的通用的通信機制。

2蔗候、RPC框架原理

RPC框架的目標就是讓遠程過程(服務(wù))調(diào)用更加簡單怒允、透明。RPC框架負責屏蔽底層的傳輸方式(TCP/UDP)锈遥、序列化方式(XML/JSON/二進制)和通信細節(jié)纫事。框架使用者只需要了解誰在什么位置提供了什么樣的遠程服務(wù)接口即可所灸,開發(fā)者不需要關(guān)心通信細節(jié)和調(diào)用過程丽惶。

因此一個RPC的設(shè)計需要考慮:傳輸方式、序列化爬立、通信等方面钾唬。
RPC框架調(diào)用原理如下圖:

RPC調(diào)用框架

RPC框架實現(xiàn)的幾個核心技術(shù)點如下:

  • 遠程服務(wù)提供者需要以某種形式提供服務(wù)調(diào)用相關(guān)的信息,包括但不限于服務(wù)接口定義懦尝、數(shù)據(jù)結(jié)構(gòu)知纷、或者中間態(tài)的服務(wù)定義文件壤圃,如Thrift的IDL文件陵霉,WS-RPC的WSDL文件定義,甚至也可以實服務(wù)端的接口說明文檔伍绳;服務(wù)調(diào)用者需要通過一定的途徑獲取遠程服務(wù)調(diào)用相關(guān)信息踊挠,例如服務(wù)端接口定義Jar包導(dǎo)入,獲取服務(wù)端IDL文件等。
  • 遠程代理對象:服務(wù)調(diào)用者調(diào)用的服務(wù)實際是遠程服務(wù)的本地代理效床,對應(yīng)Java語言睹酌,它的實現(xiàn)就是JDK的動態(tài)代理,通過動態(tài)代理的攔截機制剩檀,將本地調(diào)用封裝成遠程服務(wù)調(diào)用憋沿。
  • 通信:RPC框架和具體的協(xié)議無關(guān)。
  • 序列化:遠程通信沪猴,需要將對象轉(zhuǎn)換成二進制碼流進行網(wǎng)絡(luò)傳輸辐啄,不同的序列化框架,支持的數(shù)據(jù)類型运嗜、數(shù)據(jù)包大小壶辜、異常類型及性能都不同,不同的RPC框架應(yīng)用場景不同担租,因此技術(shù)選擇也會存在很大差異砸民。一些RPC框架,可以支持多種序列化方式奋救,有的甚至支持用戶自定義序列化框架(Hadoop Avro)岭参。

一個完整的RPC調(diào)用過程需要解決以下幾個問題

  • 要解決通訊的問題,主要是通過在客戶端和服務(wù)器之間建立TCP連接菠镇,遠程過程調(diào)用的所有交換的數(shù)據(jù)都在這個連接里傳輸冗荸。連接可以是按需連接,調(diào)用結(jié)束后就斷掉利耍,也可以是長連接蚌本,多個遠程過程調(diào)用共享同一個連接。
  • 要解決尋址的問題隘梨,也就是說程癌,A服務(wù)器上的應(yīng)用怎么告訴底層的RPC框架,如何連接到B服務(wù)器(如主機或IP地址)以及特定的端口轴猎,方法的名稱名稱是什么嵌莉,這樣才能完成調(diào)用。比如基于Web服務(wù)協(xié)議棧的RPC捻脖,就要提供一個endpoint URI锐峭,或者是從UDDI服務(wù)上查找。如果是RMI調(diào)用的話可婶,還需要一個RMI Registry來注冊服務(wù)的地址沿癞。
  • 當A服務(wù)器上的應(yīng)用發(fā)起遠程過程調(diào)用時,方法的參數(shù)需要通過底層的網(wǎng)絡(luò)協(xié)議如TCP傳遞到B服務(wù)器矛渴,由于網(wǎng)絡(luò)協(xié)議是基于二進制的椎扬,內(nèi)存中的參數(shù)的值要序列化成二進制的形式,也就是序列化(Serialize)或編組(marshal),通過尋址和傳輸將序列化的二進制發(fā)送給B服務(wù)器蚕涤。
  • B服務(wù)器收到請求后筐赔,需要對參數(shù)進行反序列化(序列化的逆操作),恢復(fù)為內(nèi)存中的表達方式揖铜,然后找到對應(yīng)的方法(尋址的一部分)進行本地調(diào)用茴丰,然后得到返回值。
  • 返回值還要發(fā)送回服務(wù)器A上的應(yīng)用天吓,也要經(jīng)過序列化的方式發(fā)送较沪,服務(wù)器A接到后,再反序列化失仁,恢復(fù)為內(nèi)存中的表達方式尸曼,交給A服務(wù)器上的應(yīng)用。

3萄焦、主流RPC框架

  • 由Facebook開發(fā)的RPC框架Apache Thrift
  • Hadoop的子項目Avro-RPC
  • caucho提供的基于binary-RPC框架Hessian
  • Google開源的基于HTTP/2和ProtocolBuf的RPC框架gRPC

http://www.phei.com.cn/module/goods/wssd_content.jsp?bookid=44448
https://segmentfault.com/a/1190000005178084
https://www.zhihu.com/question/25536695/answer/36197244

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末控轿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拂封,更是在濱河造成了極大的恐慌茬射,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冒签,死亡現(xiàn)場離奇詭異在抛,居然都是意外死亡,警方通過查閱死者的電腦和手機萧恕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門刚梭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人票唆,你說我怎么就攤上這事朴读。” “怎么了走趋?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵衅金,是天一觀的道長。 經(jīng)常有香客問我簿煌,道長氮唯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任姨伟,我火速辦了婚禮惩琉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘授滓。我一直安慰自己琳水,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布般堆。 她就那樣靜靜地躺著在孝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪淮摔。 梳的紋絲不亂的頭發(fā)上私沮,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音和橙,去河邊找鬼仔燕。 笑死,一個胖子當著我的面吹牛魔招,可吹牛的內(nèi)容都是我干的晰搀。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼办斑,長吁一口氣:“原來是場噩夢啊……” “哼外恕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乡翅,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤鳞疲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蠕蚜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尚洽,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年靶累,在試婚紗的時候發(fā)現(xiàn)自己被綠了腺毫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡挣柬,死狀恐怖拴曲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情凛忿,我是刑警寧澤澈灼,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站店溢,受9級特大地震影響叁熔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜床牧,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一荣回、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧戈咳,春花似錦心软、人聲如沸壕吹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耳贬。三九已至,卻和暖如春猎唁,著一層夾襖步出監(jiān)牢的瞬間咒劲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工诫隅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留腐魂,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓逐纬,卻偏偏與公主長得像蛔屹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子豁生,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)自:http://blog.csdn.net/kesonyk/article/details/50924489 ...
    晴天哥_王志閱讀 24,784評論 2 38
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理判导,服務(wù)發(fā)現(xiàn),斷路器沛硅,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 今年的秋天格外長眼刃,窗外的半截紫葉李開花了,我驚奇地叫人來看摇肌。 不知是誰喚來了春色擂红,思緒漸遠。 去年春天围小,我站在遠處...
    需要靈感閱讀 45評論 0 0
  • 又是一個大晴天昵骤,又賴床到8點多才起,做了一篇英語閱讀題肯适,練了幾分鐘的字就無心學習了变秦。開始邊直播邊拾掇自己,還...
    辛德瑞拉_7d9e閱讀 281評論 0 0
  • 天空的心情框舔, 在你的世界里蹦玫, 講述…… 你靜心聆聽, 不時仰望那天空刘绣, 把最美的一個微笑樱溉, 定格在彼此的默契之中……
    小劇在成長閱讀 203評論 2 3