<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Facebook之Thrift簡介

       

      我的新浪微博:http://weibo.com/freshairbrucewoo。

       

      歡迎大家相互交流,共同提高技術。

       

       

       

      以下內容是從網上各處簡單整理而來,因為前段時間自己一直在研究Thrift,把研究的一點資料分享給需要的同行中人!

       

      第一節 RPC技術及實現簡介

       

      首先思考一下分布式系統中的 RPC (Remote Procedure Call) 問題,一個完整的 RPC 模塊需要可以分為三個層次

       

      · 服務層(service):RPC 接口定義與實現

       

      · 協議層(protocol):RPC 報文格式和數據編碼格式

       

      · 傳輸層(transport):實現底層的通信(如 socket)以及系統相關的功能(如事件循環、多線程)

       

      在實際的大型分布式系統中,不同的服務往往會使用不同的語言來實現,所以一般的 RPC 系統會提供一種跨語言的過程調用功能,比如一段用C++實現的客戶端代碼可以遠程調用一個用 Java 實現的服務。實現跨語言 RPC 有兩種方法

       

      · 靜態代碼生成:開發者用一種中間語言(IDL,接口定義語言)來定義 RPC 的接口和數據類型,然后通過一個編譯器來生成不同語言的代碼(如C++, Java, Python),并由生成的代碼來負責 RPC 協議層和傳輸層的實現。例如,服務的實現用C++,則服務端需要生成實現RPC協議和傳輸層的C++代碼,服務層使用生成的代碼來實現與客戶端的通信;而如果客戶端用 Python,則客戶端需要生成Python代碼。

       

      · 基于自省的動態類型系統來實現:協議和傳輸層可以只用一種語言實現成一個庫,但是這種語言需要關聯一個具備自省或者反射機制的動態類型系統,對外提供其他語言的綁定,客戶端和服務端通過語言綁定來使用 RPC。比如,可以考慮用 C GObject 實現一個 RPC 庫,然后通過 GObject 實現其他語言的綁定。

       

      第一種方法的優點是RPC的協議層和傳輸層的實現不需要和某種動態類型系統(如GObject)綁定在一起,同時避免了動態類型檢查和轉換,程序效率比較高,但是它的缺點是要為不同語言提供不同的 RPC 協議層和傳輸層實現。第二種方法的主要難度在于語言綁定和通用的對象串行化機制的實現,同時也需要考慮效率的問題。

       

      Thrift 是一個基于靜態代碼生成的跨語言的RPC協議棧實現,它可以生成包括C++, Java, Python, Ruby, PHP 等主流語言的代碼,這些代碼實現了 RPC 的協議層和傳輸層功能,從而讓用戶可以集中精力于服務的調用和實現。Cassandra 的服務訪問協議是基于 Thrift 來實現的。

       

      第二節 thrift介紹

       

      Thrift源于大名鼎鼎的facebook之手,在2007facebook提交Apache基金會將Thrift作為一個開源項目,對于當時的facebook來說創造thrift是為了解決facebook系統中各系統間大數據量的傳輸通信以及系統之間語言環境不同需要跨平臺的特性。所以thrift可以支持多種程序語言,例如: C++, C#, Cocoa, Erlang, Haskell, Java, Ocami, Perl, PHP, Python, Ruby, Smalltalk. 在多種不同的語言之間通信thrift可以作為二進制的高性能的通訊中間件,支持數據(對象)序列化和多種類型的RPC服務。Thrift適用于程序對程 序靜態的數據交換,需要先確定好他的數據結構,他是完全靜態化的,當數據結構發生變化時,必須重新編輯IDL文件,代碼生成,再編譯載入的流程,跟其他IDL工具相比較可以視為是Thrift的弱項,Thrift適用于搭建大型數據交換及存儲的通用工具,對于大型系統中的內部數據傳輸相對于JSONxml無論在性能、傳輸大小上有明顯的優勢。

       

      Thrift 主要由5個部分組成

       

      · 類型系統以及 IDL 編譯器:負責由用戶給定的 IDL 文件生成相應語言的接口代碼

       

      · TProtocol:實現 RPC 的協議層,可以選擇多種不同的對象串行化方式,如 JSON, Binary。

       

      · TTransport:實現 RPC 的傳輸層,同樣可以選擇不同的傳輸層實現,如socket, 非阻塞的 socket, MemoryBuffer 等。

       

      · TProcessor:作為協議層和用戶提供的服務實現之間的紐帶,負責調用服務實現的接口。

       

      · TServer:聚合 TProtocol, TTransport TProcessor 幾個對象。

       

      上述的這5個部件都是在 Thrift 的源代碼中通過為不同語言提供庫來實現的,這些庫的代碼在 Thrift 源碼目錄的 lib 目錄下面,在使用 Thrift 之前需要先熟悉與自己的語言對應的庫提供的接口。

       

      第三節 使用thrift的項目

       

      1 Thrift用于Quara系統后端數據的通信,服務端是用C++來實現的,客戶端則是python。

       

      Quara背景:Quara是在線問答服務公司,類似新浪微博和百度知道的合體,消息靈通人士透露,去年Quara獲得了1400萬美元投資,目前他們只有9名員工。

       

      2Thrift用于在多種Evernote API平臺開發的客戶端與Evernote服務器之間的通信與數據傳輸,Evernote API定義了自己的Evernote Data Access and Management (EDAM) 協議規范,讓客戶端使用更小的網絡帶寬上傳、下載文件和在線即時搜索服務。

       

      Evernote 背景:EverNote是一款非常著名的免費軟件,它最大的特點就是支持多平臺,而且數據能通過網絡互相同步。譬如說,你可以隨時在手機上的Evernote新增筆記,回家后在電腦上也能看到它了!

       

      3HBase 中的Thrift:Thrift用于HBase中是為了提供跨平臺的服務接口,在HBase 中可以使用[hbase-root]/bin/hbase thrift start 命令啟動涵蓋ThriftHBase服務端,客戶端通過thrift的命令生成不同版本的客戶端代碼,根據定義的數據格式,對遠程HBase服務端進行操作,是除了REST遠程方法調用的另一種途徑。

       

      4)其他系統:如facebookscribe系統、淘寶的timetunnel系統和Hive等等。

       

      posted @ 2012-01-15 00:04  薔薇理想人生  閱讀(11386)  評論(3)    收藏  舉報
      主站蜘蛛池模板: 米奇亚洲国产精品思久久| 亚洲欧美日韩人成在线播放| 国产高清午夜人成在线观看,| 成人精品自拍视频免费看| 色就色中文字幕在线视频| 囯产精品久久久久久久久久妞妞| 狠狠色狠狠色综合| 精品人妻午夜福利一区二区| 久久国产精品成人免费| 欧洲精品色在线观看| 一本精品99久久精品77| 国产精品久久欧美久久一区| 国产精品视频午夜福利| 国产天美传媒性色av高清| 黑人大群体交免费视频| 国产精品疯狂输出jk草莓视频| 新余市| 99久久精品费精品国产一区二| 精品无码国产一区二区三区AV| 亚洲第一福利网站在线| 亚洲人成人一区二区三区| 国产女主播喷水视频在线观看| 色熟妇人妻久久中文字幕| 熟女一区二区中文字幕| 99久久无码私人网站| 久久久久久亚洲精品成人| 中文字幕乱码人妻二区三区| 亚洲av专区一区| 人妻内射一区二区在线视频| 亚洲人午夜射精精品日韩| 亚洲欧美日韩在线码| 精品无码午夜福利理论片| 内射人妻视频国内| 中文字幕日韩精品有码| 国产精品一区二区三区卡| 中文字幕国产在线精品| 午夜国产精品福利一二| 久久精品熟女亚洲av麻| 最新午夜男女福利片视频| 久章草这里只有精品| 清涧县|