深入淺出RPC——淺出篇(轉載)

來源:互聯網
上載者:User

標籤:section   remote   十分   href   隱式   通過   重要   .com   計算   

本文轉載自這裡是原文

近幾年的項目中,服務化和微服務化漸漸成為中大型分布式系統架構的主流方式,而 RPC 在其中扮演著關鍵的作用。 在平時的日常開發中我們都在隱式或顯式的使用 RPC,一些剛入行的程式員會感覺 RPC 比較神秘,而一些有多年使用 RPC 經驗的程式員雖然使用經驗豐富,但有些對其原理也不甚了了。 缺乏對原理層面的理解,往往也會造成開發中的一些誤用。

本文分上下兩篇《淺出篇》和《深入篇》,其目標就是想嘗試深入淺出的分析下 RPC 本質,我總是這麼認為理解了本質才能更好的應用。

RPC是什麼

RPC全稱是Remote Procedure Call是一種處理序間通訊方式。它允許程式調用另外一個地址空間(通常是共用網路的另一台機器)的過程或函數,而不用程式員顯式編碼這個遠程調用的細節。即程式員無論調用本地的還是遠端,本質上編寫的調用代碼基本相同。

RPC起源

RPC 這個概念術語在上世紀 80 年代由 Bruce Jay Nelson 提出。 這裡我們追溯下當初開發 RPC 的原動機是什嗎? 在 Nelson 的論文 Implementing Remote Procedure Calls 中他提到了幾點:

簡單:RPC 概念的語義十分清晰和簡單,這樣建立分散式運算就更容易。 高效:程序呼叫看起來十分簡單而且高效。 通用:在單機計算中過程往往是不同演算法部分間最重要的通訊機制

通俗一點說,就是一般程式員對於本地的程序呼叫很熟悉,那麼我們把 RPC 作成和本地調用完全類似,那麼就更容易被接受,使用起來毫無障礙。 Nelson 的論文發表於 30 年前,其觀點今天看來確實高瞻遠矚,今天我們使用的 RPC 架構基本就是按這個目標來實現的。

RPC 結構

User User-stub RPCRuntime Server-stub Serve

這裡 user 就是 client 端,當 user 想發起一個遠程調用時,它實際是通過本地調用 user-stub。 user-stub 負責將調用的介面、方法和參數通過約定的協議規範進行編碼並通過本地的 RPCRuntime 執行個體傳輸到遠端的執行個體。 遠端 RPCRuntime 執行個體收到請求後交給 server-stub 進行解碼後發起本地端調用,調用結果再返回給 user 端。

RPC 實現

Nelson 論文中給出的這個實現結構也成為後來大家參考的標準範本。 大約 10 年前,我最早接觸分散式運算時使用的 CORBAR 實現結構基本與此類似。 CORBAR 為瞭解決異構平台的 RPC,使用了 IDL(Interface Definition Language)來定義遠程介面,並將其映射到特定的平台語言中。 後來大部分的跨語言平台 RPC 基本都採用了此類方式,比如我們熟悉的 Web Service(SOAP),近年開源的 Thrift 等。 他們大部分都通過 IDL 定義,並提供工具來映射產生不同語言平台的 user-stub 和 server-stub,並通過架構庫來提供 RPCRuntime 的支援。 不過貌似每個不同的 RPC 架構都定義了各自不同的 IDL 格式,導致程式員的學習成本進一步上升(苦逼啊),Web Service 嘗試建立業界標準,無賴標準規範複雜而效率偏低,否則 Thrift 等更高效的 RPC 架構就沒必要出現了。

IDL 是為了跨平台語言實現 RPC 不得已的選擇,要解決更廣泛的問題自然導致了更複雜的方案。 而對於同一平台內的 RPC 而言顯然沒必要搞個中繼語言出來,例如 java 原生的 RMI,這樣對於 java 程式員而言顯得更直接簡單,降低使用的學習成本。 目前市面上提供的 RPC 架構已經可算是五花八門,百家爭鳴了。 需要根據實際使用情境謹慎選型,需要考慮的選型因素我覺得至少包括下面幾點:

  • 效能指標
  • 是否需要跨語言平台
  • 內網開放還是公網開放
  • 開源 RPC 架構本身的品質、社區活躍度
總結

《淺出篇》大概就到這裡結束了,《深入篇》會具體深入講解一個 RPC 架構需要實現哪裡準系統,達到什麼目標,並以在 java 平台上去具體實現一個 RPC 架構為例,分析其需要考慮的實現因素。

 

http://daodaoliang.com/blog/2015/08/27/%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BARPC(%E6%B5%85%E5%87%BA%E7%AF%87).html

深入淺出RPC——淺出篇(轉載)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.