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