SLICK: Facebook基于SLO的可靠性保障實踐

定義服務的SLI和SLO,通過全局系統呈現、處理所有服務的SLI/SLO,從而幫助SRE實踐在系統中的落地。本文介紹了Facebook(Meta)在這方面的實踐。原文:SLICK: Adopting SLOs for improved reliability[1]

我們需要與使用我們的應用程序和產品的人們和社區不斷保持聯系,從而為他們提供足夠的支持。我們希望將可靠性方面的經驗提供出來,與我們支持的更大的社區建立信任關系。在像Meta(Facebook的新名字)這樣大規模、快速發展的環境中,有成千上萬的工程師在頻繁部署代碼、創建特性原型,并對更改進行迭代,因此保障可靠性的工作尤其具有挑戰性。我們需要對每個產品、功能和服務有明確的期望,從而可以更好的為使用我們服務的用戶提供可視化的體驗,并分析系統之間的任何瓶頸或復雜的交互。

我們開始研究服務水平指標(SLIs,service-level indicators)和服務水平目標(SLOs,service-level objectives),將其作為期望的設置,并根據這些期望度量服務的性能。為了提供工具支持,我們構建了SLICK,這可以看作是一個專門的SLO商店。有了SLICK,我們能夠集中SLI和SLO定義,從而輕松找到和理解另一個服務的可靠性。SLICK可以利用高留存率,以及其他工具無法找到的關鍵服務指標的完整粒度數據,為服務開發團隊提供洞見,并將SLO與公司的其他各種工作流集成起來,以確保SLO成為日常工作的一部分。

在SLICK出現之前,SLO和其他性能指標存儲在定制的儀表板、文檔或其他工具中。如果想要定位團隊的SLO,可能需要花費一個小時的時間來搜索或要求人們找到相關的數據。此外,之前的系統并沒有以完整的粒度長時間(超過幾周)保留這些指標,這使得對SLO進行更長時間的分析幾乎是不可能的。有了SLICK,我們現在能夠:

  1. 以一致的方式為服務定義SLO
  2. 精度高達分鐘級別的度量數據,最多可保留兩年
  3. 對SLI/SLO指標有標準的可視化和洞見
  4. 定期向內部小組發送可靠性報告,允許團隊基于這些報告進行可靠性檢查

可發現性(Discoverability)

SLICK定義了一個標準的模型,幫助公司里的每個人用同樣的術語討論可靠性。這使得新的服務開發團隊能夠無縫遵循公司范圍的標準,在服務的早期設計階段就考慮到服務需要達到的可靠性期望。

只要知道服務名,SLICK就可以幫助我們定位特定服務的可靠性指標和性能數據。SLICK通過構建內置的服務索引來實現這一點,該索引鏈接到帶有標準可視化的儀表板,以分析和評估服務的可靠性。因此,只需單擊一下,就可以知道服務當前是否滿足用戶的期望,如果有任何問題,就可以馬上開始尋找答案。

SLICK的SLO索引搜索示例

長期洞察(Long-term insights)

服務可靠性的問題非常復雜。在某些情況下,單個錯誤的部署或某一段代碼的變更可能就會導致服務突然退化。而在其他情況下,有可能隨著服務的發展,不斷累積微小的不可靠因素。

SLICK允許服務所有者使用最長可達兩年的完整粒度的度量和性能數據。SLICK中的存儲過程每小時運行一次數據管道,捕獲所有SLI時間序列數據,并將它們存儲在分片的MySQL數據庫中。然后分析這些內容,形成可消費的洞見。這使得每個人——從工程師到TPM到領導——都能夠了解隨著時間的推移,可能會出現的服務可靠性的退化,而這些信息在之前很有可能會被忽視。

工作流(Workflows)

為了放大價值并幫助我們使用新的長期洞見來推動決策,SLI和SLO需要使用一種人人都能理解和使用的語言來規劃和評估影響。為了實現這一點,我們將SLO集成到公共工作流中。

當大規模事件發生時,通過查看實時工具中的SLO,服務開發團隊可以評估其對整體用戶體驗的影響。另一方面,當發生重大事件時,也可以基于SLO來驅動處理流程。我們首先使用SLO作為公司內部事件的標準,其他系統可以使用這些標準來獲得用戶看到的問題的警報。

從本質上說,將SLI和SLO集成到其他工具中,可以方便的將尚未引入的服務引入到SLICK中,從而以易于訪問和易于使用的方式獲得有效的見解。

SLICK引入(SLICK onboarding)

服務開發團隊通過UI或者編寫一個簡單的配置文件來支持SLICK,該文件遵循帶有服務名稱等信息的DSL,可以查詢SLI時間序列以及相應的SLO。

在用戶測試并提交配置之后,SLICK會自動將服務添加到索引中,然后生成特定于服務的指示板,并開始收集數據以進行長期觀測。除了這個配置文件,其他所有集成都是開箱即用的。

使用SLICK

1)儀表板

SLICK儀表板為服務開發團隊提供了監控實時SLI數據以及基于高留存率、長期數據的歷史趨勢的能力。

左邊以完整的粒度說明了SLI時間序列。右側顯示基于時間的SLI值的每周聚合和SLO的相對差距。

2)周期性報告

SLICK為工程師提供了SLO性能總結報告的能力,這些報告會定期發布給內部團隊。報告為服務開發團隊提供了一種簡單的方法來關注回歸并進行回顧,我們經??吹椒臻_發團隊在這些帖子的評論中討論可靠性問題。

一周內的SLO性能的SLICK示例報告。

3)CLI

SLICK提供了命令行接口,使服務所有者能夠執行某些操作,比如回填數據、根據需要生成報告,或者測試對SLICK配置的更改的效果。

SLICK架構

總體架構

  • SLICK配置(SLICK CONFIGS):使用SLICK的DSL編寫的配置文件,由用戶提交到SLICK配置存儲區。
  • SLICK同步器(SLICK SYNCER):將對SLICK配置所做的更改同步到SLICK配置元數據存儲的服務。
  • SLICK UI:為每個服務生成的SLICK儀表板,SLICK UI還提供了前面提到的索引。
  • SLICK服務(SLICK SERVICE):提供API的服務器,能夠回答諸如“如何為特定的可視化計算SLO?”這樣的問題。服務器允許我們抽象出關于數據存儲和分片的所有細節,使調用者能夠輕松找到所需數據。
  • SLICK數據流水線(SLICK DATA PIPELINES):周期性運行的流水線,以便長期獲取SLI數據。

數據獲取詳細設計(Zooming in on the data ingestion)

SLICK每小時運行一次數據流水線,這些流水線通過查詢SLICK的配置元數據來查找所有SLI。流水線對被監控的數據集執行所有需要的查詢,以獲得以分鐘為粒度的當前時刻每個SLI的原始時間序列數據。

然后,流水線參考SLICK分片映射確定每個SLI的數據應該存儲在哪里,然后將數據批量插入到適當的分片中。

此外,可以執行數據質量檢查,從而使我們對數據流水線的操作方式充滿信心,并快速捕獲真正的錯誤。數據質量檢查針對一組確定性測試時間序列運行,用處理真實SLI序列同樣的方式處理這些確定性時間序列,也就是說,對它們執行流水線,將它們插入到分片數據庫中,最后,將數據庫中的行與預期的時間序列進行比較,以驗證系統的行為。

Meta應用SLICK的SLO的當前狀態

在2019年創建了SLICK后,我們發現到2021年,全公司已經有超過1000個服務接入了SLICK。我們還看到其他許多公司在可靠性方面的成功案例,下面會分享其中的一部分。請注意,出于保密原因,下面圖表使用了模擬數據,我們刪除了日期并略微修改了數值,但圖表的整體形狀保持不變。

LogDevice:回歸檢測和修復示例

LogDevice[2]是我們的分布式日志存儲系統。服務開發團隊可以通過SLICK對讀可用性進行回歸檢查,并且可以基于這些數據修復回歸發現的問題,并通過SLICK確認修復恢復了讀取可用性的服務級別。

LogDevice可靠性(讀可用性)。此圖不按比例繪制,僅供討論之用。
后端ML服務可靠性示例

2020年,Meta公司一個關鍵后端ML系統開始出現顯著的可靠性退化,而這是一個影響到我們終端應用用戶的ML服務。

SLICK數據顯示,該服務始終沒有達到SLO要求,服務開發團隊能夠識別這種回歸,并幫助啟動了可靠性評估,從而幫助他們調查、發現和修復可靠性問題的根本原因。團隊解決了根本原因,服務回到了滿足SLO的狀態。

后端ML服務可靠性(可用性)。此圖不按比例繪制,僅供討論之用。

我們的收獲

在推進SLO的過程中,我們走過了很長的一段路,并從中吸取了一些經驗教訓:

  • 長期跟蹤能力非常有價值,能夠幫助我們了解趨勢,從而使我們可以計劃一段更長時間的可靠性工作。
  • SLO必須處于工程文化的中心,無論是在戰略可靠性規劃還是日常溝通中。
  • 引入SLO有助加強我們服務的整體可靠性。

SLICK團隊將繼續致力于平臺的發展以提供更多的價值。我們特別希望在以下領域進行投資:

  1. 使服務的SLO與其依賴項的SLO保持一致。這將允許團隊理解他們的依賴關系如何影響他們的性能,還能幫助我們揭示調用棧中服務之間不匹配的期望值,而這些不匹配因素有可能觸發級聯失敗。
  2. 為服務開發團隊提供如何提高服務可靠性的反饋和建議。我們希望利用在提高可靠性方面的經驗,為服務開發團隊提供可操作的見解,以幫助他們提高可靠性并滿足SLO。
  3. 進一步發展SLICK的覆蓋范圍。我們希望在SLICK上搭載更多的團隊和服務,為了做到這一點,SLICK需要保持可靠性和可擴展性(滿足我們自己的SLO)。

References:
[1] SLICK: Adopting SLOs for improved reliability: https://engineering.fb.com/2021/12/13/production-engineering/slick/
[2] LogDevice: https://engineering.fb.com/2017/08/31/core-data/logdevice-a-distributed-data-store-for-logs/

你好,我是俞凡,在Motorola做過研發,現在在Mavenir做技術工作,對通信、網絡、后端架構、云原生、DevOps、CICD、區塊鏈、AI等技術始終保持著濃厚的興趣,平時喜歡閱讀、思考,相信持續學習、終身成長,歡迎一起交流學習。
微信公眾號:DeepNoMind

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容