一.簡介
??? 定義:Thrift是facebook開發出的一個
軟件庫
和一組
代碼生成工具
,以加快高效率、可擴展的后端服務的開發與實現的速度。
??? 使用:先在一個單獨的語言無關的文件中定義數據類型和服務接口,再用生成器生成代碼,最后可以根據需要添加和修改生成代碼(可能用到Thrift的庫)。
??? 特色:多語言支持、庫和代碼生成器帶來的高效率。
?
二.基礎組件
??? 包括:類型、傳輸、協議、版本化和處理器
2.類型
??? 2.1.基本類型:bool,byte,i16,i32,i64,double,string
??? 2.2.結構體:使用關鍵字struct定義
??? 2.3.容器:list<type>,set<type>,Map<type1,type2>
??? 2.4.異常:使用關鍵字exception定義
??? 2.5.服務:使用關鍵字service定義
3.傳輸
??? 3.1.接口:TTransport,TServerTransport
??? 3.2.實現:TSocket,TFileTransport,Utilities(TBufferdTransport,TFramedTransport和
????????????????? TMemoryBuffer)
4.協議:
??? 4.1.接口:雙向有序的消息傳遞
???????????????? 基本類型、容器及結構體的編碼
??? 4.2.結構:Thrift協議是自定界的,沒有任何成幀,且不論編碼格式。
????????????????? 如需成幀可使用TFramedTransport來完成。
??? 4.3.實現:所有數據按一種扁平的二進制格式來寫的。
5.版本化:
??? 5.1.域標識符:在語言無關文件中的變量前的數字,自動添加的是從-1開始的負數
??? 5.2.lsset:用于對待預料之外的域
??? 5.3.案例分析:主要是客戶端和服務器新舊不匹配
??? 5.4.協議/傳輸版本化
6.遠程過程調用實現:
??? 6.1.TProcessor:核心接口,有bool process(TProtocol in,TProtocol out)
??? 6.2.生成代碼:特別提示下,內部會生成相應的Client類
??? 6.3.TServer:類型有TSimpleServer,TThreadedServer和TThreadPoolServer。
?
三.其他
7.實現細節
??? 7.1.目標語言:C++,Java,Python,Ruby和PHP。
??? 7.2.生成的結構體
??? 7.3.RPC方法識別
??? 7.4.服務器和多線程:Thrift實現了自己的多線程庫
??? 7.5.線程原語:命名空間facebook::thirft::concurrency中實現了Thrift線程庫:
?????????????????????? primitives,thread pool manager,timer manager。
????????????????? boost::shared_ptr,Mutex類,Condition類和Monitor類。
????????????????? 借用Java中thread(線程對象)和runnable(線程執行邏輯)的區別的經驗。
??? 7.6.Thread,Runnable and shared_ptr
??? 7.7.ThreadManager
??? 7.8.TimerManager
??? 7.9.非阻塞操作:Thrift基于libevent和TFramedTransport。
??? 7.10.編譯器
??? 7.11.TFileTransport
8.Facebook的Thrift服務:
??? Facebook中已大量使用Thrift,包括搜索、日志、手機、廣告和開發者平臺。
9.總結:
??? 使用Thrift可以讓工程師們分而治之的將功能進行劃分并可采用合適的語言類實現,而不用在編寫重復的代碼。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
