開源 RPC 框架有哪些呢?
樂清網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)從2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
一類是跟某種特定語言平臺綁定的,另一類是與語言無關(guān)即跨語言平臺的。
跟語言平臺綁定的開源 RPC 框架主要有下面幾種。
Dubbo:國內(nèi)最早開源的 RPC 框架,由阿里巴巴公司開發(fā)并于 2011 年末對外開源,僅支持 Java 語言。
Motan:微博內(nèi)部使用的 RPC 框架,于 2016 年對外開源,僅支持 Java 語言。
Tars:騰訊內(nèi)部使用的 RPC 框架,于 2017 年對外開源,僅支持 C++ 語言。
Spring Cloud:國外 Pivotal 公司 2014 年對外開源的 RPC 框架,僅支持 Java 語言
而跨語言平臺的開源 RPC 框架主要有以下幾種。
gRPC:Google 于 2015 年對外開源的跨語言 RPC 框架,支持多種語言。
Thrift:最初是由 Facebook 開發(fā)的內(nèi)部系統(tǒng)跨語言的 RPC 框架,2007 年貢獻給了 Apache 基金,成為 Apache 開源項目之一,支持多種語言。
如果你的業(yè)務(wù)場景僅僅局限于一種語言的話,可以選擇跟語言綁定的 RPC 框架中的一種;
如果涉及多個語言平臺之間的相互調(diào)用,就應(yīng)該選擇跨語言平臺的 RPC 框架。
RPC 框架,它們具體有何區(qū)別?
1. Dubbo
先來聊聊 Dubbo,Dubbo 可以說是國內(nèi)開源最早的 RPC 框架了,目前只支持 Java 語言,它的架構(gòu)可以用下面這張圖展示。
從圖中你能看到,Dubbo 的架構(gòu)主要包含四個角色,其中 Consumer 是服務(wù)消費者,Provider 是服務(wù)提供者,Registry 是注冊中心,Monitor 是監(jiān)控系統(tǒng)。
具體的交互流程是 Consumer 一端通過注冊中心獲取到 Provider 節(jié)點后,通過 Dubbo 的客戶端 SDK 與 Provider 建立連接,并發(fā)起調(diào)用。Provider 一端通過 Dubbo 的服務(wù)端 SDK 接收到 Consumer 的請求,處理后再把結(jié)果返回給 Consumer。
2. Motan
Motan 是國內(nèi)另外一個比較有名的開源的 RPC 框架,同樣也只支持 Java 語言實現(xiàn),它的架構(gòu)可以用下面這張圖描述。
Motan 與 Dubbo 的架構(gòu)類似,都需要在 Client 端(服務(wù)消費者)和 Server 端(服務(wù)提供者)引入 SDK,其中 Motan 框架主要包含下面幾個功能模塊。
register:用來和注冊中心交互,包括注冊服務(wù)、訂閱服務(wù)、服務(wù)變更通知、服務(wù)心跳發(fā)送等功能。
protocol:用來進行 RPC 服務(wù)的描述和 RPC 服務(wù)的配置管理,這一層還可以添加不同功能的 filter 用來完成統(tǒng)計、并發(fā)限制等功能。
serialize:將 RPC 請求中的參數(shù)、結(jié)果等對象進行序列化與反序列化
transport:用來進行遠程通信,默認使用 Netty NIO 的 TCP 長鏈接方式。
cluster:請求時會根據(jù)不同的高可用與負載均衡策略選擇一個可用的 Server 發(fā)起遠程調(diào)用。
3. Tars
Tars 是騰訊根據(jù)內(nèi)部多年使用微服務(wù)架構(gòu)的實踐,總結(jié)而成的開源項目,僅支持 C++ 語言,它的架構(gòu)圖如下。
Tars 的架構(gòu)交互主要包括以下幾個流程:
服務(wù)發(fā)布流程:在 web 系統(tǒng)上傳 server 的發(fā)布包到 patch,上傳成功后,在 web 上提交發(fā)布 server 請求,由 registry 服務(wù)傳達到 node,然后 node 拉取 server 的發(fā)布包到本地,拉起 server 服務(wù)。
管理命令流程:web 系統(tǒng)上的可以提交管理 server 服務(wù)命令請求,由 registry 服務(wù)傳達到 node 服務(wù),然后由 node 向 server 發(fā)送管理命令。
心跳上報流程:server 服務(wù)運行后,會定期上報心跳到 node,node 然后把服務(wù)心跳信息上報到 registry 服務(wù),由 registry 進行統(tǒng)一管理。
信息上報流程:server 服務(wù)運行后,會定期上報統(tǒng)計信息到 stat,打印遠程日志到 log,定期上報屬性信息到 prop、上報異常信息到 notify、從 config 拉取服務(wù)配置信息。
client 訪問 server 流程:client 可以通過 server 的對象名 Obj 間接訪問 server,client 會從 registry 上拉取 server 的路由信息(如 IP、Port 信息),然后根據(jù)具體的業(yè)務(wù)特性(同步或者異步,TCP 或者 UDP 方式)訪問 server(當然 client 也可以通過 IP/Port 直接訪問 server)。
4. Spring Cloud
Spring Cloud 利用 Spring Boot 特性整合了開源行業(yè)中優(yōu)秀的組件,整體對外提供了一套在微服務(wù)架構(gòu)中服務(wù)治理的解決方案。
只支持 Java 語言平臺,它的架構(gòu)圖可以用下面這張圖來描述。
由此可見,Spring Cloud 微服務(wù)架構(gòu)是由多個組件一起組成的,各個組件的交互流程如下。
請求統(tǒng)一通過 API 網(wǎng)關(guān) Zuul 來訪問內(nèi)部服務(wù),先經(jīng)過 Token 進行安全認證。
通過安全認證后,網(wǎng)關(guān) Zuul 從注冊中心 Eureka 獲取可用服務(wù)節(jié)點列表。
從可用服務(wù)節(jié)點中選取一個可用節(jié)點,然后把請求分發(fā)到這個節(jié)點。
整個請求過程中,Hystrix 組件負責處理服務(wù)超時熔斷,Turbine 組件負責監(jiān)控服務(wù)間的調(diào)用和熔斷相關(guān)指標,Sleuth 組件負責調(diào)用鏈監(jiān)控,ELK 負責日志分析。
5. gRPC
先來看下 gRPC,它的原理是通過 IDL(Interface Definition Language)文件定義服務(wù)接口的參數(shù)和返回值類型,然后通過代碼生成程序生成服務(wù)端和客戶端的具體實現(xiàn)代碼,這樣在 gRPC 里,客戶端應(yīng)用可以像調(diào)用本地對象一樣調(diào)用另一臺服務(wù)器上對應(yīng)的方法。
它的主要特性包括三個方面。
通信協(xié)議采用了 HTTP/2,因為 HTTP/2 提供了連接復(fù)用、雙向流、服務(wù)器推送、請求優(yōu)先級、首部壓縮等機制
IDL 使用了ProtoBuf,ProtoBuf 是由 Google 開發(fā)的一種數(shù)據(jù)序列化協(xié)議,它的壓縮和傳輸效率極高,語法也簡單
多語言支持,能夠基于多種語言自動生成對應(yīng)語言的客戶端和服務(wù)端的代碼。
6. Thrift
再來看下 Thrift,Thrift 是一種輕量級的跨語言 RPC 通信方案,支持多達 25 種編程語言。為了支持多種語言,跟 gRPC 一樣,Thrift 也有一套自己的接口定義語言 IDL,可以通過代碼生成器,生成各種編程語言的 Client 端和 Server 端的 SDK 代碼,這樣就保證了不同語言之間可以相互通信。它的架構(gòu)圖可以用下圖來描述。
從這張圖上可以看出 Thrift RPC 框架的特性。
支持多種序列化格式:如 Binary、Compact、JSON、Multiplexed 等。
支持多種通信方式:如 Socket、Framed、File、Memory、zlib 等。
服務(wù)端支持多種處理方式:如 Simple 、Thread Pool、Non-Blocking 等。
關(guān)于微服務(wù)我總結(jié)了一個技術(shù)路線,分享給大家
最后
歡迎大家一起交流,喜歡文章記得點個贊喲,感謝支持!
當前題目:6種微服務(wù)RPC框架,你知道幾個?
轉(zhuǎn)載注明:http://www.chinadenli.net/article48/ieoehp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、手機網(wǎng)站建設(shè)、用戶體驗、企業(yè)網(wǎng)站制作、App設(shè)計、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)