滴滴全民拼車日背後的運維技術揭秘

滴滴技術 發表於 2022-12-06

滴滴全民拼車日背後的運維技術揭秘

桔妹導讀:抗擊疫情,桔妹提醒大家出門帶好口罩,勤洗手,多通風。武漢加油!中國加油!大家開工之際,桔妹閱讀滴滴全民拼車日背後的運維技術揭秘

滴滴在2019年12月舉辦了空前盛大的全民拼車日活動,期間拼車價格優惠幅度空間巨大,有26個城市參與活動,數百萬乘客參與。面對此類大型活動,如何保障好活動期間業務的穩定性,是擺在技術同學面前的一個挑戰。本文重點從容量管理、監控報警、預案建設和流程規範等幾方面,給大家分享了滴滴運維部同學近幾年在多次活動實戰中積累的技術沉澱和經驗, 希望可以給大家後續的穩定性工作提供參考與借鑑

1.背景

#123滴滴全民拼車日# 拼成只要1折!最高優惠100元!
滴滴全民拼車日背後的運維技術揭秘
滴滴在12月3日舉辦了空前盛大的全民拼車日活動,期間拼車價格優惠幅度空間巨大,只需要1折!當天共有26個城市參與活動,310萬乘客參與拼車日,68萬人首次體驗拼車服務,分享了空座位數195.2萬個,同時還有一系列的返場日活動!想必大家應該都感受到此次的1折福利。

為了保障活動的順利舉行,技術同學做了一系列的工作,本文主要針對穩定性保障,和大家分享下背後的相關運維技術。

2.穩定性抓手

下面我們們就正式開始介紹穩定性保障相關的技術;通常情況下,大型活動的穩定性保障主要從以下幾方面開展工作:

  • 團隊組織

  • 容量管理

    • 業務預估

    • 服務擴容

    • 容量壓測

  • 監控報警

    • 基礎監控

    • 系統監控

    • 業務監控

  • 預案管理

    • 平臺建設

    • 限流/降級

    • 多活災備

  • 流程規範

    • 風險排查

    • 變更封線

    • 現場值守

    • 覆盤

  • 第三方合作

接下來,就按照這幾方面跟大家介紹下,在滴滴我們是如何做大型活動的穩定性保障的。

▍1. 團隊組織

在專案確定要做之後,首先要確定的就是團隊人員,誰適合或是應該做這個事情;我們一般是根據活動所涉及的業務系統,拉取相關的穩定性負責介面人,啟動專案 kickoff,組成本次活動的穩定性保障FT,讓大家儘早地參與進來,盡力讓大家有足夠的時間進行準備,期間會根據實際情況,透過例會、週報等方式來同步資訊和進展。

▍2. 容量管理

2.1 業務量預估

在開始大型活動的穩定性保障工作之前,我們首先需要與活動發起方確認預計的業務量,可以透過業務活動預算、運營活動的形式、觸達能力、小範圍提前試點等等,最終評估出業務量。而對於節假日高峰應對來說,可以參考歷史資料,做出一個預估;此次拼車日活動屬於首次,為了更準確地預估出業務單量,我們選擇了在幾個城市提前進行了試點,再透過這幾個城市的業務資料建立模型估算出此次活動的整體業務單量。各個公司可能會因業務型別不同,業務量預估的方式不同,但相同的是都需要有一個預估量作為目標,為後續的工作提供資料基礎。我們這裡介紹下,在確定出預期的業務量後,如何評估出當前業務系統中哪些模組需要擴容多少資源。

隨著業務單量的增長,業務系統中的各模組的流量會相應上漲,這些模組所佔用的 cpu 等基礎資源也會相應上漲。之前我們大都基於業務單量、模組流量和模組資源使用率三者之間是線性關係的前提假設,再加上經驗值來確定出系統容量的缺口。為了能準確評估出業務單量、模組流量和模組資源使用率三者之間的關係,我們實現了一套容量預估機制,分析處理業務量、模組流量和模組資源利用率的相關歷史資料,經過多次迴歸訓練和驗證,預測出業務單量與模組流量之間、模組流量與模組資源利用率之間的準確關係,從而可以輕鬆準確地獲取到在預估業務單量下,各模組的流量和基礎資源負載的預期增長量,並透過全鏈路壓測或哨兵壓測獲取到各模組的效能安全基線,來計算出存在容量缺口的模組及其所需的資源數目,進一步的詳細資訊可以檢視曉慶同學的《滴滴內部線上系統的容量評估方法》這篇文章。

2.2 服務擴容

評估出容量缺口資料後,就進入了協調準備機器資源和服務擴容的階段。對於託管在公有云的公司來說,在公有云平臺申請資源即可。但對於擁有自建機房的公司,比如滴滴,通常情況下會保留出一定數量的備機來應急,如果備機數量不夠,則需發起採購流程(通常週期會較長)。因此,業務方和系統運維之間要做好資訊同步,盡力確保基礎資源規劃與預算的準確性。

近幾年,業內普遍推進服務的容器化,滴滴也不例外。滴滴自建了一套基於 Docker+Kubernetes 的容器編排管理平臺,並整合了滴滴內部的監控、部署、日誌收集等系統,解決或最佳化了服務擴容環節中系統環境初始化、依賴資源準備、服務/資料部署和服務引流檢查等問題,穩定高效地支撐了業務服務的彈性擴縮容;目前已接入近6W 個容器,90%的雲化服務能在5-10分鐘完成擴容。

2.3 容量壓測

在完成業務單量預估,並根據容量缺口完成服務擴容後,我們就需要透過壓測手段,來驗證當前線上系統的容量是否真的能夠扛住預估的業務單量。為此,滴滴早已建設了一套基於線上環境的全鏈路壓測方案,透過壓測標記透傳、壓測資料隔離手段保障了線上資料、壓測資料的物理和邏輯隔離,關於該方案的詳細資訊,可以檢視曉慶同學的《滴滴全鏈路壓測解決之道》這篇文章。此次拼車日,我們依據線上業務資料、活動規模,建立了專屬的拼車日壓測模型,包括業務單量峰值、快車拼車等全品類比例、排隊預約多場景比例等多項指標,並透過少量城市提前試點,修正壓測模型,最終累計壓測近十次,發現各類問題幾十例,成為拼車日活動容量保障的有效手段。

▍3. 監控報警

監控報警是運維的一個傳統技術方向,是問題發現的重要手段,一般從 cpu、mem、服務存活等基礎級監控,rpc 呼叫狀況等系統級監控、單量等業務級監控等方面豐富完善監控資料和報警策略;除此之外,滴滴還把各個業務的核心業務場景和核心服務模組的監控資料以卡片的形式匯聚在一起,簡潔清晰地展示出了各個業務系統的健康狀態,方便故障問題的模組級定位,我們內部稱之為滅火圖;為了能夠準確監控業務系統的容量狀況,我們根據源於服務歷史峰值的安全流量值和實時收集的當前流量,並結合 cpu、mem 等基礎資源指標,量化出了服務的實時容量水位。

針對監控覆蓋度和準確性問題,我們實現了一個監控信用分機制,量化出了各個業務線的基礎資源監控、存活監控、報警策略有效性等資料,有效暴露出監控盲區和問題點,讓大家更高效準確地進行監控建設。

在大型活動的穩定性保障中,我們還會根據業務特點,與業務一起梳理出最核心業務指標,並建設成監控大盤,能夠最直觀最簡潔地展示出此次活動期間業務系統的健康狀態。

▍4. 預案管理

預案作為潛在或可能發生的穩定性故障問題事先制定的應急處置方案,是故障止損和縮短故障時長的重要手段;預案管理主要涉及以下幾方面工作:

  • 完備性:是否覆蓋了所有潛在或可能發生的場景,是否覆蓋了100%的核心業務流程

  • 有效性:如何保證在故障時執行預案是有效且符合預期的,怎麼避免因服務的迭代變更等導致預案無效的問題

  • 執行效率:故障時預案執行是否簡潔高效,生效過程是否快速

為了解決以上的問題,滴滴制定了一套預案觸發決策、效果評估、定期演練等相關的制度,並建設了一個預案管理平臺,整合了業務系統的切流、限流、熔斷等預案,提供了快速止損、高效接入和有效演練的整體解決方案,有效保障了預案的完備性、有效性和執行效率。在大型活動穩定性保障前,只需要重新 review 以上的預案相關資訊,尤其是此次活動所涉及或依賴的服務預案。

下面再討論下限流/熔斷和多活切流兩個較為常見的預案。

4.1 限流/熔斷

即使前期做好了容量預估、擴容和壓測,確保系統可以扛住預估的業務單量壓力,也無法完全保證百分百穩定,因為業務可能因各種各樣的原因導致業務單量超出預期,這個時候就需要有限流能力,即使在單量超預期的情況下,保證業務系統也不會被打崩,依然能夠處理之前預估的單量。當系統內部分服務出現異常的時候,也要有熔斷能力,確保系統整體不被拖垮;在滴滴,我們要求線上核心服務都要具備限流和熔斷能力,尤其是入口環節。

在應對大型活動時,我們應該重點把控好入口的限流閾值,確保限流閾值是經過真實流量或壓測驗證過的安全值,保證流量超出預期後,業務系統依然運轉正常。

4.2 多活切流

對於穩定性要求較高且資源相對富裕的業務,一般會進行業務多活建設,即同時將業務部署在多個機房,互為災備;因業務特點和機房專線等因素不同,各公司的雙活建設的挑戰和實現方案不盡相同;目前滴滴的核心業務早已實現了同城雙活,在單個機房的服務出現異常的時候,能夠快速完成切流動作,縮短故障時長,保障滴滴業務的高可用。

在大型活動前,我們會舉行多活切流演練,一是驗證切流預案本身的有效性,二是對各機房的容量壓測摸底,三是打平各機房流量,讓各機房處於最“舒適”的狀態。

▍5. 流程規範

為了保障穩定性,各個公司的運維團隊都會梳理制定一系列的運維相關的流程規範,比如說灰度釋出、通告流程、操作規範等等,這裡就不展開講了。我們想跟大家分享的是,滴滴專門針對大型活動穩定性保障,制定的部分運維流程規範。

5.1 風險排查

在滴滴的大型活動開始前,涉及到的業務各方,都會對各自的基礎資源、系統網路、業務架構等各個方面進行全方位、深層次的風險排查,發現並及時解決或規避掉潛在的風險點。

5.2 變更封線

對運維工作有所瞭解的同學都應該知道,相當一部分的故障都是源於線上變更。一個異常的線上變更,輕則會影響線上系統的效能或使用者體驗,重則會直接帶來業務的不可用時長。控制好線上變更,是穩定性的一個重要工作。

雖然滴滴對線上變更,不管在流程規範,還是平臺工具方面,都做了很多的工作,很大程度上降低了線上變更對業務穩定性的風險,但在面臨一些大型活動的時候,我們為了追求更高的穩定性,會在活動前後的一段時間內,對業務活動相關的服務,進行封線,最大程度地規避掉線上變更帶來的潛在風險。

5.3 現場值守

在活動高峰期間,為了更早地發現問題和更快地響應問題,我們會建立專門的溝通群,並安排大家時刻保持線上狀態,實時關注監控資料,及時通報系統健康狀態。為了便於大家的高效溝通,尤其是故障期間(假如有的話),我們甚至會提前安排大家坐在一起進行值守,我們稱之為現場值守,從我們歷來的經驗來看,現場值守能夠儘可能地縮短故障的發現,定位和決策止損時間,是一個重要的穩定性保障抓手。

5.4 覆盤

在滴滴流行著一種覆盤文化,穩定性工作更是重視覆盤文化。我們會在大型活動結束後,積極推動進行復盤,回顧活動前後整個週期的工作,總結出各個階段各個方面的經驗和不足,並孵化出一些專案來進一步地最佳化和改善穩定性體系,為後續的活動保障提供更堅固更實用的基礎與支撐。

▍6. 第三方合作

在我們自身開展穩定性工作的同時,我們會及時向所依賴的第三方合作伙伴同步活動資訊,讓第三方合作伙伴有更充足的時間進行容量評估等穩定性準備工作,也會推動第三方合作伙伴在活動期間盡力減少相關的變更,更多地關注與我們的互動狀況。

3.總結

綜上所述 ,我們從團隊組織、容量管理、監控報警、預案管理、流程規範以及第三方合作六個方面,對滴滴大型活動穩定性保障工作做了一個初步的介紹,希望可以給大家後續的工作提供參考與借鑑。

此次活動在給大家帶來了1折福利的同時,對我們滴滴運維技術來說,也是一次非常好的挑戰和成長:

  • 再次驗證了滴滴長期以來持續的穩定性建設,並完善和加固了現有的穩定性保障體系

  • 對參與其中的每個技術同學是一次非常好的歷練和成長

  • 為後續大型活動的保障積累了豐富的經驗和資料

最後,想給大家說的是,穩定性建設不是一次性工程,需要持續不斷的投入和加固,尤其是在業務持續增長和最佳化的時候。上述給大家分享的穩定性抓手,也不是在一次活動保障後就完全具備的,而是滴滴這幾年在一次又一次的穩定性挑戰和考驗中反覆提煉和打磨出的,並仍會繼續改進和最佳化。

滴滴全民拼車日背後的運維技術揭秘

本文作者
張衛民
滴滴 | 運維專家工程師
目前就職於滴滴出行基礎平臺部的運維部,擔任運維專家工程師,主要負責拼車、兩輪車、代駕、順風車、金融等業務運維,以及網路監控及最佳化、運維效率提升等工作。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69908606/viewspace-2676274/,如需轉載,請註明出處,否則將追究法律責任。