為什么需要服務(wù)治理
服務(wù)治理是隨著微服務(wù)一起出現(xiàn)的烁峭。在遠(yuǎn)古時(shí)代的單體服務(wù)容客,所有業(yè)務(wù)部署在一個(gè)進(jìn)程,共享相同的資源约郁,包括機(jī)器缩挑、網(wǎng)絡(luò)等資源。所以業(yè)務(wù)之間通信或者交互簡(jiǎn)單鬓梅。但是微服務(wù)中的每個(gè)服務(wù)都有自己獨(dú)立的資源供置,服務(wù)之間交互就變得復(fù)雜多了。服務(wù)獨(dú)立了绽快,問(wèn)題也隨之而來(lái)芥丧。怎么知道其他服務(wù)在哪(服務(wù)發(fā)現(xiàn)),能不能提供服務(wù)(注冊(cè)中心或者服務(wù)探活)坊罢,資源如何調(diào)度(資源調(diào)度)续担、服務(wù)如何通信(流量治理)等等問(wèn)題如何解決,服務(wù)治理應(yīng)運(yùn)而生活孩。
如何做服務(wù)治理
基礎(chǔ)
我們?cè)谌粘V邢胍芾砘蛘呓鉀Q一些人或者事情物遇,需要盡可能地了解對(duì)方,才能進(jìn)行。所以想要服務(wù)治理询兴,我們也要了解服務(wù)乃沙。但是需要了解哪些方面呢?
指標(biāo)
我們可以通過(guò)指標(biāo)來(lái)了解服務(wù)狀態(tài)诗舰。指標(biāo)可以分為兩種:基礎(chǔ)指標(biāo)和業(yè)務(wù)指標(biāo)警儒。
基礎(chǔ)指標(biāo)
基礎(chǔ)指標(biāo)主要是一些通用的指標(biāo)。下面是一些常見(jiàn)的基礎(chǔ)指標(biāo):
? 機(jī)器指標(biāo)(cpu始衅、內(nèi)存冷蚂、網(wǎng)絡(luò))
? jvm metric
? pod metric
? 基礎(chǔ)組件指標(biāo)(db metric、redis metric等)
業(yè)務(wù)指標(biāo)
業(yè)務(wù)指標(biāo)是指和業(yè)務(wù)相關(guān)的指標(biāo)汛闸。這些指標(biāo)反映了業(yè)務(wù)的狀態(tài)蝙茶。比如業(yè)務(wù)處理延遲、速度等诸老。
資源
我們?cè)诠芾矸?wù)時(shí)需要知道服務(wù)需要哪些資源隆夯,需要多少。這樣我們才能給服務(wù)分配資源别伏。資源調(diào)度的前提是:我們知道還剩多少資源蹄衷。所以我們需要基礎(chǔ)指標(biāo)。只有基礎(chǔ)指標(biāo)健全厘肮,我們才能獲得剩余資源的信息愧口,才能進(jìn)行資源調(diào)度。目前資源調(diào)度一般都是用k8s來(lái)管理类茂。
依賴
服務(wù)正常運(yùn)行需要其依賴的服務(wù)正常運(yùn)行耍属。所以我們需要知道服務(wù)的依賴關(guān)系,調(diào)用鏈情況巩检。通過(guò)調(diào)用鏈我們可以知道依賴關(guān)系厚骗,業(yè)務(wù)瓶頸在哪,哪些業(yè)務(wù)是關(guān)鍵業(yè)務(wù)兢哭,需要擴(kuò)縮容领舰。
常見(jiàn)的調(diào)用鏈中間:jeager、skywalking迟螺、zipkin冲秽。在選型時(shí),優(yōu)先考慮業(yè)務(wù)入侵小的方案煮仇,例如Java 字節(jié)碼技術(shù)劳跃。
基礎(chǔ)設(shè)施
隨著服務(wù)數(shù)量的增加,管理的難度也隨之劇增浙垫。所以我們需要搭建基礎(chǔ)設(shè)施來(lái)輔助管理。
k8s
k8s 是目前最火的服務(wù)編排系統(tǒng),我們也就在贅述了夹姥。
配置中心
配置中心是為服務(wù)提供配置的杉武,我們可以通過(guò)配置中心對(duì)服務(wù)進(jìn)行管理,比如業(yè)務(wù)使用哪套算法模型辙售,業(yè)務(wù)出現(xiàn)線程數(shù)量等轻抱。常見(jiàn)的配置中心有:zookeeper、consul旦部、Nacos祈搜、apollo、spring cloud config士八。
zookeeper和consul 只具有簡(jiǎn)單的配置中心功能容燕,相當(dāng)于nosql db。在服務(wù)體量不大婚度,服務(wù)治理場(chǎng)景簡(jiǎn)單的時(shí)候可以使用蘸秘。但是對(duì)于復(fù)雜或者高級(jí)的服務(wù)治理場(chǎng)景還是捉襟見(jiàn)肘。比如灰度發(fā)布蝗茁。
Nacos醋虏、apollo、spring cloud config 提供了配置中心高級(jí)功能:配置推送哮翘,配置刷新颈嚼,配置隔離等。有如下場(chǎng)景的時(shí)優(yōu)先從三者中選擇:
? 多環(huán)境(開(kāi)發(fā)饭寺、測(cè)試阻课、線上)
? 多租戶
? 灰度發(fā)布
? 資源隔離
注冊(cè)中心
注冊(cè)中心的本質(zhì)是服務(wù)探活。注冊(cè)中心會(huì)對(duì)外提供可用服務(wù)地址查詢佩研。比如gprc 可以使用注冊(cè)中心查詢存活實(shí)例柑肴,然后做負(fù)載均衡。在spring cloud 中的feign的負(fù)載均衡也都是基于注冊(cè)中心旬薯。
自動(dòng)化
服務(wù)治理的最終目標(biāo)就是實(shí)現(xiàn)自動(dòng)化晰骑。但是自動(dòng)化是建立在前面兩項(xiàng)之上的,擁有必要的數(shù)據(jù)我們才能自動(dòng)化绊序。
流量治理
流量治理有兩種主要場(chǎng)景:激增大流量和灰度發(fā)布硕舆。激增大流量可以通過(guò)自動(dòng)擴(kuò)縮容解決,我們后面在說(shuō)骤公。
灰度發(fā)布
不同版本配置不同:這個(gè)問(wèn)題需要使用配置中心解決抚官。
不同版本流量不同:service mesh 可以解決這個(gè)問(wèn)題。
自動(dòng)擴(kuò)縮容
要實(shí)現(xiàn)自動(dòng)擴(kuò)縮容阶捆,我們就需要知道哪些服務(wù)需要擴(kuò)縮容凌节。我們需要定義一系列指標(biāo)钦听,用于衡量服務(wù)。
負(fù)載負(fù)載情況:我們可以監(jiān)控pod cpu 情況倍奢;api 調(diào)用時(shí)長(zhǎng)P99情況朴上;api 調(diào)用頻率情況。
流量情況:api 調(diào)用數(shù)量卒煞;網(wǎng)絡(luò)情況痪宰。
通過(guò)各種指標(biāo)我們可以知道服務(wù)狀態(tài),從而我們可以指定擴(kuò)縮容規(guī)則畔裕。
上面提到的每項(xiàng)技術(shù)都能展開(kāi)講很久衣撬,之后的文章我們?cè)谠敿?xì)聊聊。