thriftpy2使用與流程


首先,最近公司對原來的項目重構,用thriftpy框架(餓了么對thrift的python實現),原來的thriftpy廢棄了,現在基本都用的是thriftpy2。剛剛接觸到RPC方面的東西,網上關於thriftpy2的資料也比較少,就想寫自己的第一篇博客吧。

python搞微服務,是最近的趨勢,但相關的資料很少。我會大概梳理下大概的流程,具體的百度下就ok了。

先講RPC,這是遠程功能調用,就是我們原來是一個整體的項目,現在需要拆分為一個個服務。RPC框架就是編程人員在同一台機器的不同進程之間,或者同的機器之間,進行遠程調用代碼的工具。這樣我們就不用去管底層的具體實現,只需要搞好我們原來的業務邏輯處理。

然后就是我們的thrift框架,主要用於各個服務之間的RPC通信。支持跨語言,比如客戶端用python寫,服務端可以用java來寫,這都取決於開發者。

thrift的實現步驟

通過IDL(接口定義語言) ==> 來定義 RPC(遠程過程調用)的接口和數據類型 ==> thrift編譯器生成不同語言的代碼 ==> 負責RPC協議層和傳輸層的實現

thrift框架通過定義IDL文件,來來關聯客戶端和服務端

IDL文件中定義的內容,定義我們要運行的服務,需要的變量等

指定目標語言
namespace language xxx(文件夾目錄)

定義變量
const 

定義結構體
struct xxx{
    
}

定義服務
service xxx{
    
}

在thrift框架中,我們需要執行 thrift --gen <language> <Thrift filename>,幫我們生成相應的thrift 服務需要的依賴文件

構建服務端代碼,客戶端代碼,具體的我就不說了,官方也有給出例子。

thrift框架的github地址

https://github.com/apache/thrift

 

thriftpy2框架是以pythonic方式實現的,不需要通過thrift文件,生成SDK,只需要動態導入thrift文件即可

https://github.com/Thriftpy/thriftpy2

安裝也很簡單,不過微服務基本都是用docker容器來運行服務,通過Dockerfile安裝在容器內即可

pip install thriftpy2

thriftpy2的基本流程

我們需要定義thrift文件,來描述服務接口

定義客戶端代碼

定義服務端代碼

先開啟服務,就可以執行客戶端
如果需要同時提供多個服務,就需要建立多個.thrift文件來實現

 

thriftpy2中服務端和客戶端都需要調用thriftpy2.load方法,對thrift文件進行解析,會在內存中構建相應的module

1.thriftpy2構建服務端

調用thriftpy.load方法對thrift文件進行解析,在內存中構建對應的module
調用make_server將構建的module和完成具體業務功能的class綁定,同時完成傳輸層和協議層的設置,生成thrift服務器端
調用server.serve方法啟動服務器

2.thriftpy2構建客戶端接口

調用thriftpy.load方法對thrift文件進行解析,在內存中構建對應的module
調用make_client綁定上一步構建的module,同時完成傳輸層和協議層的設置,生成Thirft客戶端
根據生成的客戶端調用響應的接口

 

由於微服務基本都會用docker來運行,用docker來搭建python微服務,大家可以參考下https://blog.csdn.net/qq_35394891/article/details/84144936

簡單說下吧,通過Dockerfile,來幫我們快速生成容器,使用的python版本,運行的命令以及我們需要安裝的包等,生成對應的容器

這樣我們就構建好容器了

通過gunicorn來幫助我們,運行服務

 

文筆方面,還有布局應該都比較差,將就看吧,有什么錯誤,還望指出,謝謝。

參考文檔

https://blog.csdn.net/yzj225/article/details/76855991

https://blog.csdn.net/qq_35394891/article/details/84144936

https://blog.csdn.net/zkp_java/article/details/81879577


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM