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

看看thrift 是怎么玩的

系統(tǒng) 3198 0

1. 基本名詞

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

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

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

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

? ? ?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都有一個標(biāo)志符。

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

? ? ?4. Container:

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

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

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

? ? ?5. Exceptions:

? ? ? ? ? 1. 使用Exception關(guān)鍵字來代替對應(yīng)的structs關(guān)鍵字,得到對應(yīng)的基本類。

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

? ? ?6. Services:

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

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

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

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

3. Transport

? ? ? 1. 接口

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

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

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

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

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

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

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

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

? ? ? ?3. Utilities

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

4. Protocal

? ? ? ? ?1. 接口

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

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

? ? ? ? ?2. 結(jié)構(gòu)

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

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

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

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

5.Versioning

? ? ? ?1. 域標(biāo)志符

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

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

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

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

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

? ? ? ?2. Isset

? ? ? ? ? ? ?1. 用來標(biāo)注必須存在于結(jié)構(gòu)體中的域,如果必須存在,標(biāo)注為true,這樣可以當(dāng)該域不存在的時候,可以通知上層調(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)細(xì)節(jié)

? ? ? ? ?1. 目標(biāo)語言

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

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

? ? ? ? ?2. 生成的結(jié)構(gòu)體

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

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

? ? ? ? ?4. 服務(wù)器和多線程

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

? ? ? ? ? 5. 線程模型

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

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

看看thrift 是怎么玩的


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美日韩99| 国产精品久久久久久久久鸭 | 欧美一级黄色片在线观看 | 久草手机在线观看 | 久久亚洲精品中文字幕二区 | 九九九精品在线观看 | 成人精品视频在线观看 | 99视频在线国产 | 国产91福利在线精品剧情尤物 | 日本三级带日本三级带黄首页 | 91亚洲精品久久91综合 | 久久精品久久精品久久 | 四虎在线最新永久免费 | 欧美日韩在线观看视频 | 成人特级毛片69免费观看 | 日韩高清性爽一级毛片免费 | 国产国语videosex | 麻豆成人久久精品二区三 | 精品久久国产视频 | 色老头福影院韩国激情影院 | 亚洲欧美另类图片 | 精品久久久久久中文字幕欧美 | 91免费福利视频 | 一级毛片免费一级直接观看 | 国产视频第二页 | 在线精品国产一区二区 | 午夜在线播放免费高清观看 | 亚洲综合日韩在线亚洲欧美专区 | 色婷婷综合久久久中文字幕 | 中文字幕三级在线不卡 | 亚洲精品国产经典一区二区 | 青青青国产在线手机免费观看 | 特级毛片免费播放 | 欧洲一级毛片免费 | 色综合久久88色综合天天小说 | 欧美综合图区 | 国产精品日韩欧美一区二区三区 | 亚欧乱色视频大全 | 精品哟啊呦v视频在线观看 精品哟哟国产在线观看 | 国产伦理精品 | 97在线公开视频 |