乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      RPC框架比較

       quasiceo 2016-07-14
      什么是RPC:
      RPC(Remote Procedure Call Protocol)——遠程過程調(diào)用協(xié)議,它是一種通過網(wǎng)絡(luò)從遠程計算機程序上請求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。
      簡言之,RPC使得程序能夠像訪問本地系統(tǒng)資源一樣,去訪問遠端系統(tǒng)資源。
      比較關(guān)鍵的一些方面包括,通訊協(xié)議,序列化,資源(接口)描述,服務(wù)框架,性能,語言支持等。

      典型RPC調(diào)用框架:
      RPC的實現(xiàn)和調(diào)用框架,五花八門,簡單介紹其中幾種比較典型的:
      RMI,利用java.rmi包實現(xiàn),基于Java遠程方法協(xié)議(Java Remote Method Protocol) 和java的原生序列化。

      Hessian,是一個輕量級的remoting onhttp工具,使用簡單的方法提供了RMI的功能。 基于HTTP協(xié)議,采用二進制編解碼。

      protobuf-rpc-pro,是一個Java類庫,提供了基于 Google 的 Protocol Buffers 協(xié)議的遠程方法調(diào)用的框架?;?Netty 底層的 NIO 技術(shù)。支持 TCP 重用/ keep-alive、SSL加密、RPC 調(diào)用取消操作、嵌入式日志等功能。

      Thrift,是一種可伸縮的跨語言服務(wù)的軟件框架。它擁有功能強大的代碼生成引擎,無縫地支持C + +,C#,Java,Python和PHP和Ruby。thrift允許你定義一個描述文件,描述數(shù)據(jù)類型和服務(wù)接口。依據(jù)該文件,編譯器方便地生成RPC客戶端和服務(wù)器通信代碼。
      最初由facebook開發(fā)用做系統(tǒng)內(nèi)個語言之間的RPC通信,2007年由facebook貢獻到apache基金 ,現(xiàn)在是apache下的opensource之一 。支持多種語言之間的RPC方式的通信:php語言client可以構(gòu)造一個對象,調(diào)用相應(yīng)的服務(wù)方法來調(diào)用java語言的服務(wù),跨越語言的C/S RPC調(diào)用。底層通訊基于SOCKET。

      Avro,出自Hadoop之父Doug Cutting, 在Thrift已經(jīng)相當(dāng)流行的情況下推出Avro的目標(biāo)不僅是提供一套類似Thrift的通訊中間件,更是要建立一個新的,標(biāo)準性的云計算的數(shù)據(jù)交換和存儲的Protocol。支持HTTP,TCP兩種協(xié)議。

      RPC調(diào)用框架的過程原理基本類似,以Thrift為例
      Thrift 協(xié)議棧以及各層的使用(java 為例)
      1、model interface
      服務(wù)的調(diào)用接口以及接口參數(shù)model、返回值model

      2、Tprotocol 協(xié)議層
      將數(shù)據(jù)(model)編碼 、解碼

      3、Ttramsport 傳輸層
      編碼后的數(shù)據(jù)傳輸(簡單socket、http)

      5、Tserver
      服務(wù)的Tserver類型,實現(xiàn)了幾種rpc調(diào)用(多線程、單線程非阻塞IO、多線程非阻塞IO)

      RPC調(diào)用框架比較:

      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支持服務(wù)的異常。

      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在序列化/反序列化、傳輸上性能更優(yōu)。

      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服務(wù)實現(xiàn)(多線程socket、單線程非阻塞的socket、多線程非阻塞socket)

      6、And according to the wiki the Thrift runtime doesn't run on Windows.
      thrift 對有些語言在windows上不支持:C++
      摘選自:http://gemantic./blog/1199214 thrift的使用介紹

      Apache Avro 與 Thrift 比較
      文章有比較詳細的對比,值得仔細研讀。摘部分內(nèi)容,如下。
      Avro和Thrift都是跨語言,基于二進制的高性能的通訊中間件。它們都提供了數(shù)據(jù)序列化的功能和RPC服務(wù)。總體功能上類似,但是哲學(xué)不一樣。
      Thrift出自Facebook用于后臺各個服務(wù)間的通訊,Thrift的設(shè)計強調(diào)統(tǒng)一的編程接口的多語言通訊框架。Avro出自Hadoop之父Doug Cutting, 在Thrift已經(jīng)相當(dāng)流行的情況下Avro的推出,其目標(biāo)不僅是提供一套類似Thrift的通訊中間件更是要建立一個新的,標(biāo)準性的云計算的數(shù)據(jù)交換和存儲的Protocol。
      這個和Thrift的理念不同,Thrift認為沒有一個完美的方案可以解決所有問題,因此盡量保持一個Neutral框架,插入不同的實現(xiàn)并互相交互。而Avro偏向?qū)嵱?,排斥多種方案帶來的可能的混亂,主張建立一個統(tǒng)一的標(biāo)準,并不介意采用特定的優(yōu)化。Avro的創(chuàng)新之處在于融合了顯式,declarative的Schema和高效二進制的數(shù)據(jù)表達,強調(diào)數(shù)據(jù)的自我描述,克服了以往單純XML或二進制系統(tǒng)的缺陷。Avro對Schema動態(tài)加載功能,是Thrift編程接口所不具備的,符合了Hadoop上的Hive/Pig及NOSQL等即屬于Ad-Hoc(點對點)模式,又追求性能的應(yīng)用需求。

      目前階段Thrift比Avro支持的語言更豐富.
      Thrift: C++, C#, Cocoa, Erlang, Haskell, Java, Ocami, Perl, PHP, Python, Ruby, Smalltalk.
      Avro: C, C++, Java, Python, Ruby, PHP.

      Schema處理方法截然不同:
      Thrift是一個面向編程的系統(tǒng), 完全依賴于IDL->Binding Language的代碼生成。
      Avro支持2種方式。Avro-specific方式和Thrift的方式相似,依賴代碼生成產(chǎn)生特定的類,并內(nèi)嵌JSON Schema. Avro-generic方式支持Schema的動態(tài)加載,用通用的結(jié)構(gòu)(map)代表數(shù)據(jù)對象,不需要編譯加載直接就可以處理新的數(shù)據(jù)源。

      Avro的Schema文件有三種格式,依次是avdl,avpr,avsc,后兩種是json格式,avdl可以轉(zhuǎn)成avpr。
      java -jar avroj-tools.jar idl src/test/idl/input/namespaces.avdl /tmp/namespaces.avpr

      關(guān)于序列化:
      avro的機制,有更好的數(shù)據(jù)的透明度和可操作性,更高的存儲效率。
      Thrift提供了多種序列化的實現(xiàn):
      TCompactProtocol: 最高效的二進制序列化協(xié)議,但并不是所有的綁定語言都支持。
      TBinaryProtocol: 缺省簡單二進制序列化協(xié)議.

      RPC服務(wù):
      Avro提供了
      HttpServer : 缺省,基于Jetty內(nèi)核的服務(wù)
      NettyServer: 新的基于Netty的服務(wù)

      Thrift提供了:
      TThreadPolServer: 多線程服務(wù)
      TNonBlockingServer: 單線程 non blocking的服務(wù)
      THsHaServer: 多線程 non blocking的服務(wù)

      性能測試Benchmarking,兩者差相仿佛。

      Conclusion:
      Thrift適用于程序?qū)Τ绦蜢o態(tài)的數(shù)據(jù)交換,要求schema預(yù)知并相對固定。

      Avro在Thrift基礎(chǔ)上增加了對schema動態(tài)的支持且性能上不輸于Thrift。
      Avro顯式schema設(shè)計使它更適用于搭建數(shù)據(jù)交換及存儲的通用工具和平臺,特別是在后臺。

      目前Thrift的優(yōu)勢在于更多的語言支持和相對成熟

      比較分析結(jié)論:
      基于以上三種框架比較分析,個人決定采用AVRO框架。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多