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