close

內容導航

什麼是Tars?

Tars框架源碼部署

Tars服務部署管理

Tars配置中心

Tars服務發現

Tars遠程日誌

Tars狀態監控

什麼是Tars

Tars是一個支持多語言內嵌服務治理功能的框檻,能與DevOps比較好的協同開發。提供了包含開發、運維、以及測試的一整套解決方案。Tars集可擴展協議編解碼、高性能RPC通信框架、名字路由與發現、發布監控、日誌統計、配置管理等於一體,通過Tars可快速用微服務的方式構建自己高可用的分布式應用,並實現完整有效的服務治理。總體來講,Tars是一個跨平台、跨語言的軟件運行環境,是基於service mesh設計理念實現的開發框架。

Tars框架源碼部署
註:用CentOS7部署,CentOS6 需升級glic

部署環境

Docker環境安裝
Mysql安裝
Linux/Mac源碼部署
Windows源碼部署
TarsDocker部署
K8s Docker部署
TarsNode部署
依賴環境
軟件
軟件要求
linux內核版本
2.6.18及以上版本(操作系統依賴)
gcc版本
4.8.2及以上版本、glibc-devel(C++語言框架依賴)
bison工具版本
2.5及以上版本(C++語言框架依賴)
flexl具版本
2.5及以上版本(C++語言框架依賴)
cmake版本
3.2及以上版本(C++語言框架依賴)
mysql版本
4.1.17及以上版本(框架運行依賴)
nvm版本
0.35.1及以上版本(web管理系統依賴,腳本安裝過程中自動安裝)
node版本
12.13.0及以上版本(web管理系統依賴,腳本安裝過程中自動安裝)
Tars服務部署管理

部署過程有生命周期完整的頁面交互

零配置或配置模板化,頁面配置化操作執行文件,部署服務

部署後可以在頁面上進行驗證,並在頁面上查看服務的運行狀態以及產生的日誌,方便問題的排查上報

版本管理頁面直觀可見,可以進行版本的升降級

VPN或公網網絡互通後,可以實現遠程部署

部署過程無需技術背景,操作簡單

部署方案可以跨平台

服務發布架構實現

tars patch 組件將war包上傳到 patch 目錄 (/usr/local/app/patch/tars.upload/)

tars註冊中心通知node拉取對應的包到本地

啟動對應的服務

服務啟動後web頁面可以查看啟動狀態

服務啟動後web頁面可以通過流式日誌查看服務的啟動日誌.

灰度發布

Tars支持灰度發布,具體可查看下圖
熔斷策略
當客戶端和服務端需要交互時,可在註冊中心拉取路由。客戶端從註冊中心拉取到註冊信息之後可以根據內部對服務的判斷決定請求什麼服務。
服務發布
運維管理
服務部署

模版管理

發布管理
服務管理
框架檢查

Tars服務發布與傳統服務發布對比

對比項
Tars服務發布
傳統服務發布
服務發布
頁面可視化,傻瓜式操作
ssh遠程登錄,上傳文件,腳本啟 動服務
服務升級
頁面上傳war包,選擇war包發布
與服務發布冋樣流程,但要考慮歷史文件的備份
服務降級
頁面選擇對應的版,發布
如果有備份文件,還原服務包文件, 腳本啟動,沒有備份文件,需要源碼回滾打包上傳,再通過腳本啟動
需要技能
不需要
一定的運維經驗,服務器操作, shell腳本的編寫
集群發布
選擇多個節點,發布
需要將包copy到對應的機器,重新啟動服務

Tars配置中心

配置中心提供服務配置文件的統一管理功能。是實時更新配置文件、push配置文件到服務、服務主動pull配置文件的統一管理中心。主要包含以下優點:

對業務配置進行集中管理並且提供操作頁面,使配置修改更容易,通知更及時,配置變更也更安全;

對配置變更進行歷史記錄,讓配置可以輕鬆回退到前一版本。

配置拉取簡單,服務只需調用配置服務的接口即可獲取到配置文件。

能靈活管理配置文件,配置文件分為幾個級別:應用配置、Set配置、服務配置和節點配置。

配置信息維護

tars框架通過兩個數據表(存在mysq I中)來維護這些配置信息:t_config_file s和 t_config_references。

t_config_files表的主要信息:服務配置文件名稱、配置文件類型、配置文件所屬服務名,配置文件所屬set分組,配置文件所屬節點ip以及配置文件的索引id值以及該服務所在set分組信息。

t_config_references表的主要信息:配置文件的索引id以及該id所引用的配置文件索引id。

服務配置

tars web管理系統上添加配置、添加引用文件、push配置文件到服務。配置文件會被推到相應的目錄下。
服務代碼中pull配置文件到本地。
Tars服務發現
Tars協議採用接口描述語言(Interface description language,縮寫 IDL)來實現,它是一種二進制、可擴展、代碼自動生成、支持平台的協議,使得在不同平台上運行的對象和用不同語言編寫的程序可以用RPC遠程調用的方式相互通信交流,主要應用在後台服務之間的網絡傳輸協議,以及對象的序列化和反序列化等方面。註冊中心主要涉及到三大角色: 服務提供者、服務消費者、註冊中心 。

Tars通過名字服務來實現服務的註冊與發現

Client通過訪問名字服務獲取到被調服務的地址信息列表

Client再根據需要選擇合適的負載均衡方式來調用服務

數據結構

協議支持的類型分兩種,基本類型和複雜類型。

基本類型包括:void、bool、byte、short、int、long、float、double、string、unsigned byte、unsigned short、unsigned int。

複雜類型包括:enum、const、struct、vector、map, 以及struct、vector、map的嵌套。

尋址方式

自動尋址:客戶端Endpoint註冊表的緩存更新周期,主動方式(周期刷新一分鐘,refreshEndpointInterval) 自動尋址用的負載均衡算法(包含多種)
直接尋址:可以通過手動填寫IP port實現直接尋址,調試特殊場景下使用
調用方式
通過IDL語言協議,可以定義服務提供的接口,並自動生成客戶端和服務端的相關通信代碼,服務端只需實現業務邏輯即可對外提供服務,客戶端通過自動生成的代碼即可調用服務,調用方式支持以下三種模式:

同步調用:客戶端發出調用請求後等待服務返回結果後再繼續邏輯。

異步調用:客戶端發出調用請求後繼續其他業務邏輯,服務端返回結果又由回調處理類 處理結果。

單向調用:客戶端發出調用請求後就結束調用,服務端不返回調用結果。

Tars文件定義結構演示

服務註冊

Tars服務註冊優點:

簡單易用:對開發者透明

高可用:幾台註冊中心壞掉不會導致整個服務癱瘓,註冊服務整體持續可用

避免跨越機房調用:最好調用優先同一個機房的服務以減少網絡延遲

跨語言:允許開發者使用多種編程語言構建微服務

負載均衡:負載均衡支持輪詢、hash、權重等多種方式。

容錯保護:名字服務排除和Client主動屏蔽。

名字服務排除的策略:
業務服務主動上報心跳給名字服務,使名字服務知道服務部署的節點存活情況,當服務的某節點故障時,名字服務不在返回故障節點的地址給Client,達到排除故障節點的目標。名字服務排除故障需 要通過服務心跳和Clien地址列表拉取兩個過程,故障排除時間在1分鐘左右。
Client主動屏蔽:
為了更及時的屏蔽故障節點,Client根據調用被調服務的異常情況來判斷是否有故障來更快進行故障屏蔽。具體策略是,當client調用某個svr出現調用連續超時,或者調用的超時比率超過一定百分比, client會對此svr進行屏蔽,讓流量分發到正常的節點上去。對屏蔽的svr節點,每隔一定時間進行重連,如果正常,則進行正常的流量分發。
頁面上手動上傳進行的註冊,註冊到了 mysql.也可以通過Web API實現自動上傳和部署
服務註冊過程如下圖所示:
服務發現過程如下圖所示:

客戶端實現原理

服務端實現原理
Tars調用鏈
在Tars管理平台上選中要開啟調用鏈的服務,點擊「編輯」
最終效果如下圖所示:
點開單詞調用鏈查看詳細信息
Tars遠程日誌
Tarslog是Tars日誌服務,基於Logback作為日誌系統,用於將日誌內容打到本地或遠程服務器,並且支持服務內日誌調用鏈路追蹤以及日誌染色。
Tarslog提供了十分靈活的配置項,可以為用戶提供更加強大的日誌功能。
Tars內置的遠程日誌功能是以logback插件的模式存在,只需將插件引入到logback配置文件即可,配置簡單,並且可自定義日誌打印到本地以及遠程。
Tars日誌模塊可通過MDC實現服務內日誌鏈路跟蹤以及自定義日誌染色。MDC內部持有一個ThreadLocal對象,其中存儲了一個Map,因此用戶可以根據需要向其中添加鍵值對。
Tars日誌模塊通過配置可支持高可用。
日誌打印
流程如下圖所示:

官網(https://github.com/TarsCloud/TarsJava)下載源碼

通過mvn package 命令將 TarsJava 下的 tars-plugins 打成jar包

將打好的jar包放入到工程中。

配置logback文件,添加appender。如圖配置

代碼中通過 Logger logger = LoggerFactory. getLogger("root")獲取Iogger對象。

通過logger.debug("message")打印日誌,此時日誌會打印到第四步附圖中 logserverObjname配置的Iogserver中;

MDC服務內日誌鏈路跟蹤

MDC內部持有一個ThreadLocal對象,在單個線程處理的請求鏈路中,通過 MDC. put(「traceId", value)設置調用鏈路 ID。

在logback配置文件中利用pattern獲取traceld,如下圖配置:。

此時單個請求鏈路中打印的所有日誌已經包含第一步中MDC中put的traceId所對應的值。

MDC日誌染色

通過實現 ForegroundCompositeConverterBase<ILoggingEvent> 接口封裝染色 conversionRule。如下圖所示:

2.配置logback.xml文件,增加conversionRule標籤,指向第一步封裝的染色conversionRule類,並在輸出遠端日誌的Appender中使用此染色規則。如下圖所示:

logback 整合 Kafka方式1:手寫Appender

引入Kafka jar包,導入到項目中。

手寫Appender實現日誌發送到Kafka。

配置logback.xml。

方式2:開源jar

具體請參考資料:https://github.com/danielwegener/logback-kafka-appender

引入開源jar包,導入到項目中。

</dependency>
<groupld>com.github.danielwegener</groupld>
<artifactld>logback-kafka-appender</artifactld>
<version>0.2.0</version>
<scope>runtime</scope>
</dependency>

配置logback.xml,配置kafkaAppender,以及kafka信息(host, topic等)。

把kafkaAppender放到日誌輸出。

<root level="lNFO"><appender-ref ref="kafkaAppender"/></root>

總結

目前遠程日誌服務不支持跨服務日誌鏈路追蹤,需要zipkin實現鏈路追蹤。Tars已經集成zipkin)

可配置多台遠程日誌服務地址,實現咼可用。

可基於Logback做功能的橫向擴展。

Tars狀態監控

為了更好反映和監控小到服務進程、大到業務的運行質量情況,框架支持以下數據上報的功能:

提供了服務模塊間調用信息統計上報的功能。方便用戶查看服務的流量、延時、超時、異常等情況。

提供了用戶自定義屬性數據上報的功能。方便用戶查看服務的某些維度或者指標, 比如內存使用情況、隊列大小、cache命中率等。

提供了服務狀態變更和異常信息上報的功能。方便用戶查看服務的何時發布過、重啟過、宕過以及遇到的異常致命錯誤等。

Tars統計信息

統計信息包含訪問次數、耗時、異常和耗時。統計及聚合由各語言框架SDK提供,無論成功與否,框架 SDK都將會上報。
上報統計信息是向Tars框架內的tarsstat上報耗時信息和其他信息。無需用戶開發,只需在程序初始化期間正確設置相關信息後,就可以在框架內自動報告。
客戶端調用上報接口後,會暫時將信息存儲在內存中,當到達某個時間點時,會向tarsstat服務上報(默認為1分鐘上報一次)。兩個上報時間點之間的時間間隔稱為統計間隔,在統計間隔中會執行諸如聚合和比較相同key的一些操作。
Tars特性監控
特性監控上報的是服務腳本的自定義特性,它由特性名、特性值、以及統計方法構成,類似指標監控。每種語言SDK有默認的特性監控指標,比如 JAVA 默認包含 jvm.memory, jvm.gc 等。
也可以自定義拓展:
obj = property.create('name', [new property.POLICY.Count, new property.POLICY.Max]);
obj.report(value)
Tars服務監控
集群中所有機器都有Node服務用於管理應用,Node服務其中一個重要功能為服務監控。Node服務通過開啟一個監控線程,負責定時(時間間隔可以配置)輪詢監控Node所管理的所有服務的運行狀態,並定時向主控上報服務的運行狀態。

應用服務SDK會定期上報心跳。

Node服務會定期檢查SDK的心跳超時。

Node服務會定期檢測服務進程是否存在。


往期精彩回顧



樹莓派系統推出64位版本Oracle Linux 8 已上架至 Microsoft Store計算機史上最瘋狂一幕

覺得不錯,請點個在看呀

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()