劃重點
阿里巴巴 9 年雙 11 經歷下來,交易額增長了 280 倍、交易峰值增長 800 多倍、系統數呈現爆發式增長。系統在支撐雙 11 過程中的複雜度和支撐難度以指數級形式上升。雙 11 峰值的本質是用有限的成本最大化提升使用者體驗和叢集吞吐能力,用合理的代價解決峰值。
本文將從阿里巴巴統一排程體系、混部架構、雲化架構三個方面詳解阿里是如何支撐如此龐大的系統。
統一排程體系
始於 2011 年建設的 Sigma 是服務阿里巴巴線上業務的排程系統,圍繞 Sigma 有一整套以排程為中心的叢集管理體系。
Sigma 有 Alikenel、SigmaSlave、SigmaMaster 三層大腦聯動協作,Alikenel 部署在每一臺物理機上,對核心進行增強,在資源分配、時間片分配上進行靈活的按優先順序和策略調整,對任務的時延,任務時間片的搶佔、不合理搶佔的驅逐都能通過上層的規則配置自行決策。SigmaSlave 可以在本機進行容器 CPU 分配、應急場景處理等。通過本機 Slave 對時延敏感任務的干擾快速做出決策和響應,避免因全域性決策處理時間長帶來的業務損失。SigmaMaster 是一個最強的中心大腦,可以統攬全域性,為大量物理機的容器部署進行資源排程分配和演算法優化決策。
整個架構是面向終態的設計理念,收到請求後把資料儲存到持久化儲存層,排程器識別排程需求分配資源位置,Slave識別狀態變化推進本地分配部署。系統整體的協調性和最終一致性非常好。我們在 2011 年開始做排程系統,2016 年用 Go 語言重寫,2017 年相容了 kubernetes API,希望結合生態的力量,共同建設和發展。
混部架構
阿里巴巴在 2014 年開始推動混部架構,目前已在阿里巴巴內部大規模部署。線上服務屬於長生命週期、規則策略複雜性高、時延敏感類任務。而計算任務生命週期短、排程要求大併發高吞吐、任務有不同的優先順序、對時延不敏感。基於這兩種排程的本質訴求的不同,我們在混合部署的架構上把兩種排程並行處理,即一臺物理機上可以既有 Sigma 排程又有 Fuxi 排程,實現基礎環境統一。Sigma 排程是通過 SigmaAgent 啟動 PouchContainer 容器。Fuxi 也在這臺物理機上搶佔資源,啟動自己的計算任務。所有線上任務都在 PouchContainer 容器上,它負責把伺服器資源進行分配並執行線上任務,離線任務填入其空白區,保證物理機資源利用達到飽和,這樣就完成了兩種任務的混合部署。
混部的關鍵技術
核心資源隔離上的關鍵技術
- 在 CPU HT 資源隔離上,做了 Noise Clean 核心特性,解決在 / 離線超執行緒資源爭搶問題。
- 在 CPU 排程隔離上,CFS 基礎上增加 Task Preempt 特性,提高線上任務排程優先順序。
- 在 CPU 快取隔離上,通過 CAT,實現在、離線三級快取 (LLC) 通道隔離 (Broadwell 及以上)。
- 在記憶體隔離上,擁有 CGroup 隔離 /OOM 優先順序;Bandwidth Control 減少離線配額實現頻寬隔離。
- 在記憶體彈性上,在記憶體不增加的情況下,提高混部效果,線上閒置時離線突破 memcg limit;需要記憶體時,離線及時釋放。
- 在網路 QoS 隔離上,管控打標為金牌、線上打標為銀牌、離線打標為銅牌,分級保障頻寬。
線上叢集管理上的關鍵技術
- 對應用的記憶體、CPU、網路、磁碟和網路 I/O 容量進行畫像,知道它的特徵、資源規格需求,不同的時間對資源真實使用情況,然後對整體規格和時間進行相關性分析,進行整體排程優化。
- 親和互斥和任務優先順序的分配,哪種應用放在一起使整體計算能力比較少、吞吐能力比較高,這是存在一定親和性。
- 不同的場景有不同的策略,雙 11 的策略是穩定優先,穩定性優先代表採用平鋪策略,把所有的資源用盡,讓資源層全部達到最低水位。日常場景需要利用率優先,“利用率優先” 指讓已經用掉的資源達到最高水位,空出大量完整資源做規模化的計算。
- 應用做到自動收縮、垂直伸縮、分時複用。
- 整個站點的快速擴容縮容,彈性記憶體技術等。
混合部署指將計算任務引入線上服務叢集以提升日常資源效率。把離線任務引入後,CPU 平均利用率從 10% 上升到 40% 以上,同時時延敏感類服務的延遲影響小於 5%,屬於完全可接受範圍。目前我們整個混部叢集已達到數千臺的規模,經過了交易核心鏈路雙 11 大促的驗證。這項優化可以為日常節省超過 30% 的伺服器。今年會擴大 10 倍的部署規模,取得規模化收益。
通過分時複用,達到進一步提升資源效率的效果。上圖中的曲線是我們某個應用的流量曲線。它是非常有規律的 , 左邊代表晚上波谷期,右邊代表白天處於波峰期。正常的混部指佔用圖中藍色陰影部分的資源把利用率提高到 40%,彈性分時複用技術是指對應用畫像找到應用流量波谷期,對應用縮容,大量釋放記憶體和 CPU,排程更多計算任務。通過這項技術,把平均 CPU 利用率提升到 60% 以上。
PouchContainer 容器和容器化的進展
全面容器化是提升運維能力、統一排程的關鍵技術。首先介紹一下阿里巴巴內部容器產品 PouchContainre。它從 2011 年開始建設和上線,基於 LXC,在 2015 年初開始吸收 Docker 映象功能和併相容容器標準。阿里巴巴的容器非常有特點,它結合了阿里核心,大幅度提高了安全隔離性,目前以百萬級規模部署於阿里集團內部。
再來了解一下 PouchContainer 的發展路線。以前用的是虛擬機器的虛擬化技術,虛擬化技術過渡到容器技術面臨著很多運維體系的挑戰。運維體系的遷移有很大的技術成本。我們做到了阿里內部運維和應用視角無縫遷移,有獨立 IP,能夠 ssh 登入,有獨立的檔案系統和資源隔離使用量可見性。2015 年以後,阿里巴巴引入容器標準,形成了新的一套容器 PouchContainer 並整合到整個運維體系。
PouchContainer 的隔離性非常好,是富容器,可以登入,看到容器內程式自己佔的資源量,有多少程式,程式掛了容器是不會掛的,可以執行很多的程式。相容性很好, 舊版本核心也支援,對利舊很有幫助。同時經過了百萬級容器部署的規模化驗證,我們研發了一套 P2P 映象分發機制,大幅度提升分發效率。同時相容了業界更多標準,推動標準的建設,支援 RunC 、RunV 、RunLXC 等,經過百萬級容器規模的考驗,穩定高效,是企業全面容器化的最佳選擇。
PouchContainer 的結構是比較清晰的,Pouchd 如何跟 kubelet、swarm、Sigma 互動。在儲存上跟業界一起建設了 CSI 標準。支援分散式儲存如 ceph、pangu。在網路上使用 lxcfs 增強隔離性,支援多種標準。
目前 PouchContainer 化覆蓋了阿里的大部分 BU,2017 年達到百萬級部署,線上業務達到 100% 容器化,計算任務也開始容器化,它拉平了異構平臺的運維成本。覆蓋執行模式,多種程式語言,DevOps 體系。PouchContainer 覆蓋了阿里幾乎所有業務板塊如螞蟻、交易、中介軟體等等。
PouchContainer 於 2017 年 10 月 10 號宣佈開源,11 月 19 日正式開源,計劃在 2018 年 03 月釋出第一個大版本。我們希望通過 PouchContainer 的開源推動容器領域的發展和標準的成熟,給業界提供差異化有競爭力的技術選擇。不僅方便傳統 IT 企業利舊,老的基礎設施也同樣能夠享受雲源生技術帶來的好處和優勢,而且方便新的 IT 企業享受規模化穩定性和多標準相容性帶來的優勢。
PouchContainer 開源地址:github.com/alibaba/pou…
雲化架構
雲化架構運維體系
將叢集分為線上任務叢集、計算任務叢集和 ECS 叢集。資源管理,單機運維、狀況管理,命令通道、監控報警這類基礎運維體系已經打通。在雙 11 場景中,我們會在雲上劃出一個獨立的區域與其他場景互通。在互通區域,Sigma 排程可以到計算叢集伺服器裡申請資源,生產 Pouch 容器,也可以到 cloud open API 去申請 ECS,生產出容器的資源。在日常的場景中 Fuxi 可以到 sigma 裡申請資源,建立需要的容器。
在雙 11 場景中,利用規模化運維繫統在容器上構建大量線上服務,包括業務層的混合部署,每個叢集都有 online service 和有狀態服務及大資料分析。阿里雲的獨佔叢集也部署了線上服務和有狀態的資料服務,做到了 datacenter as a computer,多個資料中心像一臺計算機一樣來管理,實現跨多個不同的平臺來排程業務的發展所需要的資源。構建了混合雲用極低的成本拿到伺服器,解決有沒有的問題。
先有伺服器規模,再通過分時複用和混合部署來大幅度提升資源利用率。真正實現了彈性資源平滑複用任務靈活混合部署,用最少的伺服器最短的時間和用最優效率完成業務容量目標。通過這一套雲化架構,我們在雙 11 實現了新增 IT 成本降低 50%,使日常 IT 成本下降 30%,帶來了叢集管理和排程領域的技術價值爆發,也說明容器、編排排程技術的流行是一種必然。
阿里排程系統團隊,致力於打造全球效率最優的排程和叢集管理系統,通過企業級容器和容器平臺建設最優雲化解決方案。期待和業界同仁一起努力,降低整個行業的IT成本,加速企業的創新發展。
叔同(丁宇),阿里巴巴資深技術專家,8 次參與雙 11 作戰,阿里高可用架構、雙 11 穩定性負責人,阿里容器、排程、叢集管理、運維技術負責人。
阿里巴巴排程系統團隊為阿里巴巴經濟體提供排程、容器和叢集管理基礎設施,推動阿里巴巴全面雲化效率成本最優,為阿里經濟體和雲業務提供充足的技術競爭力。致力於打造全球領先、效率最優的排程叢集管理系統和高效穩定的企業級富容器引擎。
Pouch 容器團隊為阿里巴巴經濟體提供基礎設施領域的容器技術,幫助阿里巴巴全面實現業務容器化,打好集團“雲化”戰略堅實的基礎。團隊致力於打造全球領先、高效穩定的企業級富容器引擎。
一個優秀的團隊永遠都在渴望人才的加入,如果你希望進入技術核心挑戰計算機的極限,請加入我們;如果你希望和專注、優秀的人共事,請加入我們;如果你有一顆對優雅程式碼「執著」的內心,請加入我們!
以下崗位永久開放:Golang 工程師、Java 工程師、排程架構師、容器架構師、混部架構師、叢集資源管理研發專家、容器 PaaS 平臺技術專家、企業容器平臺解決方案架構師等......
內推通道:xianshu.lj@alibaba-inc.com
開放職位介紹:alibaba.tupu360.com/social/inde…