Tars 是騰訊開源的一個RPC框架,現在RPC框架也很多,但是C++的RPC框架,是少之又少,我瞭解是百度的sofa-pbrpc,但是不支持多種語言,Tars是另外一個C++ RPC 框架他的優勢就在於它支持多種主流的編程語言C++、java、go、php、python(內部使用中暫未開源)。
Tars的主控服務包括:tarsregistry、tarsconfig、tarsadminregistry等。這些主控服務是使用c++語言開發,一般很少變更。業務開發過程中也不需要太過於關心主控服務。專心開發自己的業務邏輯即可。另外tars支持官方的tars協議、protobuf協議、http以及用戶自定義協議,可以說已經滿足了各種各樣的需求。我之前就基於tars框架開發了一個基於MQTT協議的服務端程序,雖然使用過程中難免會遇到很多坑,好在都是可以解決的。我開發的程序目前已經投入使用,感謝tars、感謝騰訊的開源貢獻。後續我會有專題介紹使用tars過程中遇到的一些問題以及如何解決,幫助大家更加了解tars、使用Tars。
下圖是tars github的star 情況:
下圖是tars的服務交互數據流:
底下綠色部分都是一些輔助服務就config是必選的,其他的可以根據情況進行部署。
下圖是服務的框架:
下面就簡單介紹下tars的其他一些特性以及一些問題:
1)有豐富的工具庫:比如線程池的封裝、線程安全的隊列、字符串操作、單例、future/promis、tup、協程(不是libco)
2)有發佈管理界面、發佈超級簡單但是管理界面體檢欠佳,比如不支持批量重啟、過濾檢索、批量下線、批量修改、擴容時端口號不能繼承、創建模板是文件名限制、不顯示節點數量、翻頁支持不友好
3)有日誌採集、節點間調用統計數據、配置自動加載、在線push 配置、調整日誌級別、日誌染色等。
4)支持鑑權模塊、支持TSL
5) 容災高可用問題:客戶端側只有內存級別的cache、心跳機制有待優化
6)bug:tars 1.5版本存在句柄洩露(大量close_wait的連接)(c++)
7)bug:當一個連接的某一個請求包出現一個包是非法包時該鏈路上的其他包如果已經經過了完整性校驗,那麼後續的這些包都必須分發到業務線程然後才能被丟掉(包在隊列中超時就另當別論)這個跟框架實現的方式有關係,採用的多線程異步的方式。(c++)
8)待改善:tars協議不支持自定的一些方法,比如定義一個類,但是你不能再裡面添加一些自定義的方法。
9) 待改善:tars 的include 指令,支持不完善:tars2cpp 支持使用#include 一些tars協議文件,但是java不可以,tars2java 不支持--include 選項。
有關於tars個更詳細的介紹請參考github上開源項目:https://github.com/TarsCloud/Tars。
官方的介紹文檔:
https://github.com/TarsCloud/Tars/blob/master/Introduction.md
c++ 入門的示例文檔:https://github.com/TarsCloud/TarsCpp/blob/master/docs/tars_cpp_user_guide.md
下一期將會介紹:tars服務部署過程中遇到一些問題
閱讀更多 後臺開發深度探索 的文章