亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

看看thrift 是怎么玩的

系統(tǒng) 3773 0

1. 基本名詞

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

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

? ? ?Protocal: 數(shù)據(jù)需要有一種方式來使用對應的傳輸層的code,而不用關心傳輸層的具體實現(xiàn)細節(jié)。

? ? ?Versioning:數(shù)據(jù)需要有自己的版本號來實現(xiàn)對應的健壯性。

? ? ?Processing : 產(chǎn)生code來完成RPC調(diào)用。

2. 類型

? ? 1. Goals:?

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

? ? ? ? ?2. 不使用動態(tài)數(shù)據(jù)類型,也不需要開發(fā)者寫對象序列化或者傳輸?shù)拇a(已經(jīng)封裝)。

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

? ? 2. Base Types:

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

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

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

? ? 3. Structs:

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

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

? ? ?4. Container:

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

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

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

? ? ?5. Exceptions:

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

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

? ? ?6. Services:

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

? ? ? ? ? ?2. 在每一個函數(shù)前面可以加上async關鍵字,這個關鍵字能夠?qū)崿F(xiàn)對應的一部方法。

? ? ? ? ? ?3. 一個純void函數(shù)也會返回一個response,用來保證該操作在服務端已經(jīng)被執(zhí)行。

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

3. Transport

? ? ? 1. 接口

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

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

? ? ? ? ? ? 3. 需要滿足的基本功能:如何讀寫數(shù)據(jù),不管是在網(wǎng)絡中,還是共享內(nèi)存,還是從磁盤文件中讀寫。

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

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

? ? ? ?2. 實現(xiàn)

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

? ? ? ? ? ? 2. TFileTransport類實現(xiàn)了一個抽象接口,用于將磁盤文件導入到數(shù)據(jù)流中。

? ? ? ?3. Utilities

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

4. Protocal

? ? ? ? ?1. 接口

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

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

? ? ? ? ?2. 結構

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

? ? ? ? ?3. 實現(xiàn)

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

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

5.Versioning

? ? ? ?1. 域標志符

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

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

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

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

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

? ? ? ?2. Isset

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

? ? ? ? 3. 場景分析

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

? ? ? ? ?4. Protocal/Transport Versioning

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

6. RPC 實現(xiàn)

? ? ? ? 1. TProcessor

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

? ? ? ? 2. Generated code

? ? ? ? ? ? ? ? ?2. 自動生成client端和server端的調(diào)用接口。

? ? ? ? 3. TServer

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

? ? ? ? ? ? ? ? ?2. 開發(fā)者可以實現(xiàn)自己的TServer。

7. 實現(xiàn)細節(jié)

? ? ? ? ?1. 目標語言

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

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

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

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

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

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

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

? ? ? ? ? 5. 線程模型

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

? ? ? ? ? ? ? ? 2. 每個線程是一個對象,提供了Runnerable接口供使用,Synchronized關鍵字實現(xiàn)類似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可以實現(xiàn)對應的結構化logging, 這個logging日志可以用來做線上和線下的處理,可以作為redo log。

看看thrift 是怎么玩的


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 一区二区国产在线播放 | 欧美成人午夜在线全部免费 | 亚洲精品久久国产小说 | 99热久久这里只有精品2010 | 久久97精品久久久久久清纯 | 欧美午夜精品一区二区三区 | 色综合久久88色综合天天小说 | 114一级毛片免费观看 | 色综合视频在线 | 在线观看一级毛片免费 | 在线性视频 | 欧美成人免费观看的 | 久久精品94精品久久精品 | 国产精品久久精品福利网站 | 色图综合网 | 国产在线激情视频 | 人人爱操 | 香蕉国产一区二区 | 国产精品柳州莫菁身材四 | 国产精品亚洲精品一区二区三区 | 变态捡到女婴h养成调教 | 91尤物视频| 毛茸茸性毛茸茸大b | 一级特级aaa毛片 | 97人人视频 | 久久久久久夜精品精品免费 | 精品无码久久久久久久动漫 | 一区二区不卡在线观看 | 精品在线99| 五月婷婷开心综合 | 国语性猛交xxxx乱大交 | 在线日产一区二区 | 2020年国产高中毛片在线视频 | 一区二区三区高清不卡 | 男人的天堂久久精品激情 | 国产日韩欧美综合一区二区三区 | 亚洲精品一区二区伦理 | 夜夜操网站 | 一区二区免费看 | 亚洲国产精品悠悠久久琪琪 | 青青青精品免费视频 |