Jaeger tchannel-go —— readme原始碼閱讀
TChannel
TChannel 是一個支援多路複用和幀協議的 RPC 框架。tchannel-go 是這個協議的 Go 版本實現,包括 Hyperbahn 的客戶端庫。
如果你想要首先編寫一個小型 Thrift 和 TChannel 服務,請檢視本指南。如果你不喜歡這個指南,可以幫忙做一些貢獻.
總覽
TChannel 是一個網路協議,它支援:
- 一個 request/response 模型;
- 在同一個 TCP socket 上覆用多個請求;
- 無序響應;
- 流請求和流響應;
- Checksummed 幀;
- 任意負載的傳輸;
- 多語言的實現簡單;
- 類似 redis 的高效能;
這個協議為 IPC,意圖執行在資料中心網路上。
協議
TChannel 幀有個固定長度的頭部和 3 個可變長度欄位。底層協議沒有給這些欄位賦予含義,但是 client/server 實現使用第一個欄位去表示 RPC 模型中唯一 endpoint 或者函式名稱。接下來的兩個欄位可用於任意資料。對於這三個欄位的使用,有些建議如下:
- URI path + HTTP method and headers as JSON + body
- Function name + headers + thrift/protobuf
上面兩條建議,都是針對 arg3 個引數賦予了含義,
對於第一條建議:
- arg1 為 URI 路徑;
- arg2 為 HTTP 的請求 method 和 headers;
- arg3 為 HTTP 的 body 資料
對於第二條建議:
- arg1 為方法名;
- arg2 為 headers
- arg3 為 thrift/protobuf 的序列化資料
注意,TChannel 編碼只支援 UTF-8。如果你想要使用 JSON,你需要在 TChannel 之外進行字串化和解析。
這個設計支援高效路由和路由轉發:routers 需要解析第一個或者第二個欄位,但是沒有解析也能夠轉發第三個欄位;
在這個系統中沒有客戶端和服務端之前的概念。每個 TChannel 例項能夠發起和接收請求,只要求一個可以監聽的唯一埠。這個要求可能未來會發生變化。
例子:
- ping。一個使用 raw TChannel 的 ping/pong 例子。
- thrift。一個使用 Thrift 協議的 client/server 例子。
- keyvalue。 具有單獨 server 和 client 二進位制的一個 keyvalue Thrift 服務
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- Jaeger tchannel-go原始碼閱讀——PeerGo原始碼
- 【原始碼閱讀】AndPermission原始碼閱讀原始碼
- 【原始碼閱讀】Glide原始碼閱讀之with方法(一)原始碼IDE
- 【原始碼閱讀】Glide原始碼閱讀之into方法(三)原始碼IDE
- 【原始碼閱讀】Glide原始碼閱讀之load方法(二)原始碼IDE
- ReactorKit原始碼閱讀React原始碼
- Vollery原始碼閱讀(—)原始碼
- NGINX原始碼閱讀Nginx原始碼
- ThreadLocal原始碼閱讀thread原始碼
- 原始碼閱讀-HashMap原始碼HashMap
- Runtime 原始碼閱讀原始碼
- RunLoop 原始碼閱讀OOP原始碼
- AmplifyImpostors原始碼閱讀原始碼
- stack原始碼閱讀原始碼
- CountDownLatch原始碼閱讀CountDownLatch原始碼
- fuzz原始碼閱讀原始碼
- HashMap 原始碼閱讀HashMap原始碼
- delta原始碼閱讀原始碼
- AQS原始碼閱讀AQS原始碼
- Mux 原始碼閱讀UX原始碼
- ConcurrentHashMap原始碼閱讀HashMap原始碼
- HashMap原始碼閱讀HashMap原始碼
- PostgreSQL 原始碼解讀(3)- 如何閱讀原始碼SQL原始碼
- JDK原始碼閱讀:String類閱讀筆記JDK原始碼筆記
- JDK原始碼閱讀:Object類閱讀筆記JDK原始碼Object筆記
- 如何閱讀Java原始碼?Java原始碼
- buffer 原始碼包閱讀原始碼
- 使用OpenGrok閱讀原始碼原始碼
- express 原始碼閱讀(全)Express原始碼
- Kingfisher原始碼閱讀(一)原始碼
- 如何閱讀框架原始碼框架原始碼
- 如何閱讀jdk原始碼?JDK原始碼
- ArrayList原始碼閱讀(增)原始碼
- snabbdom 原始碼閱讀分析原始碼
- Appdash原始碼閱讀——reflectAPP原始碼
- React原始碼閱讀:setStateReact原始碼
- 如何快速閱讀原始碼原始碼
- 原始碼閱讀工具-understand原始碼