首先,最近公司對原來的項目重構,用thriftpy框架(餓了么對thrift的python實現),原來的thriftpy廢棄了,現在基本都用的是thriftpy2。剛剛接觸到RPC方面的東西,網上關於thriftpy2的資料也比較少,就想寫自己的第一篇博客吧。
python搞微服務,是最近的趨勢,但相關的資料很少。我會大概梳理下大概的流程,具體的百度下就ok了。
先講RPC,這是遠程功能調用,就是我們原來是一個整體的項目,現在需要拆分為一個個服務。RPC框架就是編程人員在同一台機器的不同進程之間,或者同的機器之間,進行遠程調用代碼的工具。這樣我們就不用去管底層的具體實現,只需要搞好我們原來的業務邏輯處理。
然后就是我們的thrift框架,主要用於各個服務之間的RPC通信。支持跨語言,比如客戶端用python寫,服務端可以用java來寫,這都取決於開發者。
thrift的實現步驟
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