日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

apache thrift分析

發布時間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 apache thrift分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

thrift是一個用來實現跨語言的遠程調用(RPC Remote Procedure Call)的軟件框架。根據接口定義語言(IDL Interface definition lanuage) 并借助自身的協議棧和代碼生成引擎來生成各種主流語言(C/C++,PYTHON,JAVA,GOLANG,PHP等)的rpc框架的服務端/客戶端代碼,使得在不同的語言之間可以提供高效的服務。

一:IDL支持的數據類型

  1. bool 布爾型
  2. byte 8位整數
  3. i16 16位整數
  4. i32 32位整數
  5. i64 64位整數
  6. double 雙精度浮點數
  7. string 字符串
  8. binary 字節數組
  9. list<i16> List集合
  10. map<string, string> Map類型
  11. set<i32> Set集合

?

二: thrift 架構

服務端

+--------------------------------------------+
| Server? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| (single-threaded, event-driven etc) |
+-------------------------------------------+
| Processor? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| (compiler generated)? ? ? ? ? ? ? ? ? ?|
+-------------------------------------------+
| Protocol? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
| (JSON, compact etc)? ? ? ? ? ? ? ? ? ?|
+-------------------------------------------+
| Transport? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| (raw TCP, HTTP etc)? ? ? ? ? ? ? ? ? ?|
+-------------------------------------------+
| 底層IO Socket/File/Zip? ? ? ? ? ? ? ? |

+-------------------------------------------+

客戶端
+-------------------------------------------+
| Client? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
+-------------------------------------------+
| Processor? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| (compiler generated)? ? ? ? ? ? ? ? ? ?|
+-------------------------------------------+
| Protocol? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
| (JSON, compact etc)? ? ? ? ? ? ? ? ? ?|
+-------------------------------------------+
| Transport? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
| (raw TCP, HTTP etc)? ? ? ? ? ? ? ? ? ?|
+-------------------------------------------+
| 底層IO Socket/File/Zip? ? ? ? ? ? ? ? |

+-------------------------------------------+

?

1、底層IO模塊,負責實際的數據傳輸,包括socket,文件或者壓縮數據流等
2、Transport 負責以字節流的方式發送和接收數據,是底層IO模塊在thrift框架中的實現,每一個底層IO模塊都會有一個對應TTransport來負責Thrift的字節流(Byte Stream)數據在該IO模塊上的傳輸。例如TSocket對應Socket傳輸,TFileTransport對應文件傳輸。
3、Protocol(或TProtocol)主要負責結構化數據組裝,或者從結構中讀出結構化數據。TProtocol將一個有類型的數據轉化為字節流以交給TTransport進行傳輸,或者從TTransport中讀取一定長度的字節數據轉化為特定類型的數據。如int32會被TBinaryProtocol Encode為一個四字節的字節數據,或者TBinaryProtocol從TTransport中取出四個字節的數據Decode為int32。
4、Processor(或者TProcessor)負責對Client的請求做出響應,包括RPC請求轉發,調用參數解析和用戶邏輯調用,返回值寫回等處理步驟。Processor是服務器端從Thrift框架轉入用戶邏輯的關鍵流程
5、TServer負責接收Client的請求,并將請求轉發到Processor進行處理。TServer主要任務就是高效的接受Client的請求,特別是在高并發請求的情況下快速完成請求

?

Thrift的模塊設計非常好,在每一個層次都可以根據自己的需要選擇合適的實現方式

Transport
transport這一層提供了一個抽象層,從網絡上讀取,發送數據。 這一層并不解析數據的類型,它只是一個字節一個字節的讀取和發送數據

transport支持的幾種傳輸類型:
1. TSocket 使用阻塞的Socket進行IO傳輸
2. TFramedTransport 使用一個帶Buffer的Socket進行IO傳輸,使用NoblockingServer的時候會需要使用TFramedTransport
3. TFileTransport 使用文件進行IO傳輸
4. TZlibTransport 與其他的TTransport配合使用,完成數據的壓縮傳輸

?

Protocol
Protocol的主要任務是把Transport中的字節流轉化為數據流(Data Stream),在Protocol這一層就會出現具有數據類型的數據,如整型,浮點數,字符串,結構體等
Protocol中數據雖然有了數據類型,但是Protocol只會按照指定類型將數據讀出和寫入,而對于數據的真正用途,需要在Thrift自動生成的Server和Client中里處理

Protocol支持的幾種主要協議類型為:
1. TBinaryProtocol 所有數據直接按照二進制方式編碼
2. TCompactProtocol 高效的編碼方式,使用了類似于ProtocolBuffer的Variable-Length Quantity (VLQ) 編碼方式,主要思路是對整數采用可變長度,同時盡量利用沒有使用Bit。
3. TDenseProtocol 類似于TCompactProtocol,但是傳輸過程中移除數據的Meta信息
4. TJSONProtocol 使用JSON編碼數據
5. TSimpleJSONProtocol 只寫方式的JSON編碼,適合腳本語言的解析
6. TDebugProtocol 文本方式編碼數據,主要用于調試

?

Processor
Processor是由Thrift生成的TProcessor的子類,主要對TServer中一次請求的 InputProtocol和OutputTProtocol進行操作,也就是從InputProtocol中讀出Client的請求數據,向OutputProtcol中寫入用戶邏輯的返回值。Processor是TServer從Thrift框架轉到用戶邏輯的關鍵流程。同時TProcessor.process是一個非常關鍵的處理函數,因為Client所有的RPC調用都會經過該函數處理并轉發

?

Server
Server在Thrift框架中的主要任務是接收Client的請求,并轉到某個TProcessor上進行請求處理。針對不同的訪問規模, Thrift提供了不同的TServer模型。Thrift目前支持的Server模型包括:
1. TSimpleServer 使用阻塞IO的單線程服務器,主要用于調試
2. TThreadedServer 使用阻塞IO的多線程服務器。每一個請求都在一個線程里處理,并發訪問情況下會有很多線程同時在運行。
3. TThreadPoolServer 使用阻塞IO的多線程服務器,使用線程池管理處理線程。
4. TNonBlockingServer 使用非阻塞IO的多線程服務器,使用少量線程既可以完成大并發量的請求響應。該類型Server必須使用TFramedTransport。

?

Client
Client跟TProcessor一樣都主要操作InputProtocol和OutputProtocol,不同的是Client將RPC調用分為Send和receive兩個步驟。
1. Send步驟,將用戶的調用參數作為一個整體的Struct寫入TProcotol,并發送到TServer。
2. Send結束之后,Client便立刻進入Receive狀態等待TServer的相應。對于TServer返回的響應,使用返回值解析類進行返回值解析,完成RPC調用。

?

參考資料:
http://thrift.apache.org/docs/
https://developers.google.com/protocol-buffers/docs/encoding
http://thrift.apache.org/tutorial/
http://thrift.apache.org/static/files/thrift-20070401.pdf
https://blog.csdn.net/column/details/thrift.html

轉載于:https://www.cnblogs.com/jiujuan/p/9347216.html

總結

以上是生活随笔為你收集整理的apache thrift分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。