<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          “RPC 和RESTful ” 不要再選錯了!

          共 2942字,需瀏覽 6分鐘

           ·

          2021-03-02 11:17

          不點藍字,我們哪來故事?

          每天 11 點更新文章,餓了點外賣,點擊 ??《無門檻外賣優(yōu)惠券,每天免費領!》

          • OSI網絡七層模型
          • RPC服務
            • RPC架構
            • 同步調用與異步調用
            • 流行的RPC框架
          • HTTP服務
          • 總之

          RPC主要是基于TCP/IP協(xié)議的,而HTTP服務主要是基于HTTP協(xié)議的,我們都知道HTTP協(xié)議是在傳輸層協(xié)議TCP之上的,所以效率來看的話,RPC當然是要更勝一籌啦!下面來具體說一說RPC服務和HTTP服務。

          OSI網絡七層模型

          在說RPC和HTTP的區(qū)別之前,我覺的有必要了解一下OSI的七層網絡結構模型(雖然實際應用中基本上都是五層),它可以分為以下幾層:(從上到下)

          • 第一層:應用層。定義了用于在網絡中進行通信和傳輸數(shù)據(jù)的接口;
          • 第二層:表示層。定義不同的系統(tǒng)中數(shù)據(jù)的傳輸格式,編碼和解碼規(guī)范等;
          • 第三層:會話層。管理用戶的會話,控制用戶間邏輯連接的建立和中斷;
          • 第四層:傳輸層。管理著網絡中的端到端的數(shù)據(jù)傳輸;
          • 第五層:網絡層。定義網絡設備間如何傳輸數(shù)據(jù);
          • 第六層:鏈路層。將上面的網絡層的數(shù)據(jù)包封裝成數(shù)據(jù)幀,便于物理層傳輸;
          • 第七層:物理層。這一層主要就是傳輸這些二進制數(shù)據(jù)。

          實際應用過程中,五層協(xié)議結構里面是沒有表示層和會話層的。應該說它們和應用層合并了。我們應該將重點放在應用層和傳輸層這兩個層面。因為HTTP是應用層協(xié)議,而TCP是傳輸層協(xié)議。好,知道了網絡的分層模型以后我們可以更好地理解為什么RPC服務相比HTTP服務要Nice一些!

          RPC服務

          從三個角度來介紹RPC服務:分別是RPC架構,同步異步調用以及流行的RPC框架。

          RPC架構

          先說說RPC服務的基本架構吧。允許我可恥地盜一幅圖哈~我們可以很清楚地看到,一個完整的RPC架構里面包含了四個核心的組件,分別是Client ,Server,Client Stub以及Server Stub,這個Stub大家可以理解為存根。分別說說這幾個組件:

          • 客戶端(Client),服務的調用方。
          • 服務端(Server),真正的服務提供者。
          • 客戶端存根,存放服務端的地址消息,再將客戶端的請求參數(shù)打包成網絡消息,然后通過網絡遠程發(fā)送給服務方。
          • 服務端存根,接收客戶端發(fā)送過來的消息,將消息解包,并調用本地的方法。

          RPC主要是用在大型企業(yè)里面,因為大型企業(yè)里面系統(tǒng)繁多,業(yè)務線復雜,而且效率優(yōu)勢非常重要的一塊,這個時候RPC的優(yōu)勢就比較明顯了。實際的開發(fā)當中是這么做的,項目一般使用maven來管理。比如我們有一個處理訂單的系統(tǒng)服務,先聲明它的所有的接口(這里就是具體指Java中的interface),然后將整個項目打包為一個jar包,服務端這邊引入這個二方庫,然后實現(xiàn)相應的功能,客戶端這邊也只需要引入這個二方庫即可調用了。為什么這么做?主要是為了減少客戶端這邊的jar包大小,因為每一次打包發(fā)布的時候,jar包太多總是會影響效率。另外也是將客戶端和服務端解耦,提高代碼的可移植性。

          同步調用與異步調用

          什么是同步調用?什么是異步調用?同步調用就是客戶端等待調用執(zhí)行完成并返回結果。異步調用就是客戶端不等待調用執(zhí)行完成返回結果,不過依然可以通過回調函數(shù)等接收到返回結果的通知。如果客戶端并不關心結果,則可以變成一個單向的調用。這個過程有點類似于Java中的callable和runnable接口,我們進行異步執(zhí)行的時候,如果需要知道執(zhí)行的結果,就可以使用callable接口,并且可以通過Future類獲取到異步執(zhí)行的結果信息。如果不關心執(zhí)行的結果,直接使用runnable接口就可以了,因為它不返回結果,當然啦,callable也是可以的,我們不去獲取Future就可以了。

          流行的RPC框架

          目前流行的開源RPC框架還是比較多的。下面重點介紹三種:

          1、gRPC是Google最近公布的開源軟件,基于最新的HTTP2.0協(xié)議,并支持常見的眾多編程語言。我們知道HTTP2.0是基于二進制的HTTP協(xié)議升級版本,目前各大瀏覽器都在快馬加鞭的加以支持。這個RPC框架是基于HTTP協(xié)議實現(xiàn)的,底層使用到了Netty框架的支持。

          2、Thrift是Facebook的一個開源項目,主要是一個跨語言的服務開發(fā)框架。它有一個代碼生成器來對它所定義的IDL定義文件自動生成服務代碼框架。用戶只要在其之前進行二次開發(fā)就行,對于底層的RPC通訊等都是透明的。不過這個對于用戶來說的話需要學習特定領域語言這個特性,還是有一定成本的。

          3、Dubbo是阿里集團開源的一個極為出名的RPC框架,在很多互聯(lián)網公司和企業(yè)應用中廣泛使用。協(xié)議和序列化框架都可以插拔是及其鮮明的特色。同樣 的遠程接口是基于Java Interface,并且依托于spring框架方便開發(fā)。可以方便的打包成單一文件,獨立進程運行,和現(xiàn)在的微服務概念一致。

          HTTP服務

          其實在很久以前,我對于企業(yè)開發(fā)的模式一直定性為HTTP接口開發(fā),也就是我們常說的RESTful風格的服務接口。的確,對于在接口不多、系統(tǒng)與系統(tǒng)交互較少的情況下,解決信息孤島初期常使用的一種通信手段;優(yōu)點就是簡單、直接、開發(fā)方便。利用現(xiàn)成的http協(xié)議進行傳輸。我們記得之前本科實習在公司做后臺開發(fā)的時候,主要就是進行接口的開發(fā),還要寫一大份接口文檔,嚴格地標明輸入輸出是什么?說清楚每一個接口的請求方法,以及請求參數(shù)需要注意的事項等。比如下面這個例子:

          POST http://www.httpexample.com/restful/buyer/info/share

          接口可能返回一個JSON字符串或者是XML文檔。然后客戶端再去處理這個返回的信息,從而可以比較快速地進行開發(fā)。但是對于大型企業(yè)來說,內部子系統(tǒng)較多、接口非常多的情況下,RPC框架的好處就顯示出來了,首先就是長鏈接,不必每次通信都要像http一樣去3次握手什么的,減少了網絡開銷;其次就是RPC框架一般都有注冊中心,有豐富的監(jiān)控管理;發(fā)布、下線接口、動態(tài)擴展等,對調用方來說是無感知、統(tǒng)一化的操作。

          總之

          RPC服務和HTTP服務還是存在很多的不同點的,一般來說,RPC服務主要是針對大型企業(yè)的,而HTTP服務主要是針對小企業(yè)的,因為RPC效率更高,而HTTP服務開發(fā)迭代會更快。總之,選用什么樣的框架不是按照市場上流行什么而決定的,而是要對整個項目進行完整地評估,從而在仔細比較兩種開發(fā)框架對于整個項目的影響,最后再決定什么才是最適合這個項目的。一定不要為了使用RPC而每個項目都用RPC,而是要因地制宜,具體情況具體分析。

          往期推薦

          快手上市,人均身家超 1300 萬港元,大廠的車該怎么上?

          Spring 中的重試機制,簡單、實用!

          快領紅包!

          2021年2月程序員工資統(tǒng)計,又拖后腿了。。。

          下方二維碼關注我

          技術草根堅持分享 編程,算法,架構

          看完文章,餓了點外賣,點擊 ??《無門檻外賣優(yōu)惠券,每天免費領!》

          朋友,助攻一把!點個在看
          瀏覽 48
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产婷婷色一区二区三区 | 精品无码一区二区三区免费 | 一级黄色免费在线电影 | 国产无码15p | 精品成人一区二区三区 |