Thrift服務(一):介紹

前言

Apache Thrift是一種RPC框架。

RPC(Remote Procedure Call)即遠程過程調用。其調用協議通常包含傳輸協議和序列化協議。傳輸協議包含: 如著名的gRPC(grpc / grpc.io) 使用的 http2 協議,也有如dubbo一類的自定義報文的tcp協議。序列化協議包含: 如基於文本編碼的 xml json,也有二進制編碼的 protobuf hessian等。

爲什麼需要RPC

我們現在假設一個場景:服務器1應用程序A裏有方法a,服務器2應用程序B裏有方法b。如果應用程序A需要調用方法a,直接在本地內存調用即可。那麼如果應用程序A想要調用方法b呢?

這種跨進程甚至跨服務器的調用即需要用到RPC(遠程過程調用)。需要通過網絡傳輸來表達調用的語義和傳達調用的數據。

RPC怎麼實現

  1. 服務器A和服務器B如何實現網絡連接?或者說客戶端和服務端如何實現網絡連接?目前網絡同通信協議包含TCP協議、UDP協議或者HTTP協議等。目前RPC框架常用的就是TCP協議來建立連接。這時服務器A如果想連接到服務器B,就需要告訴底層的RPC框架服務端的IP、PORT、方法名、方法參數等。
  2. 服務器A的底層RPC框架拿到遠程連接的參數後,開始發起遠程調用。需要傳輸的數據是基於網絡協議傳輸的,以TCP協議舉例,因爲網絡協議是基於二進制的,那麼內存中的數據就需要序列化(Serialize)或編碼(marshal)成二進制的形式。然後底層RPC框架將二進制數據通過TCP傳輸到服務器B。
  3. 服務器B接收到request後,對二進制數據進行反序列化,恢復成內存中的表達方式,然後找到相應的方法進行調用,得到方法的返回值。服務器B將返回值序列化通過底層RPC框架再發送給服務器A。
  4. 服務器A接收到返回值後,再反序列化爲內存中的表達方式,將結果值交給應用。

Figure 1. Steps in executing a remote procedure call

Figure 1. Steps in executing a remote procedure call(圖片來源:https://www.cs.rutgers.edu/~pxk/417/notes/03-rpc.html)

Thrift介紹

Thrift是Facebook於2007年開發的跨語言的rpc服務框架,提供多語言的編譯功能,並提供多種服務器工作模式;用戶通過Thrift的IDL(接口定義語言)來描述接口函數及數據類型,然後通過Thrift的編譯環境生成各種語言類型的接口文件,用戶可以根據自己的需要採用不同的語言開發客戶端代碼和服務器端代碼。

參考:

  1. https://blog.csdn.net/houjixin/article/details/42778335
  2. https://www.zhihu.com/question/25536695
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章