欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

看看thrift 是怎么玩的

系統 3354 0

1. 基本名詞

? ? ?Types: 為了滿足多語言平臺的要求,需要提供基本數據類型來進行轉換。比如在C++的Map和Python的Dict之間能夠相互轉換。

? ? ?Transport: 對于每一種語言,都應該有一個抽象的公共層來完成對應的雙向數據傳輸。

? ? ?Protocal: 數據需要有一種方式來使用對應的傳輸層的code,而不用關心傳輸層的具體實現細節。

? ? ?Versioning:數據需要有自己的版本號來實現對應的健壯性。

? ? ?Processing : 產生code來完成RPC調用。

2. 類型

? ? 1. Goals:?

? ? ? ? ?1. 使用最基本的數據類型,不管上層使用怎么樣的編程語言。

? ? ? ? ?2. 不使用動態數據類型,也不需要開發者寫對象序列化或者傳輸的代碼(已經封裝)。

? ? ? ? ?3. IDL 用來告訴代碼生成器如何在多語言之上安全地傳輸數據。

? ? 2. Base Types:

? ? ? ? ?1. 選取了大多數語言中都存在的基本數據類型,忽略了一些語言中特別的類型。(無符號類型), 所有的基本

? ? ? ? ? ? 類型都是有符號的。

? ? ? ? ?2. 基本類型包括bool, byte,i16,i32,i64,double,string。

? ? 3. Structs:

? ? ? ? ? 1. ? 提供了一種common的對象來代表面向對象語言中的對象類型,每一個filed都有一個標志符。

? ? ? ? ? 2. ? 每個filed必須有一個標志符和一個給定的默認值。標志符如果沒有給定的話,會自動分配一個,但是強烈建議給定標志符,為了方便版本控制。

? ? ?4. Container:

? ? ? ? ? 1. ?List, set, Map。其中List被翻譯成STL中的vector, 或者Java中的ArrayList,set和map類似。

? ? ? ? ? 2. ?要求對應的基本語言類型支持對應的Thrift的基本數據類型。

? ? ? ? ? 3. ?在每一種目標語言中,對于每一種定義的類型,生成兩個接口,read和write,用于序列化和傳輸對應的數據結構。

? ? ?5. Exceptions:

? ? ? ? ? 1. 使用Exception關鍵字來代替對應的structs關鍵字,得到對應的基本類。

? ? ? ? ? 2. 生成的對象繼承自每一種語言中的對應的Exception的基類。

? ? ?6. Services:

? ? ? ? ? ?1. 提供了服務端的接口調用,通過代碼生成器會生成Client端和Server端的樁函數接口,共上層調用使用。

? ? ? ? ? ?2. 在每一個函數前面可以加上async關鍵字,這個關鍵字能夠實現對應的一部方法。

? ? ? ? ? ?3. 一個純void函數也會返回一個response,用來保證該操作在服務端已經被執行。

? ? ? ? ? ?4. async call只保證消息在傳輸層是沒有問題的,因此,在使用async的時候需要保證當前的使用環境對于丟包是可以接受的。

3. Transport

? ? ? 1. 接口

? ? ? ? ? ? 1. 傳輸層用來促進數據傳輸。一個關鍵的設計是Thrift將數據傳輸層和代碼生成器分開。

? ? ? ? ? ? 2. 由于抽象的IO炒作產生的tradoff相比起實際的IO操作顯得微不足道。

? ? ? ? ? ? 3. 需要滿足的基本功能:如何讀寫數據,不管是在網絡中,還是共享內存,還是從磁盤文件中讀寫。

? ? ? ? ? ? 4. 提供的接口如下:open, close,isOpen, read, write, flush。還有一些用于batch操作的接口

? ? ? ? ? ? 5. 對于TServerTransport,還有接口用來創建對應的Transport對象。如open, listen, accept, close。

? ? ? ?2. 實現

? ? ? ? ? ? 1. TSocket 類對于TCP/IP的流式套接字實現了一個通用,簡單的接口。

? ? ? ? ? ? 2. TFileTransport類實現了一個抽象接口,用于將磁盤文件導入到數據流中。

? ? ? ?3. Utilities

? ? ? ? ? ? 1. 網絡傳輸層設計的支持簡單的擴展,比如組合,TBufferdTransport實現在傳輸層實現了buffer的功能,TFrameTransport實現了數據頭定長大小,用于Noblocking傳輸。TMemoryBuffer允許讀和寫直接在進程的堆頂完成。

4. Protocal

? ? ? ? ?1. 接口

? ? ? ? ? ? ? ?1. 另外一塊主要的部分是thrift中將數據結構和傳輸層分離,thrift定義了一些傳輸時的基本類型,但是沒有強制定義需要實現的編碼格式,只要能被代碼生成器識別就好。

? ? ? ? ? ? ? ? 2. ?thrift協議的接口簡單明了,支持兩種功能:雙向有序的消息,基本類型,容器,結構的編碼。

? ? ? ? ?2. 結構

? ? ? ? ? ? ? ? 1. Thrift中默認使用流式結構來傳輸對應的協議,這樣避免了因為需要分片或者在發送前整體計算帶來的性能損失。當有的場景需要使用分片,或者分片的性能優勢更加明顯的時候,可以使用TFramedTransport這個抽象接口類。

? ? ? ? ?3. 實現

? ? ? ? ? ? ? ? ?1. Thrift的實現了一個空間高效的二進制協議,所有的數據都以一個扁平的二進制格式存在,整形被轉換為網絡字節序,字符串在頭上加上它的長度,所有的消息和field 頭都用它的整數序列號,忽略這些filed中的字符串名字。

? ? ? ? ? ? ? ? ?2. 我們沒有做過多的性能優化,為了代碼的整潔和高效。如果有需要,可以加入這些優化方案。

5.Versioning

? ? ? ?1. 域標志符

? ? ? ? ? ? 1. Thrift在版本控制上面是健壯的,它可以接受舊客戶端過來的請求并正確處理。

? ? ? ? ? ? 2. Thrift中的版本控制是通過域標志符來確定的,thrift結構中的每一項前面都有一個對應的標志符,標志符和數據類型唯一化開item。

? ? ? ? ? ? 3. 為了避免沖突,自動分配的標志符從-1開始遞減,人工定義的標志符只能為整數。

? ? ? ? ? ? 4. 在數據是自定義的前提下,當反序列化的時候,thrift的code 生成器可以根據標識符來判斷讀取到的數據是否對齊,也可以跳過不能識別的域,保證兼容性。

? ? ? ? ? ? 5. 域標志符也可以在參數列表中聲。

? ? ? ?2. Isset

? ? ? ? ? ? ?1. 用來標注必須存在于結構體中的域,如果必須存在,標注為true,這樣可以當該域不存在的時候,可以通知上層調用者。

? ? ? ? 3. 場景分析

? ? ? ? ? ? ? 1. 4種場景,加減域/新舊client或者server。

? ? ? ? ?4. Protocal/Transport Versioning

? ? ? ? ? ? ? ?1. 實現了TProtocal的抽象接口,用來讓協議的實現自己來管理版本。

6. RPC 實現

? ? ? ? 1. TProcessor

? ? ? ? ? ? ? ? 1. 核心類,抽象出client和server的基類,核心功能是處理input和output。

? ? ? ? 2. Generated code

? ? ? ? ? ? ? ? ?2. 自動生成client端和server端的調用接口。

? ? ? ? 3. TServer

? ? ? ? ? ? ? ? ?1. Tserver 可以有多種實現,來滿足不同的需求。如單線程的TSimpleServer, 每個連接一個線程的TThreadedServer, 還有基于線程庫的TThreadPoolServer.

? ? ? ? ? ? ? ? ?2. 開發者可以實現自己的TServer。

7. 實現細節

? ? ? ? ?1. 目標語言

? ? ? ? ? ? ? ? 1. C++, Java, Python, Ruby, PHP

? ? ? ? ? ? ? ? 2. 盡可能簡單的抽象,保留在每一種語言中可以自主開發的空間。

? ? ? ? ?2. 生成的結構體

? ? ? ? ?3. RPC 方法定義

? ? ? ? ? ? ? ? 1. RPC call中的方法用string去實現,用一些手段將字符處理的代價盡可能的減少,同時方便編程實現。

? ? ? ? ?4. 服務器和多線程

? ? ? ? ? ? ? ? 1. 因為種種原因,沒有采用boost的線程庫,也沒有采用ACE,自己實現了一套機制。

? ? ? ? ? 5. 線程模型

? ? ? ? ? ? ? ? 1. thfirt的線程庫包括三個部分:primitives, thread pool manager, timer manager

? ? ? ? ? ? ? ? 2. 每個線程是一個對象,提供了Runnerable接口供使用,Synchronized關鍵字實現類似java的同步塊功能。

? ? ? ? ? ?6. Thread,Runnable, and shared_ptr

? ? ? ? ? ?7. ThreadManager

? ? ? ? ? ?8. TimeManager

? ? ? ? ? ?9. NonBlocking Operation

? ? ? ? ? ?10. 編譯器

? ? ? ? ? ?11. TFileTransport

8. Facebook thrift service

? ? ? ? ? ?1. Search&&logging

? ? ? ? ? ? ? ? 1. TFileTransport可以實現對應的結構化logging, 這個logging日志可以用來做線上和線下的處理,可以作為redo log。

看看thrift 是怎么玩的


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!?。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产三级在线视频播放线 | 国产成人aaa在线视频免费观看 | 国产在线精品一区 | 51色视频| 国产羞羞视频免费在线观看 | 久久久国产精品 | 最新一区二区三区 | 国产欧美性综合视频性刺激 | 国产成人精品福利站 | 久久成人一区 | 久久久久国产精品人 | 国产精品天天天天影视 | 亚洲一区二区三区影院 | 国内精品视频区在线2021 | 中文字幕在线一区二区三区 | 国产成人lu在线视频 | 九九伊在人线 | 国产无遮挡一级毛片 | 国产你懂得 | 久草在在线 | 小草社区影院 | 经典香港一级a毛片免费看 亚洲精品国产精品国自产观看 | 国产精品国产三级国产aⅴ中文 | 欧美激情综合色综合啪啪五月 | 亚洲乱人伦在线 | 日本中文字幕电影 | 免费成人电影在线 | 久草热在线视频 | 欧美美女动态图 | 精品免费久久久久久成人影院 | 日韩在线视频一区 | 日韩免费在线观看视频 | 欧美黄色片一级 | 色中色综合网 | 色综合久久久久久久久五月性色 | 精品粉嫩aⅴ一区二区三区四区 | 欧美一级艳片视频免费观看 | 国产主播在线看 | 狠狠干天天干 | 成人三级视频 | 亚洲毛片无码专区亚洲A片 日本高清www午色夜黄 |