apache thrift是一種rpc框架。
rpc(remote procedure call)即遠端過程呼叫。其呼叫協議通常包含傳輸協議和序列化協議。傳輸協議包含: 如著名的grpc(grpc / grpc.io) 使用的 http2 協議,也有如dubbo一類的自定義報文的tcp協議。序列化協議包含: 如基於文字編碼的 xml json,也有二進位制編碼的 protobuf hessian等。
我們現在假設乙個場景:伺服器1應用程式a
裡有方法a
,伺服器2應用程式b
裡有方法b
。如果應用程式a
需要呼叫方法a
,直接在本地記憶體呼叫即可。那麼如果應用程式a
想要呼叫方法b
呢?
這種跨程序甚至跨伺服器的呼叫即需要用到rpc(遠端過程呼叫)
。需要通過網路傳輸來表達呼叫的語義和傳達呼叫的資料。
伺服器a和伺服器b如何實現網路連線?或者說客戶端和服務端如何實現網路連線?目前網路同通訊協議包含tcp協議、udp協議或者http協議等。目前rpc框架常用的就是tcp協議來建立連線。這時伺服器a如果想連線到伺服器b,就需要告訴底層的rpc框架服務端的ip、port、方法名、方法引數等。
伺服器a的底層rpc框架拿到遠端連線的引數後,開始發起遠端呼叫。需要傳輸的資料是基於網路協議傳輸的,以tcp協議舉例,因為網路協議是基於二進位制的,那麼記憶體中的資料就需要序列化(serialize)或編碼(marshal)成二進位制的形式。然後底層rpc框架將二進位制資料通過tcp傳輸到伺服器b。
伺服器b接收到request後,對二進位制資料進行反序列化,恢復成記憶體中的表達方式,然後找到相應的方法進行呼叫,得到方法的返回值。伺服器b將返回值序列化通過底層rpc框架再傳送給伺服器a。
伺服器a接收到返回值後,再反序列化為記憶體中的表達方式,將結果值交給應用。
thrift是facebook於2023年開發的跨語言的rpc服務框架,提供多語言的編譯功能,並提供多種伺服器工作模式;使用者通過thrift的idl(介面定義語言)來描述介面函式及資料型別,然後通過thrift的編譯環境生成各種語言型別的介面檔案,使用者可以根據自己的需要採用不同的語言開發客戶端**和伺服器端**。
參考:
Spring Batch學習(一)介紹
我們不會總是想要立即得到需要的資訊,批處理允許我們在請求處理之前就乙個既定的流程開始蒐集資訊 比如說乙個銀行對賬單,我們可以按月生成,並在使用者查詢之前開啟乙個批處理流程進行處理 更好的利用資源 讓應該利用的處理能力閒置起來是乙個大的浪費,我們可以定製處理讓乙個機器乙個接乙個的執行job可以更好的利...
設計模式(一)介紹
每乙個描述了乙個在我們周圍不斷重 生的問題以及問題解決方案的核心。這樣,你就能一次又一次地使用該方案而不必做重複勞動。模式名稱。模式的乙個助詞名。問題。模式應用的場景。解決方案。描述了設計的組成部分,它們之間的相互關係及各自的職責和協作方式。效果。描述了模式應用的效果及使用模式應權衡的問題。按目的原...
Redis學習筆記(一) 介紹
redis 是乙個開源的高效能鍵值對資料庫 他通過提供多種鍵值資料型別來適應不同場景下的儲存需求,並借助許多高層級的介面使其可以勝任如快取 佇列系統等不同的角色。redis是remote dictionary server 遠端字典伺服器 的縮寫,他以字典結構儲存資料,並允許其他應用通過tcp協議讀...