鏡像拉取節省 90% 以上,快手基於 Dragonfly 的超大規模分發實踐

01 挑戰

快手容器雲平臺旨在爲快手不斷增長、不斷變化和多樣化的業務,提供基於容器化部署的超大規模基礎設施服務。爲了實現這一目標,快手工程師需要解決彈性、穩定性、效率和無服務器架構等挑戰,在這些挑戰中,鏡像分發的穩定性和效率也是最棘手的問題之一。

解決方案

爲了讓快手容器雲平臺的鏡像分發更加穩定和高效,快手容器雲技術團隊攜手阿里雲、螞蟻集團在龍蜥社區適配,優化落地解決方案。事實證明,Dragonfly 及其子項目 Nydus 是最合適的解決方案,該方案能夠與現有系統很好地兼容,在現有能力基礎上平滑過渡,同時也爲服務交付帶來了大幅的效率提升。

效果

Dragonfly 上線後,整個集羣通過 P2P 組建分發網,所有節點幫助中心化 Harbor 緩解網絡帶寬壓力。Harbor 的網絡帶寬壓力平均緩解 70% 以上,峯值壓力緩解 80% 以上,鏡像分發系統變得更加穩定、可靠、高效,系統能夠同時支持更多數量的鏡像併發拉取請求,尤其是在應對 Daemonset 部署和關鍵、大批量實例業務服務更新的場景中,高併發鏡像拉取倉庫不再是瓶頸。

使用項目

Dragonfly:https://github.com/dragonflyoss/Dragonfly2

Nydus:https://github.com/dragonflyoss/image-service

containerd:https://github.com/containerd/containerd

Harbor:https://github.com/goharbor/harbor

02 相關數據

峯值緩解 80% 以上 鏡像拉取時間節省 90% 以上 POD 實例服務耗時節省 50%

03 爲每月 10 億用戶提供穩定性和性能支持

“在快手,Dragonfly 有效解決了海量文件分發問題”

——吳宏斌 快手綜合運營平臺負責人

快手創建於 2011 年,是中國第一個短視頻平臺,每月爲全球 10 億用戶提供服務,其中也有 1.8 億多用戶在海外,其全球足跡已迅速擴展至拉丁美洲、中東和東南亞。在快手,任何用戶都可以通過短視頻和直播來記錄和分享他們的生活經歷,展示他們的才華。快手與內容創作者、企業緊密合作,主要從事內容社區和社交平臺的運營,提供直播服務、在線營銷服務、電子商務、娛樂、在線知識共享和其他增值服務。隨着快手業務的快速增長,數以萬計的關鍵服務和中間件運行在快手容器雲平臺上,鏡像分發系統的穩定性和效率變得越來越重要。

對於快手的鏡像分發系統升級改造來說,最大的挑戰不僅僅是鏡像倉庫峯值壓力的緩解和鏡像拉取加速,如何讓服務分發無縫銜接平滑過渡,儘可能讓業務無感、不受系統變化影響同樣重要。快手容器雲平臺工程師通過調研發現,Nydus 與 Dragonfly 系統深度集成,同時也支持傳統 OCI 鏡像,能夠以兼容友好的方式提供快速、穩定、安全、便捷的容器鏡像訪問,非常容易地就能適配容器雲平臺已有工作,實現業務從已有鏡像使用方式平滑過渡到新鏡像格式。平臺唯一要做的就是將容器運行引擎從 Docker 切換到 containerd,因爲 containerd 與 Dragonlfly 的集成體驗更好。在快手工程師的努力下,大規模節點的容器引擎平穩切換輕而易舉,containerd 和 Dragonfly 均已被快速全面採用。

穩定高效的鏡像分發

對於穩定、高效的鏡像分發,Dragonfly 給出了完美的答案。在快手,有許多重要的服務需要在短短几分鐘內擴容到成千上萬個實例,例如快手的 818 購物節或雙 11 活動的業務擴容需求。這種縮放需要數千 GB 帶寬才能直接從鏡像倉庫下載。在另外一些場景中,預測模型和搜索業務需要定期更新模型參數文件和索引文件來保證推薦效果和檢索效果,這在技術上意味着必須立即將數百 GB 的文件分發到每個相關實例。

快手工程師在所有容器雲主機部署了 Dragonfly 組件:Dfdaemon 和 Dfget,通過 P2P 算法拉取文件。同時,在每個 AZ 部署了獨立的超級節點集羣,爲 Dfget 設計了 Schedule Server,選擇合適的超級節點來避免跨 AZ 或者跨 Region 的流量。更重要的是,工程師基於 Dragonfly 獨特的片管理 P2P 算法實現了數據流 P2P 傳輸,降低了磁盤負載。得益於 Dragonfly,數以萬計的實例可以同時拉取鏡像或下載文件,而不會增加時間成本和磁盤負載。

“先進的技術就是第一生產力,快手容器雲平臺擁抱 Dragonfly 和 Nydus 後,應用交付效率大幅提升,給業務創新帶來了更多可能。”

——孫寅 快手容器雲負責人

由於拉取鏡像是容器生命週期中比較耗時的步驟之一,爲了進一步加速鏡像分發和服務啓動,工程師們又繼續啓用了 Nydus 鏡像懶加載項目。快手有許多服務有數千個 Pod 實例,其中一些有超過 20G 或更大的鏡像,當這些服務升級或擴容時,巨大的鏡像和啓動時間會嚴重減慢服務啓動。快手需要一種能夠顯著提高服務啓動速度的解決方案,特別是因爲某些服務將其訓練模型放入鏡像中,這對於服務啓動來說可能是災難性的。

由於快手在 Dragonfly 項目上的應用和實施,工程師們很早就瞭解到 Nydus 項目。Nydus 是一個強大的開源文件系統解決方案,可以爲雲原生工作負載,例如容器鏡像,構建高效的鏡像分發系統。

得益於 Nydus 全新的鏡像設計,每個 Pod 可以在幾秒鐘內完成啓動,這樣可以大量節省服務部署實例的啓動時間,讓應用盡快爲用戶提供服務。對於每個集羣節點,支持Nydus的工作並不複雜,通過容器引擎無損切換(指無需 POD 驅逐)、配置變更即可順利完成。

在實踐中,Harbor 作爲快手容器雲平臺的全局鏡像倉庫中心,仍然扮演着非常重要的角色,具體來說,我們做了以下事情:

1.容器引擎從 Docker 無損切換到 containerd;

2.在鏡像構建階段支持使用 Nydus 標準構建鏡像;

3.在集羣節點間,使用 Dragonfly 的 P2P 技術支持鏡像分發;

4.containerd通過配置Dragonfly 的 P2P 代理拉取鏡像,並使用 Nydus 鏡像啓動容器。

當然,以上所有的變動,都繼續兼容當前已有的 OCI 鏡像格式以及系統已有功能。

綜上所述,Dragonfly 和 Nydus 一起爲快手容器雲平臺提供了處理鏡像分發問題的最佳解決方案。數以萬計的快手服務大大減少了部署時間,業務線研發工程師在更新服務時也更加輕鬆容易。

Dragonfly 和 Nydus 都是來自 CNCF 的優秀開源項目,更進一步說,快手也將繼續對該項目進行更多投入,並與社區展開深入合作,使它變得更加強大和可持續。雲原生技術是基礎設施領域的一場革命,尤其是在彈性和無服務器方面,我們相信 Dragonfly 一定會在雲原生生態中扮演重要角色。

相關鏈接:

雲原生 SIG 主頁:https://openanolis.cn/sig/cloud-native

參考資料

【1】https://www.cncf.io/case-studies/kuaishou-technology/

【2】d7y+nydus快手案例

【3】https://github.com/containerd/containerd

【4】https://github.com/dragonflyoss/Dragonfly2

【5】https://d7y.io/

【6】https://github.com/dragonflyoss/image-service

【7】https://nydus.dev/

【8】https://github.com/goharbor/harbor

原文鏈接

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章