RPC框架比較
典型RPC呼叫框架: RPC的實現和呼叫框架,五花八門,簡單介紹其中幾種比較典型的: RMI,利用java.rmi包實現,基於Java遠端方法協議(Java Remote Method Protocol) 和java的原生序列化。
Hessian
protobuf-rpc-pro,是一個Java類庫,提供了基於 Google 的 Protocol Buffers 協議的遠端方法呼叫的框架。基於 Netty 底層的 NIO 技術。支援 TCP 重用/ keep-alive、SSL加密、RPC 呼叫取消操作、嵌入式日誌等功能。
Thrift,是一種可伸縮的跨語言服務的軟體框架。它擁有功能強大的程式碼生成引擎,無縫地支援C + +,C#,Java,Python和PHP和Ruby。thrift允許你定義一個描述檔案,描述資料型別和服務介面。依據該檔案,編譯器方便地生成RPC客戶端和伺服器通訊程式碼。
Avro,出自Hadoop之父Doug Cutting, 在Thrift已經相當流行的情況下推出Avro的目標不僅是提供一套類似Thrift的通訊中介軟體,更是要建立一個新的,標準性的雲端計算的資料交換和儲存的Protocol。支援HTTP,TCP兩種協議。
RPC呼叫框架的過程原理基本類似,以Thrift為例 Thrift 協議棧以及各層的使用(java 為例) 1、model interface 服務的呼叫介面以及介面引數model、返回值model
2、Tprotocol 協議層 將資料(model)編碼 、解碼
3、Ttramsport 傳輸層 編碼後的資料傳輸(簡單socket、http)
5、Tserver 服務的Tserver型別,實現了幾種rpc呼叫(多執行緒、單執行緒非阻塞IO、多執行緒非阻塞IO)
RPC呼叫框架比較:
Thrift與protobuf-rpc-pro比較 1、Another important difference are the languages supported by default. protobuf: Java, C++, Python Thrift: Java, C++, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, Ocaml 支援語言不同,thrift支援著更多的語言
2、Thrift supports ‘exceptions 。 thrift支援服務的異常。
3、Protocol Buffers much easier to read 。Protobuf API looks cleaner, though the generated classes are all packed as an inner classes which is not so nice. Protocol Buffers 在文件方面比thrift豐富,而且比thrift簡單。
4、Protobuf serialized objects are about 30% smaller then Thrift. Protocol Buffers在序列化/反序列化、傳輸上效能更優。
5、RPC is another key difference. Thrift generates code to implement RPC clients and servers wheres Protocol Buffers seems mostly designed as a data-interchange format alone. thrift提供了一套完整的rpc服務實現(多執行緒socket、單執行緒非阻塞的socket、多執行緒非阻塞socket)
6、And according to the wiki the Thrift runtime doesn't run on Windows. thrift 對有些語言在windows上不支援:C++
Apache Avro 與 Thrift 比較 文章有比較詳細的對比,值得仔細研讀。摘部分內容,如下。 Avro和Thrift都是跨語言,基於二進位制的高效能的通訊中介軟體。它們都提供了資料序列化的功能和RPC服務。總體功能上類似,但是哲學不一樣。 Thrift出自Facebook用於後臺各個服務間的通訊,Thrift的設計強調統一的程式設計介面的多語言通訊框架。Avro出自Hadoop之父Doug Cutting, 在Thrift已經相當流行的情況下Avro的推出,其目標不僅是提供一套類似Thrift的通訊中介軟體更是要建立一個新的,標準性的雲端計算的資料交換和儲存的Protocol。 這個和Thrift的理念不同,Thrift認為沒有一個完美的方案可以解決所有問題,因此儘量保持一個Neutral框架,插入不同的實現並互相互動。而Avro偏向實用,排斥多種方案帶來的可能的混亂,主張建立一個統一的標準,並不介意採用特定的優化。Avro的創新之處在於融合了顯式,declarative的Schema和高效二進位制的資料表達,強調資料的自我描述,克服了以往單純XML或二進位制系統的缺陷。Avro對Schema動態載入功能,是Thrift程式設計介面所不具備的,符合了Hadoop上的Hive/Pig及NOSQL等即屬於Ad-Hoc(點對點)模式,又追求效能的應用需求。
目前階段Thrift比Avro支援的語言更豐富. Thrift: C++, C#, Cocoa, Erlang, Haskell, Java, Ocami, Perl, PHP, Python, Ruby, Smalltalk. Avro: C, C++, Java, Python, Ruby, PHP.
Schema處理方法截然不同: Thrift是一個面向程式設計的系統, 完全依賴於IDL->Binding Language的程式碼生成。 Avro支援2種方式。Avro-specific方式和Thrift的方式相似,依賴程式碼生成產生特定的類,並內嵌JSON Schema. Avro-generic方式支援Schema的動態載入,用通用的結構(map)代表資料物件,不需要編譯載入直接就可以處理新的資料來源。
Avro的Schema檔案有三種格式,依次是avdl,avpr,avsc,後兩種是json格式,avdl可以轉成avpr。 java -jar avroj-tools.jar idl src/test/idl/input/namespaces.avdl /tmp/namespaces.avpr
關於序列化: avro的機制,有更好的資料的透明度和可操作性,更高的儲存效率。 Thrift提供了多種序列化的實現: TCompactProtocol: 最高效的二進位制序列化協議,但並不是所有的繫結語言都支援。 TBinaryProtocol: 預設簡單二進位制序列化協議.
RPC服務: Avro提供了
HttpServer : 預設,基於Jetty核心的服務 NettyServer: 新的基於Netty的服務
Thrift提供了: TThreadPolServer: 多執行緒服務 TNonBlockingServer: 單執行緒 non blocking的服務 THsHaServer: 多執行緒 non blocking的服務
效能測試Benchmarking,兩者差相彷彿。
Conclusion: Thrift適用於程式對程式靜態的資料交換,要求schema預知並相對固定。
Avro在Thrift基礎上增加了對schema動態的支援且效能上不輸於Thrift。 Avro顯式schema設計使它更適用於搭建資料交換及儲存的通用工具和平臺,特別是在後臺。
目前Thrift的優勢在於更多的語言支援和相對成熟
比較分析結論: 基於以上三種框架比較分析,個人決定採用AVRO框架。
相關推薦
服務化實戰之 dubbo、dubbox、motan、thrift、grpc等RPC框架比較及選型
分布式系統 線程 ins tno 大小 實施 基礎設施 child shift 概述 前段時間項目
RPC框架比較
什麼是RPC: RPC(Remote Procedure Call Protocol)——遠端過程呼叫協議,它是一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。 簡言之,R
RPC框架效能基本比較測試
Wildfly是JBossAS改名後的JBoss應用伺服器,實現了完整的JavaEE規範。我們知道JavaEE中遠端RPC呼叫是在EJB規範中定義的。我們這裡就是要測試Wildlfy中的遠端EJB呼叫能力, 選用的Wildfly8.2是目前釋出的最新穩定版本。這個版本也支援埠多路服用,也就是EJB遠端呼叫是
GRPC 1.3.4 發布,Google 高性能 RPC 框架(Java C++ Go)
框架 9.png 高性能 修復 git ogl arch bsp 版本 GRPC 1.3.4 發布了,GRPC 是一個高性能、開源、通用的 RPC 框架,面向移動和 HTTP/2 設計,是由谷歌發布的首款基於 Protocol Buffers 的 RPC 框架。 GRPC
RPC框架研究(二)Hadoop源代碼-1
trac 挑戰 b2c ott 技術分享 style dsm mod spa 報名了阿裏中間件性能大賽,我來說是一個全新的挑戰。一切從空白學起,比賽的過程也是學習的過程 是的。想讓自己學好。給自己報一個比賽吧~ 就像當初學圍棋,也是報了圍棋比賽,為
RPC框架與分布式服務框架的區別
rpc第一:RPC框架是點對點的通信方式,即服務消費者與服務提供者是點對點通信第二;分布式服務框架,不近具有RPC框架的特性,同時,還包括以下特性: 1、提供多臺服務器提供服務,具有負載均衡策略 2、服務自動註冊,發布 3、具有服務的治理 。。。。。。。本文出自 “XEJ分布式工作室”
穩定性 耗時 監控原因分析-- dubbo rpc 框架 的線程池,io 連接模型. 客戶端,服務端
情況 現在 src tcp協議 時間 .cn 關系 1.0 繼續 上次 提到的Nagle算法特性有可能是dubbo調用”網絡耗時高“的始作俑者,後來又仔細看了下dubbo的代碼,發現dubbo在consumer端已經將tcp設置成非延遲(即關閉Nag
Netty自娛自樂之類Dubbo RPC 框架設計構想 【上篇】
哈哈 ebe cte proc 文件 num one lex round 之前在前一篇的《Netty自娛自樂之協議棧設計》,菜鳥我已經自娛自樂了設計協議棧,gitHub地址為https://github.com/vOoT/ncustomer-protocal。先這一篇中
簡易RPC框架-私有協議棧
rem nowrap adding document list highlight fine repl alt HTTP協議 客戶機與服務端之間的數據交互需要遵守一定的約定,比如協議版本,數據類型,是否有緩存,是否有壓縮等,只有在這些約定的基礎上才能相互之間愉快的
簡易RPC框架-心跳與重連機制
依賴 tile tegra port public row edi cat ice 心跳 就是告訴其它人自己還活著。在簡易RPC框架中,采用的是TCP長連接,為了確保長連接有效,就需要客戶端與服務端之間有一種通知機制告知對方的存活狀態。 如何實現 客戶端發
簡易RPC框架-過濾器機制
sym vbo else on() alias dcb nac urb min 過濾器 字面義上理解的過濾器類似下圖,從一堆物品中篩選出符合條件的留下,不符合的丟棄。 GOF 職責鏈 GOF中有一種設計模式叫職責鏈,或者叫責任鏈,常規的UML圖如下:
一個簡單的基於BIO的RPC框架
簡單的 png 1-1 -s github 幫助 spa 兩個類 還需 github地址:https://github.com/Luyu05/BioRpcExample PART1:先來整體看下項目的構成 其中bio-rpc-core就是所謂的rpc框架 bio-rp
JAVA中幾種常用的RPC框架介紹
github 不同的 target int https love num 分布 有一個 RPC是遠程過程調用的簡稱,廣泛應用在大規模分布式應用中,作用是有助於系統的垂直拆分,使系統更易拓展。Java中的RPC框架比較多,各有特色,廣泛使用的有RMI、Hessian、Du
基於Spring開發的一個BIO-RPC框架(對小白很友好)
instance 啟動項 jar包 pan 發現 就是 遠程 map 配置 PART1:先來整體看下項目的構成 其中bio-rpc-core就是所謂的rpc框架 bio-rpc-example-client即所謂的服務調用方(你的項目中想要調用服務的地方) bio-rp
輕量級分布式 RPC 框架
rap 系統 內容 oot fio del scan ans iteye RPC,即 Remote Procedure Call(遠程過程調用),說得通俗一點就是:調用遠程計算機上的服務,就像調用本地服務一樣。 RPC 可基於 HTTP 或 TCP 協議,Web Servi
Hadoop RPC框架
階段 none order 網絡異常 mat pro resp 邏輯 實現原理 1、RPC框架概述 1.1 RPC(Remote Procedure Call
三百行代碼完成一個簡單的rpc框架
rpc dubbo demo 花了半天的時間寫了個簡單的rpc框架,是因為我最初看dubbo源碼的時候發現dubbo雖然看起來很龐大,但是隱隱約約總感覺,其實其絕大多數功能,都是基於可擴張性和服務治理的需要而編寫的。我看過dubbo和grpc的源碼,這兩個都是非常優秀的rpc框架,但是為了讓初學r
分布式架構探索 - 2. WebService RPC框架之Apache CXF
tomcat7 als cti nvi urn lap add ring mod Apache CXF是一個開源的WebService RPC框架。 例子: 1. 新建一個maven web項目, 添加pom 如下: <?xml version="1.0"
集合框架比較
value 分享 code rop key 安全 http alt 集合框架 集合框架可以分為Collection和Map Collection Set:元素不重復(底層是Map) HashSet 集合中元素可以為null,但只有一個元素為null 基於HashMap
[development][thrift] RPC框架 thrift
ava dev clas work 例如 ibm per eth -a wiki:https://zh.wikipedia.org/wiki/Thrift 來自IBM的介紹:https://www.ibm.com/developerworks/cn/java/j-lo-