開源推薦-C++開發的微服務框架Tars
Tars項目于2017年4月開源,BSD3協議,至今已有5年。在軟件層面,社區的版本保持穩定的迭代,支持了多語言微服務的開發和治理;在硬件層面,也移植到Arm生態上。Tars可以幫助開發人員和企業,以微服務的方式快速構建自己穩定可靠的分布式應用,從而令開發人員只關注業務邏輯,提高開發和運營效率。
項目背景介紹
Tars微服務生態
Tars致力于建設微服務技術生態,在底層基礎設施、服務框架、上層應用以及DevOps等方面,都做了較為深入的研發。
- 服務可以部署在物理機、虛擬機、容器、K8S 上,兼容Windows、Linux和MacOS;數據可以選擇存儲在 Cache、數據庫或者文件系統上
- 支持豐富的協議,如自研的TARS協議、TUP協議,也支持業界常用的 SSL、HTTP、PB 等。此外還可以自定義協議。在RPC調用上可以進行同步、異步和單向多種方式
- 框架原生集成了豐富的服務治理功能,包括但不限于服務注冊/發現、負載均衡、自定義監控、日志、過載保護、熔斷機制、IDC/SET部署,等等能力。
- 在應用層面,社區計劃支持各種業務應用,如深度學習、邊緣計算與API網關等等。
- 在生態支撐方面,Tars框架支持多種編程語言,包括 C++、Go、Java、Node.js、PHP 等。同時還可以結合各種DevOps工具實現持續集成和持續發布。
Tars子基金會
2020年3月10日,Linux基金會正式宣布旗下的TARS開源項目成立TARS子基金會。這是一個專注于微服務領域的開源基金會,致力于幫助企業擁抱微服務體系架構,解決在使用微服務方面可能出現的問題。這是首個起源于中國開源項目的國際開源基金會,也是Linux基金會下唯一聚焦微服務技術生態的子基金會。
Tars基金會里目前收錄了9個項目,分為5部分:工具集(Tars Lab)、服務治理(Service Governance)、微服務開發框架(Development Framwork)、存儲(DCache)和基礎設施(Infrustructure)。
1、Tars Lab
Tars Lab
Tars Lab項目提供了壓力測試TarsJMeter,基準測試集TarsBenchmark和一些開發工具包。TarsJavaStart,可以生成服務端和客戶端的TarsJava腳手架,快速開始Tars服務的開發。TarsTools,是一款支持多種IDE的JetBrains插件,為實現編輯Jce/Tars文件使用的(支持Intellij IDEA、Android Studio、PhpStorm、WebStorm、GoLand、CLion等)。
2、服務治理
服務治理項目
服務治理包含了2個項目:TSeer專注于處理服務注冊與發現;TarsGateway是基于Tars框架開發的微服務網關,除具備網關的基礎功能外,還可以自動將HTTP轉換成Tars-RPC協議。
3、微服務開發框架
開發框架
這部分只包含Tars一個項目,核心模塊由C++開發,提供了多語言開發框架,默認rpc調用,是Tars基金會的核心項目。其他項目都是圍繞這個項目研發的。
4、微服務存儲
微服務存儲
這部分只包含DCache一個項目,它是基于Tars框架開發的分布式共享內存存儲系統,支持常用的kv數據結構、支持二級索引、支持在線擴縮容、支持自動持久化到后端db等特性。DCache依賴Tars框架的運行,但也得益于Tars,使得存儲服務的運維成本幾乎為0。
5、微服務基礎設施
微服務基礎設施
這是一個將Tars與K8S融合使用的項目,致力于將Tars融入到K8S生態中。
在這方面還有一個更優秀的項目K8SFramework,致力于將Tars與K8S深度融合,相信未來會納入到基金會中。
Tars的前世今生
Tars的前身是騰訊內部的TAF框架,已經經過了10年的驗證,穩定運行與1.6w+服務器,100多個業務線中。
友商評價
據統計,Tars已在超過120家公司、261200臺服務器上穩定運行。
使用體驗
在分布式環境下,所有的微服務(包括DCache的服務)都可以通過框架自帶的控制臺-TarsWeb進行管理,可以做到所有服務狀態可監控,可以在控制臺上進行啟停、修改配置、執行運維指令等操作。
白屏化運維
在分布式部署的情況下,可以通過Web控制臺實現一鍵升級、回退。
海量節點一鍵升級/回退
Tars自帶配置中心,分級配置,可以統一修改配置,做到“一點修改,全局生效”。
一點修改配置
在服務部署時,可以在界面上填寫要發布的節點,一鍵部署、擴容。
一鍵擴容
框架提供了狀態監控的能力,可以監控服務的調用質量,如流量情況,平均耗時、超時率和異常率。
狀態監控
框架狀態可以在控制臺上一鍵核查。
框架狀態
Tars提供配套的性能測試工具,這也是Tars基金會的子項目。性能測試工作不再依賴專業的測試人員。
集成性能測試工具
與SpringCloud對比
Tars優勢
1、原生RPC調用
Tars使用自研的RPC協議通信,服務之間建立長連接,在通信頻繁的場景下具備顯著的性能優勢。
2、多語言支持
除C++和Java外,Tars還支持NodeJs,PHP,Go等語言,提供了相應的SDK。當團隊技術棧多樣化時,可以多語言協同開發,無縫對接,開發者可以選擇自己熟悉的語言進行開發,提升團隊整體效率。
在這方面,Spring Cloud想要支持異構語言,需要借助SideCar構建Service Mesh。業界現在有一些比較流行的服務網格解決方案,但是并沒有形成統一的標準,可移植性不高。比較常見的像Istio,由于是代理模式,而且非長連接,會存在更大的延遲。另一方面,Istio的部署和運維都非常復雜,需要更多的學習成本和運維成本。
3、內置服務治理功能
Tars框架內嵌了豐富的服務治理功能,包括熔斷、限流、負載均衡、認證、加密等。同時,在服務監控、數據采集,以及灰度部署、跨機房部署等方面,都原生支持,集成度高。
Spring Cloud要支持這些功能,要么需要集成其他組件,要么需要設計開發來實現。都需要付出額外的學習成本和研發成本。
4、運維監控
Tars為使用者提供了一體化的運維管理控制臺,我們可以在Web上進行一鍵部署、擴容、升級、回退等運維操作。
Spring Cloud并沒有配套的工具。要實現Web管控, 需要借助K8S和容器,同樣需要付出額外的成本。
5、國產化
Tars是國內公司主導的開源項目,這一點就不多說什么了。
6、“套裝”優勢
Tars框架提供了微服務相關的一體化解決方案,常規情況下不需要再去集成其他組件,不存在兼容性問題。這就好比MacBook和兼容機的區別,兼容機你可能需要付出更多的試錯成本才能達到想要的效果。
劣勢
1、項目熱度
Tars開源較晚,到目前只有5年多時間,項目熱度不如Spring Cloud,應用也沒Spring Cloud廣泛。
2、Tars的云原生之路
Tars和K8s的深度融合也開源不久(2020年7月,K8SFramework),還有待落地驗證。這個項目現在的更新頻率較高,不建議在生產中使用。但是從這一點也可以看到社區工作者對Tars與K8S融合的高漲熱情,相信未來這個項目一定會大放異彩!
寫在最后
Tars在微服務開發、運維、監控等方面提供了一體化的解決方案,可以幫助我們低成本構建企業級微服務。適用于各種規模的團隊,各種規模的系統。
在做技術選型時,如果團隊中有C++開發人員,或者有多語言開發的情況,而且團隊規模、資源有限的情況下,建議選擇Tars。它在運維、監控、測試等方面會為我們節約大量成本。
未來,隨著 K8SFramework 項目的日漸成熟,相信Tars生態會被更多的團隊熟知和使用。