定義服務(wù)的SLI和SLO,通過全局系統(tǒng)呈現(xiàn)、處理所有服務(wù)的SLI/SLO,從而幫助SRE實(shí)踐在系統(tǒng)中的落地。本文介紹了Facebook(Meta)在這方面的實(shí)踐。原文:SLICK: Adopting SLOs for improved reliability
我們需要與使用我們的應(yīng)用程序和產(chǎn)品的人們和社區(qū)不斷保持聯(lián)系,從而為他們提供足夠的支持。我們希望將可靠性方面的經(jīng)驗(yàn)提供出來,與我們支持的更大的社區(qū)建立信任關(guān)系。在像Meta(Facebook的新名字)這樣大規(guī)模、快速發(fā)展的環(huán)境中,有成千上萬的工程師在頻繁部署代碼、創(chuàng)建特性原型,并對(duì)更改進(jìn)行迭代,因此保障可靠性的工作尤其具有挑戰(zhàn)性。我們需要對(duì)每個(gè)產(chǎn)品、功能和服務(wù)有明確的期望,從而可以更好的為使用我們服務(wù)的用戶提供可視化的體驗(yàn),并分析系統(tǒng)之間的任何瓶頸或復(fù)雜的交互。
我們開始研究服務(wù)水平指標(biāo)(SLIs,service-level indicators)和服務(wù)水平目標(biāo)(SLOs,service-level objectives),將其作為期望的設(shè)置,并根據(jù)這些期望度量服務(wù)的性能。為了提供工具支持,我們構(gòu)建了SLICK,這可以看作是一個(gè)專門的SLO商店。有了SLICK,我們能夠集中SLI和SLO定義,從而輕松找到和理解另一個(gè)服務(wù)的可靠性。SLICK可以利用高留存率,以及其他工具無法找到的關(guān)鍵服務(wù)指標(biāo)的完整粒度數(shù)據(jù),為服務(wù)開發(fā)團(tuán)隊(duì)提供洞見,并將SLO與公司的其他各種工作流集成起來,以確保SLO成為日常工作的一部分。
在SLICK出現(xiàn)之前,SLO和其他性能指標(biāo)存儲(chǔ)在定制的儀表板、文檔或其他工具中。如果想要定位團(tuán)隊(duì)的SLO,可能需要花費(fèi)一個(gè)小時(shí)的時(shí)間來搜索或要求人們找到相關(guān)的數(shù)據(jù)。此外,之前的系統(tǒng)并沒有以完整的粒度長(zhǎng)時(shí)間(超過幾周)保留這些指標(biāo),這使得對(duì)SLO進(jìn)行更長(zhǎng)時(shí)間的分析幾乎是不可能的。有了SLICK,我們現(xiàn)在能夠:
以一致的方式為服務(wù)定義SLO
精度高達(dá)分鐘級(jí)別的度量數(shù)據(jù),最多可保留兩年
對(duì)SLI/SLO指標(biāo)有標(biāo)準(zhǔn)的可視化和洞見
定期向內(nèi)部小組發(fā)送可靠性報(bào)告,允許團(tuán)隊(duì)基于這些報(bào)告進(jìn)行可靠性檢查
可發(fā)現(xiàn)性(Discoverability)
SLICK定義了一個(gè)標(biāo)準(zhǔn)的模型,幫助公司里的每個(gè)人用同樣的術(shù)語討論可靠性。這使得新的服務(wù)開發(fā)團(tuán)隊(duì)能夠無縫遵循公司范圍的標(biāo)準(zhǔn),在服務(wù)的早期設(shè)計(jì)階段就考慮到服務(wù)需要達(dá)到的可靠性期望。
只要知道服務(wù)名,SLICK就可以幫助我們定位特定服務(wù)的可靠性指標(biāo)和性能數(shù)據(jù)。SLICK通過構(gòu)建內(nèi)置的服務(wù)索引來實(shí)現(xiàn)這一點(diǎn),該索引鏈接到帶有標(biāo)準(zhǔn)可視化的儀表板,以分析和評(píng)估服務(wù)的可靠性。因此,只需單擊一下,就可以知道服務(wù)當(dāng)前是否滿足用戶的期望,如果有任何問題,就可以馬上開始尋找答案。
上圖是SLICK的SLO索引搜索示例
長(zhǎng)期洞察(Long-term insights)
服務(wù)可靠性的問題非常復(fù)雜。在某些情況下,單個(gè)錯(cuò)誤的部署或某一段代碼的變更可能就會(huì)導(dǎo)致服務(wù)突然退化。而在其他情況下,有可能隨著服務(wù)的發(fā)展,不斷累積微小的不可靠因素。
SLICK允許服務(wù)所有者使用最長(zhǎng)可達(dá)兩年的完整粒度的度量和性能數(shù)據(jù)。SLICK中的存儲(chǔ)過程每小時(shí)運(yùn)行一次數(shù)據(jù)管道,捕獲所有SLI時(shí)間序列數(shù)據(jù),并將它們存儲(chǔ)在分片的MySQL數(shù)據(jù)庫(kù)中。然后分析這些內(nèi)容,形成可消費(fèi)的洞見。這使得每個(gè)人——從工程師到TPM到領(lǐng)導(dǎo)——都能夠了解隨著時(shí)間的推移,可能會(huì)出現(xiàn)的服務(wù)可靠性的退化,而這些信息在之前很有可能會(huì)被忽視。
工作流(Workflows)
為了放大價(jià)值并幫助我們使用新的長(zhǎng)期洞見來推動(dòng)決策,SLI和SLO需要使用一種人人都能理解和使用的語言來規(guī)劃和評(píng)估影響。為了實(shí)現(xiàn)這一點(diǎn),我們將SLO集成到公共工作流中。
當(dāng)大規(guī)模事件發(fā)生時(shí),通過查看實(shí)時(shí)工具中的SLO,服務(wù)開發(fā)團(tuán)隊(duì)可以評(píng)估其對(duì)整體用戶體驗(yàn)的影響。另一方面,當(dāng)發(fā)生重大事件時(shí),也可以基于SLO來驅(qū)動(dòng)處理流程。我們首先使用SLO作為公司內(nèi)部事件的標(biāo)準(zhǔn),其他系統(tǒng)可以使用這些標(biāo)準(zhǔn)來獲得用戶看到的問題的警報(bào)。
從本質(zhì)上說,將SLI和SLO集成到其他工具中,可以方便的將尚未引入的服務(wù)引入到SLICK中,從而以易于訪問和易于使用的方式獲得有效的見解。
SLICK引入(SLICK onboarding)
服務(wù)開發(fā)團(tuán)隊(duì)通過UI或者編寫一個(gè)簡(jiǎn)單的配置文件來支持SLICK,該文件遵循帶有服務(wù)名稱等信息的DSL,可以查詢SLI時(shí)間序列以及相應(yīng)的SLO。
在用戶測(cè)試并提交配置之后,SLICK會(huì)自動(dòng)將服務(wù)添加到索引中,然后生成特定于服務(wù)的指示板,并開始收集數(shù)據(jù)以進(jìn)行長(zhǎng)期觀測(cè)。除了這個(gè)配置文件,其他所有集成都是開箱即用的。
使用SLICK
1)儀表板
SLICK儀表板為服務(wù)開發(fā)團(tuán)隊(duì)提供了監(jiān)控實(shí)時(shí)SLI數(shù)據(jù)以及基于高留存率、長(zhǎng)期數(shù)據(jù)的歷史趨勢(shì)的能力。
上圖:左邊以完整的粒度說明了SLI時(shí)間序列。右側(cè)顯示基于時(shí)間的SLI值的每周聚合和SLO的相對(duì)差距。
2)周期性報(bào)告
SLICK為工程師提供了SLO性能總結(jié)報(bào)告的能力,這些報(bào)告會(huì)定期發(fā)布給內(nèi)部團(tuán)隊(duì)。報(bào)告為服務(wù)開發(fā)團(tuán)隊(duì)提供了一種簡(jiǎn)單的方法來關(guān)注回歸并進(jìn)行回顧,我們經(jīng)常看到服務(wù)開發(fā)團(tuán)隊(duì)在這些帖子的評(píng)論中討論可靠性問題。
3)CLI
SLICK提供了命令行接口,使服務(wù)所有者能夠執(zhí)行某些操作,比如回填數(shù)據(jù)、根據(jù)需要生成報(bào)告,或者測(cè)試對(duì)SLICK配置的更改的效果。
SLICK架構(gòu)
總體架構(gòu)
SLICK配置(SLICK CONFIGS):使用SLICK的DSL編寫的配置文件,由用戶提交到SLICK配置存儲(chǔ)區(qū)。
SLICK同步器(SLICK SYNCER):將對(duì)SLICK配置所做的更改同步到SLICK配置元數(shù)據(jù)存儲(chǔ)的服務(wù)。
SLICK UI:為每個(gè)服務(wù)生成的SLICK儀表板,SLICK UI還提供了前面提到的索引。
SLICK服務(wù)(SLICK SERVICE):提供API的服務(wù)器,能夠回答諸如“如何為特定的可視化計(jì)算SLO?”這樣的問題。服務(wù)器允許我們抽象出關(guān)于數(shù)據(jù)存儲(chǔ)和分片的所有細(xì)節(jié),使調(diào)用者能夠輕松找到所需數(shù)據(jù)。
SLICK數(shù)據(jù)流水線(SLICK DATA PIPELINES):周期性運(yùn)行的流水線,以便長(zhǎng)期獲取SLI數(shù)據(jù)。
數(shù)據(jù)獲取詳細(xì)設(shè)計(jì)(Zooming in on the data ingestion)
SLICK每小時(shí)運(yùn)行一次數(shù)據(jù)流水線,這些流水線通過查詢SLICK的配置元數(shù)據(jù)來查找所有SLI。流水線對(duì)被監(jiān)控的數(shù)據(jù)集執(zhí)行所有需要的查詢,以獲得以分鐘為粒度的當(dāng)前時(shí)刻每個(gè)SLI的原始時(shí)間序列數(shù)據(jù)。
然后,流水線參考SLICK分片映射確定每個(gè)SLI的數(shù)據(jù)應(yīng)該存儲(chǔ)在哪里,然后將數(shù)據(jù)批量插入到適當(dāng)?shù)姆制小?/p>
此外,可以執(zhí)行數(shù)據(jù)質(zhì)量檢查,從而使我們對(duì)數(shù)據(jù)流水線的操作方式充滿信心,并快速捕獲真正的錯(cuò)誤。數(shù)據(jù)質(zhì)量檢查針對(duì)一組確定性測(cè)試時(shí)間序列運(yùn)行,用處理真實(shí)SLI序列同樣的方式處理這些確定性時(shí)間序列,也就是說,對(duì)它們執(zhí)行流水線,將它們插入到分片數(shù)據(jù)庫(kù)中,最后,將數(shù)據(jù)庫(kù)中的行與預(yù)期的時(shí)間序列進(jìn)行比較,以驗(yàn)證系統(tǒng)的行為。
Meta應(yīng)用SLICK的SLO的當(dāng)前狀態(tài)
在2019年創(chuàng)建了SLICK后,我們發(fā)現(xiàn)到2021年,全公司已經(jīng)有超過1000個(gè)服務(wù)接入了SLICK。我們還看到其他許多公司在可靠性方面的成功案例,下面會(huì)分享其中的一部分。請(qǐng)注意,出于保密原因,下面圖表使用了模擬數(shù)據(jù),我們刪除了日期并略微修改了數(shù)值,但圖表的整體形狀保持不變。
LogDevice:回歸檢測(cè)和修復(fù)示例
LogDevice是我們的分布式日志存儲(chǔ)系統(tǒng)。服務(wù)開發(fā)團(tuán)隊(duì)可以通過SLICK對(duì)讀可用性進(jìn)行回歸檢查,并且可以基于這些數(shù)據(jù)修復(fù)回歸發(fā)現(xiàn)的問題,并通過SLICK確認(rèn)修復(fù)恢復(fù)了讀取可用性的服務(wù)級(jí)別。
上圖:LogDevice可靠性(讀可用性)。此圖不按比例繪制,僅供討論之用。
后端ML服務(wù)可靠性示例
2020年,Meta公司一個(gè)關(guān)鍵后端ML系統(tǒng)開始出現(xiàn)顯著的可靠性退化,而這是一個(gè)影響到我們終端應(yīng)用用戶的ML服務(wù)。
SLICK數(shù)據(jù)顯示,該服務(wù)始終沒有達(dá)到SLO要求,服務(wù)開發(fā)團(tuán)隊(duì)能夠識(shí)別這種回歸,并幫助啟動(dòng)了可靠性評(píng)估,從而幫助他們調(diào)查、發(fā)現(xiàn)和修復(fù)可靠性問題的根本原因。團(tuán)隊(duì)解決了根本原因,服務(wù)回到了滿足SLO的狀態(tài)。
上圖:后端ML服務(wù)可靠性(可用性)。此圖不按比例繪制,僅供討論之用。
我們的收獲
在推進(jìn)SLO的過程中,我們走過了很長(zhǎng)的一段路,并從中吸取了一些經(jīng)驗(yàn)教訓(xùn):
長(zhǎng)期跟蹤能力非常有價(jià)值,能夠幫助我們了解趨勢(shì),從而使我們可以計(jì)劃一段更長(zhǎng)時(shí)間的可靠性工作。
SLO必須處于工程文化的中心,無論是在戰(zhàn)略可靠性規(guī)劃還是日常溝通中。
引入SLO有助加強(qiáng)我們服務(wù)的整體可靠性。
SLICK團(tuán)隊(duì)將繼續(xù)致力于平臺(tái)的發(fā)展以提供更多的價(jià)值。我們特別希望在以下領(lǐng)域進(jìn)行投資:
使服務(wù)的SLO與其依賴項(xiàng)的SLO保持一致。這將允許團(tuán)隊(duì)理解他們的依賴關(guān)系如何影響他們的性能,還能幫助我們揭示調(diào)用棧中服務(wù)之間不匹配的期望值,而這些不匹配因素有可能觸發(fā)級(jí)聯(lián)失敗。
為服務(wù)開發(fā)團(tuán)隊(duì)提供如何提高服務(wù)可靠性的反饋和建議。我們希望利用在提高可靠性方面的經(jīng)驗(yàn),為服務(wù)開發(fā)團(tuán)隊(duì)提供可操作的見解,以幫助他們提高可靠性并滿足SLO。
進(jìn)一步發(fā)展SLICK的覆蓋范圍。我們希望在SLICK上搭載更多的團(tuán)隊(duì)和服務(wù),為了做到這一點(diǎn),SLICK需要保持可靠性和可擴(kuò)展性(滿足我們自己的SLO)。
編輯:黃飛
-
Facebook
+關(guān)注
關(guān)注
3文章
1429瀏覽量
54719 -
Meta
+關(guān)注
關(guān)注
0文章
270瀏覽量
11378
原文標(biāo)題:Facebook基于SLO的可靠性保障實(shí)踐
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論