日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

03 | SRE切入点:选择SLI,设定SLO

發(fā)布時(shí)間:2024/9/3 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 03 | SRE切入点:选择SLI,设定SLO 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

還是先來(lái)復(fù)習(xí)下上節(jié)課講的“系統(tǒng)可用性”的兩種計(jì)算方式,一種是從故障角度出發(fā),以時(shí)長(zhǎng)維度對(duì)系統(tǒng)進(jìn)行穩(wěn)定性評(píng)估;另一種是從成功請(qǐng)求占比角度出發(fā),以請(qǐng)求維度對(duì)系統(tǒng)進(jìn)行穩(wěn)定性評(píng)估。同時(shí),我們還講到,在 SRE 實(shí)踐中,通常會(huì)選擇第二種,也就是根據(jù)成功請(qǐng)求的比例來(lái)衡量穩(wěn)定性:

  • Availability = Successful request / Total request

SRE? 強(qiáng)調(diào)的穩(wěn)定性,一般不是看單次請(qǐng)求的成功與否,而是看整體情況,所以我們會(huì)把成功請(qǐng)求的占比設(shè)定為一個(gè)可以接受的目標(biāo),也就是我們常說(shuō)的“3 個(gè) 9”或“4 個(gè) 9”這樣的可量化的數(shù)字。

那么,這個(gè)“確定成功請(qǐng)求條件,設(shè)定達(dá)成占比目標(biāo)”的過(guò)程,在 SRE 中就是設(shè)定穩(wěn)定性衡量標(biāo)準(zhǔn)的 SLI 和 SLO 的過(guò)程。

具體來(lái)看下這兩個(gè)概念。SLI,Service Level Indicator,服務(wù)等級(jí)指標(biāo),其實(shí)就是我們選擇哪些指標(biāo)來(lái)衡量我們的穩(wěn)定性。而 SLO,Service Level Objective,服務(wù)等級(jí)目標(biāo),指的就是我們?cè)O(shè)定的穩(wěn)定性目標(biāo),比如“幾個(gè) 9”這樣的目標(biāo)。

SLI 和 SLO 這兩個(gè)概念你一定要牢牢記住,接下來(lái)我們會(huì)反復(fù)講到它們,因?yàn)槁涞?SRE 的第一步其實(shí)就是“選擇合適的 SLI,設(shè)定對(duì)應(yīng)的 SLO”。

好,那我們就正式開(kāi)始今天的內(nèi)容。我會(huì)帶你徹底理解 SLI 和 SLO 這兩個(gè)概念,并掌握識(shí)別 SLI、設(shè)定 SLO 的具體方法。

SLI SLO 到底是啥?

SLI 和 SLO 這兩個(gè)概念比較有意思,看字面意思好像就已經(jīng)很明白了,但是呢,仔細(xì)一想,你會(huì)發(fā)現(xiàn)它們很抽象。SLI 和 SLO 指的到底是啥呢?

接下來(lái)我給你講一個(gè)具體的例子,講完后,你肯定就能理解了。

我們以電商交易系統(tǒng)中的一個(gè)核心應(yīng)用“購(gòu)物車”為例,給它取名叫做 trade_cart。trade_cart 是以請(qǐng)求維度來(lái)衡量穩(wěn)定性的,也就是說(shuō)單次請(qǐng)求如果返回的是非 5xx 的狀態(tài)碼,我們認(rèn)為該次請(qǐng)求是成功的;如果返回的是 5xx 狀態(tài)碼,如我們常見(jiàn)的 502 或 503, 我們就判斷這次請(qǐng)求是失敗的。

但是,這個(gè)狀態(tài)碼只能標(biāo)識(shí)單次請(qǐng)求的場(chǎng)景。我們之前講過(guò),單次的異常與否并不能代表這個(gè)應(yīng)用是否穩(wěn)定,所以,我們就要看在一個(gè)周期內(nèi),所有調(diào)用次數(shù)的成功率是多少,以此來(lái)確定它是否穩(wěn)定。比如我們給這個(gè)“狀態(tài)碼返回為非? 5xx? 的比例”設(shè)定一個(gè)目標(biāo),如果大于等于 99.95%,我們就認(rèn)為這個(gè)應(yīng)用是穩(wěn)定的。

在 SRE 實(shí)踐中,我們用 SLI 和 SLO 來(lái)描述。“狀態(tài)碼為非 5xx 的比例”就是 SLI,“大于等于 99.95%”就是 SLO。說(shuō)得更直接一點(diǎn),SLO 是 SLI 要達(dá)成的目標(biāo)。

通過(guò)這個(gè)例子,你現(xiàn)在是不是已經(jīng)理解了這兩個(gè)概念呢。SLI 就是我們要監(jiān)控的指標(biāo),SLO 就是這個(gè)指標(biāo)對(duì)應(yīng)的目標(biāo)。

好,那接下來(lái)我們要解決的問(wèn)題就很具體了。我們應(yīng)該選擇哪些指標(biāo)來(lái)監(jiān)控系統(tǒng)的穩(wěn)定性? 指標(biāo)選好后,對(duì)應(yīng)地怎么定它的目標(biāo)呢?下面咱們就一一來(lái)探索。

系統(tǒng)運(yùn)行狀態(tài)指標(biāo)那么多,哪些適合 SLI

我們先來(lái)討論怎么選擇 SLI。要回答怎么選擇這個(gè)問(wèn)題,我們得先來(lái)看看都有哪些可供選擇的指標(biāo)。

在下面這張圖中,我列舉了系統(tǒng)中常見(jiàn)的監(jiān)控指標(biāo)。

第一個(gè)問(wèn)題:我要衡量誰(shuí)的穩(wěn)定性? 也就是先找到穩(wěn)定性的主體。主體確定后,我們繼續(xù)問(wèn)第二問(wèn)題:這個(gè)指標(biāo)能夠標(biāo)識(shí)這個(gè)實(shí)例是否穩(wěn)定嗎? 一般來(lái)說(shuō),這兩個(gè)問(wèn)題解決了,SLI 指標(biāo)也就確認(rèn)了。這些指標(biāo)是不是都很熟悉?那該怎么選呢?好像每一個(gè)指標(biāo)都很重要啊! 確實(shí),這些指標(biāo)都很重要。我們可以通過(guò)問(wèn)自己兩個(gè)問(wèn)題來(lái)選擇。

從我的經(jīng)驗(yàn)來(lái)看,給指標(biāo)分層非常關(guān)鍵。就像上圖那樣分層后,再看穩(wěn)定性主體是屬于哪一層的,就可以在這一層里選擇適合的指標(biāo)。但是,你要注意,即便都是應(yīng)用層的,針對(duì)具體的主體,這一層的指標(biāo)也不是每一個(gè)都適合。

根據(jù)這幾年的實(shí)踐經(jīng)驗(yàn),我總結(jié)了選擇 SLI 指標(biāo)的兩大原則。

  • 原則一:選擇能夠標(biāo)識(shí)一個(gè)主體是否穩(wěn)定的指標(biāo),如果不是這個(gè)主體本身的指標(biāo),或者不能標(biāo)識(shí)主體穩(wěn)定性的,就要排除在外。
  • 原則二:針對(duì)電商這類有用戶界面的業(yè)務(wù)系統(tǒng),優(yōu)先選擇與用戶體驗(yàn)強(qiáng)相關(guān)或用戶可以明顯感知的指標(biāo)。

還拿我們上面 trade_cart 的例子來(lái)說(shuō),主體確定了,就是 trade_cart,應(yīng)用層面的,請(qǐng)求返回狀態(tài)碼和時(shí)延就是很好的指標(biāo),再來(lái)檢查下它們能否標(biāo)識(shí)的 trade_cart 穩(wěn)定性,毫無(wú)疑問(wèn),這兩個(gè)指標(biāo)都可以,那么請(qǐng)求返回狀態(tài)碼和時(shí)延就可以作為 trade_cart 穩(wěn)定性的SLI 指標(biāo)。

我們換一個(gè)指標(biāo),CPU 的使用率這個(gè)指標(biāo)適合嗎?根據(jù)我們剛才說(shuō)的原則,既然我們關(guān)注的是 trade_cart 的運(yùn)行狀況,而 CPU 是系統(tǒng)層的指標(biāo),所以,在選擇應(yīng)用層 SLI 的指標(biāo)時(shí),自然會(huì)把 CPU 排除掉。

你可能會(huì)說(shuō),這樣是不是太武斷了呀?

我們簡(jiǎn)單來(lái)分析下。假設(shè) CPU 使用率達(dá)到了 95%,但是只要 CPU 處理能力足夠,狀態(tài)碼成功率可能還是保持在 4 個(gè) 9,時(shí)延還是在 80ms 以內(nèi),用戶體驗(yàn)沒(méi)有受到影響。另外一種情況,假設(shè) CPU 使用率只有 10%,但是可能因?yàn)榫W(wǎng)絡(luò)超時(shí)或中斷,導(dǎo)致大量的請(qǐng)求失敗,甚至是時(shí)延飆升,購(gòu)物車這個(gè)應(yīng)用的運(yùn)行狀態(tài)也不一定是正常的。所以結(jié)論就是,? CPU 使用率不管是 10% 還是 95%,都不能直接反映 trade_cart 運(yùn)行是正常還是異常,不適合作為 trade_cart 這樣的應(yīng)用運(yùn)行穩(wěn)定性的 SLI 指標(biāo)。

講到這里,你可能會(huì)問(wèn),哎呀,你說(shuō)的這兩個(gè)原則我理解了,分層也大概能做到,但是我還是需要做很多詳細(xì)的分析才能選擇出 SLI 指標(biāo),有沒(méi)有什么更便捷、更快速的方法來(lái)幫助我選擇啊?

嗯,不要著急,還真有這樣一套方法。怎么選 SLI,我們可以直接借鑒 Google 的方法: VALET。

快速識(shí)別 SLI 指標(biāo)的方法:VALET

VALET? 是? 5? 個(gè)單詞的首字母,分別是? Volume、Availability、Latency、Error? 和Ticket。這 5 個(gè)單詞就是我們選擇 SLI 指標(biāo)的 5 個(gè)維度。我們還是結(jié)合 trade_cart 這個(gè)例子,一起看一下每個(gè)維度具體是什么。

Volume- 容量

Volume(容量)是指服務(wù)承諾的最大容量是多少。比如,一個(gè)應(yīng)用集群的 QPS、TPS、會(huì)話數(shù)以及連接數(shù)等等,如果我們對(duì)日常設(shè)定一個(gè)目標(biāo),就是日常的容量 SLO,對(duì)雙 11 這樣的大促設(shè)定一個(gè)目標(biāo),就是大促?? SLO。對(duì)于數(shù)據(jù)平臺(tái),我們要看它的吞吐能力,比如每小時(shí)能處理的記錄數(shù)或任務(wù)數(shù)。

Availablity- 可用性

Availablity(可用性)代表服務(wù)是否正常。比如,我們前面介紹到的請(qǐng)求調(diào)用的非? 5xx? 狀態(tài)碼成功率,就可以歸于可用性。對(duì)于數(shù)據(jù)平臺(tái),我們就看任務(wù)的執(zhí)行成功情況,這個(gè)也可以根據(jù)不同的任務(wù)執(zhí)行狀態(tài)碼來(lái)歸類。

Latency- 時(shí)延

Latency(時(shí)延)是說(shuō)響應(yīng)是否足夠快。這是一個(gè)會(huì)直接影響用戶訪問(wèn)體驗(yàn)的指標(biāo)。對(duì)于任務(wù)類的作業(yè),我們會(huì)看每個(gè)任務(wù)是否在規(guī)定時(shí)間內(nèi)完成了。

講到這里,我要延伸下,因?yàn)橥ǔ?duì)于時(shí)延這個(gè)指標(biāo),我們不會(huì)直接做所有請(qǐng)求時(shí)延的平 均,因?yàn)檎麄€(gè)時(shí)延的分布也符合正態(tài)分布,所以通常會(huì)以類似“90% 請(qǐng)求的時(shí)延 <= 80ms,或者 95% 請(qǐng)求的時(shí)延 <=120ms ”這樣的方式來(lái)設(shè)定時(shí)延 SLO,熟悉數(shù)理統(tǒng)計(jì)的同學(xué)應(yīng)該知道,這個(gè) 90% 或 95% 我們稱之為置信區(qū)間。

因?yàn)椴慌懦芏嗾?qǐng)求從業(yè)務(wù)邏輯層面是不成功的,這時(shí)業(yè)務(wù)邏輯的處理時(shí)長(zhǎng)就會(huì)非常短(可能 10ms),或者出現(xiàn) 404 這樣的狀態(tài)碼(可能就 1ms)。從可用性來(lái)講,這些請(qǐng)求也算成功,但是這樣的請(qǐng)求會(huì)拉低整個(gè)均值。

同時(shí),也會(huì)出現(xiàn)另一種極端情況,就是某幾次請(qǐng)求因?yàn)楦鞣N原因,導(dǎo)致時(shí)延高了,到了500ms,但是因?yàn)榇螖?shù)所占比例較低,數(shù)據(jù)被平均掉了,單純從平均值來(lái)看是沒(méi)有異常的。但是從實(shí)際情況看,有少部分用戶的體驗(yàn)其實(shí)已經(jīng)非常糟糕了。所以,為了識(shí)別出這種情況,我們就要設(shè)定不同的置信區(qū)間來(lái)找出這樣的用戶占比,有針對(duì)性地解決。

Errors- 錯(cuò)誤率

錯(cuò)誤率有多少?這里除了 5xx 之外,我們還可以把 4xx 列進(jìn)來(lái),因?yàn)榍懊嫖覀兊姆?wù)可用性不錯(cuò),但是從業(yè)務(wù)和體驗(yàn)角度,4xx 太多,用戶也是不能接受的?;蛘呖梢栽黾右恍┳远x的狀態(tài)碼,看哪些狀態(tài)是對(duì)業(yè)務(wù)有損的,比如某些熱門(mén)商品總是缺貨,用戶登錄驗(yàn)證碼總是輸入錯(cuò)誤,這些雖不是系統(tǒng)錯(cuò)誤,但從業(yè)務(wù)角度來(lái)看,對(duì)用戶的體驗(yàn)影響還是比較大的。

Tickets- 人工介入

是否需要人工介入?如果一項(xiàng)工作或任務(wù)需要人工介入,那說(shuō)明一定是低效或有問(wèn)題的。舉一個(gè)我們常見(jiàn)的場(chǎng)景,數(shù)據(jù)任務(wù)跑失敗了,但是無(wú)法自動(dòng)恢復(fù),這時(shí)就要人工介入恢復(fù);或者超時(shí)了,也需要人工介入,來(lái)中斷任務(wù)、重啟拉起來(lái)跑等等。

Tickets 的 SLO 可以想象成它的中文含義:門(mén)票。一個(gè)周期內(nèi),門(mén)票數(shù)量是固定的,比如每月 20 張,每次人工介入,就消耗一張,如果消耗完了,還需要人工介入,那就是不達(dá)標(biāo)了。

這里我給出一個(gè) Google 提供的,針對(duì)類似于我們 trade_cart 的一個(gè)應(yīng)用服務(wù),基于VALET 設(shè)計(jì)出來(lái)的 SLO 的 Dashboard 樣例,結(jié)合上面我們介紹的部分,就一目了然了。

VALET示例圖

好,VALET 我們就講完了,怎么選 SLI 指標(biāo),你是不是一下子就清楚了??梢哉f(shuō),這是一個(gè)我們可以直接復(fù)用的工具。上面 Google 的這張 SLO 樣例圖,建議你多看幾遍,看到時(shí)候,對(duì)比思考下自己系統(tǒng)的情況。

如何通過(guò) SLO 計(jì)算可用性?

到這里,我們已經(jīng)能夠根據(jù)自己想要保障穩(wěn)定性的主體,來(lái)選擇合適的 SLI 指標(biāo)了,也知道SLO 就是對(duì)應(yīng) SLI 要實(shí)現(xiàn)的目標(biāo),比如“幾個(gè) 9”。

但是,我們前面講到了系統(tǒng)可用性:

  • Availability = Successful request / Total request

然后又深入到了提煉具體的 SLI,以及設(shè)定對(duì)應(yīng)的 SLO,那這兩者之間是什么關(guān)系呢?也就是通過(guò) SLO 應(yīng)該怎么去計(jì)算我們的系統(tǒng)可用性的呢?這就涉及到系統(tǒng)整體可用性的兩種計(jì)算方式。

第一種,直接根據(jù)成功的定義來(lái)計(jì)算。

也就是我們前面定義一個(gè)請(qǐng)求的返回狀態(tài)碼必須是非 5xx 才算成功,同時(shí)時(shí)延還要低于80ms,同時(shí)滿足這兩個(gè)條件,我們才算是成功的,也就是納入上述公式中 Successful request 的統(tǒng)計(jì)中,用公式來(lái)表示:

  • Successful = (狀態(tài)碼非 5xx) & (時(shí)延 <= 80ms)

如果還有其它條件,直接在后面增加做綜合判定。

但是,這種計(jì)算方式存在的問(wèn)題就是,對(duì)單次請(qǐng)求的成功與否的判定太過(guò)死板,容易錯(cuò)殺誤判。比如我們前面講對(duì)于時(shí)延,我們一般會(huì)設(shè)定置信區(qū)間,比如? 90%? 時(shí)延小于等于200ms? 這樣的場(chǎng)景,用這種方式就很難體現(xiàn)出來(lái)。而且,對(duì)于狀態(tài)碼成功率和時(shí)延成功率的容忍度,通常也是也不一樣的,通過(guò)這種方式就不夠準(zhǔn)確。所以,我們就會(huì)采取第二種方式。

第二種方式,SLO 方式計(jì)算

我們前面講時(shí)延時(shí)講過(guò)以下幾個(gè) SLO,這時(shí)我們?cè)O(shè)定穩(wěn)定性的時(shí)候,就需要把公式計(jì)算方式靈活調(diào)整定義一下了。

  • SLO1:99.95%?? 狀態(tài)碼成功率
  • SLO2:90% Latency <= 80ms?????????
  • SLO3:99% Latency <= 200ms

直接用公式表示:

  • Availability = SLO1 & SLO2 & SLO3

只有當(dāng)這個(gè)三個(gè)? SLO? 同時(shí)達(dá)標(biāo)時(shí),整個(gè)系統(tǒng)的穩(wěn)定性才算達(dá)標(biāo),有一個(gè)不達(dá)標(biāo)就不算達(dá)標(biāo),這樣就可以很好地將 SLO 設(shè)定的合理性與最終可用性結(jié)合了起來(lái)。所以,通常在 SRE 實(shí)踐中,我們通常會(huì)采用這種設(shè)定方式。

如果是這樣,第一種方式是不是就沒(méi)有用途了呢?當(dāng)然不是。第一種計(jì)算方式也會(huì)有它特有的應(yīng)用場(chǎng)景,它通常會(huì)被利用在第三方提供的服務(wù)承諾中,也就是 SLA( Service Level greement)。因?yàn)閷?duì)于第三方提供商來(lái)說(shuō),比如云廠商,它們要面對(duì)的客戶群體是非常大的,所以很難跟每一家客戶都去制定像 SLO 這么細(xì)粒度穩(wěn)定性目標(biāo),而且每家客戶對(duì)穩(wěn)定性的要求和感知也不同,就沒(méi)法統(tǒng)一。

這種情況下,反而是第一種計(jì)算方式是相對(duì)簡(jiǎn)單直接的,但是這樣也決定了 SLA 的承諾相比 SLO 肯定也相對(duì)比較寬松,因?yàn)?SLA 是商業(yè)服務(wù)承諾,如果達(dá)不成是要進(jìn)行賠償?shù)摹jP(guān)于?? SLA,最直接的參考資料,就是各個(gè)公有云廠商在官網(wǎng)公開(kāi)的信息資料,你可以找到這些資料,作為自己的一個(gè)補(bǔ)充學(xué)習(xí)。

總結(jié)

講到這里,怎么選擇 SLI 指標(biāo)、如何制定 SLO 目標(biāo),我們就介紹完了。你需要掌握下面三個(gè)重點(diǎn)。

1. 對(duì)系統(tǒng)相關(guān)指標(biāo)要分層,識(shí)別出我們要保障穩(wěn)定性的主體(系統(tǒng)、業(yè)務(wù)或應(yīng)用)是什么,然后基于這個(gè)主體來(lái)選擇合適的 SLI 指標(biāo)。

2. 不是所有的指標(biāo)都是適合做 SLI 指標(biāo),它一定要能夠直接體現(xiàn)和反映主體的穩(wěn)定性狀態(tài)??梢詢?yōu)先選擇用戶或使用者能感受到的體驗(yàn)類指標(biāo),比如時(shí)延、可用性、錯(cuò)誤率等。

3. 掌握 VALET 方法,快速選擇 SLI 指標(biāo)。

思考題

最后,給你留一個(gè)思考題。

下面我給出一個(gè) Google 的 SLI 和 SLO 設(shè)定標(biāo)準(zhǔn)示例,內(nèi)容很直觀,需要你認(rèn)真研究一下這個(gè)文檔,結(jié)合今天我們所講的內(nèi)容,請(qǐng)你嘗試按照 Google 提供的規(guī)范格式,制定一個(gè)自己所負(fù)責(zé)系統(tǒng)的 SLO。

Google 的 SLI 和 SLO 設(shè)定模板鏈接:

https://landing.google.com/sre/workbook/chapters/slo-document

總結(jié)

以上是生活随笔為你收集整理的03 | SRE切入点:选择SLI,设定SLO的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。