1. 程式人生 > >萬臺伺服器分鐘級部署,探祕阿里雙十一彈性擴容背後的技術故事

萬臺伺服器分鐘級部署,探祕阿里雙十一彈性擴容背後的技術故事

一、寫在前面

又是一年雙十一,這次的購物狂歡再次重新整理記錄,而背後的阿里雲技術也再次交上了一份不錯的‘期末考卷’。

往往在大促等高峰時段都需要對流量提前預估,但實際上預先計算好的資源和應用容量,依然可能不足以支撐流量高峰,需要緊急擴容;而容器技術則非常適合這種場景,在需要時快速地、自動彈性伸縮。那麼在業務需求極速上升的情況下,大量伺服器資源啟動時如何抗住併發部署的壓力呢?

今年雙十一期間,阿里雲容器映象倉庫存放30萬類映象,其中包含共計1000萬映象版本,而映象下載量高達8億次。

image

2017年天貓雙十一再次重新整理了記錄, 交易峰值32.5萬筆/秒,支付峰值25.6萬次/秒,資料庫處理峰值4200萬次/秒。

二、指數級別增長、百億次拉取次數,容器映象之於容器技術

作為一種輕量級的虛擬化技術,容器技術所具備的敏捷、可移植、可控性,使得它一經推出就受到眾多開發者的追捧。但其實更重要的是,容器技術定義了一種標準化的交付方式——容器映象。

容器映象將應用的程式碼以及程式碼環境依賴都都打包在一起,這是一個與環境無關的交付物,可以應用在軟體生命週期的任何階段。就像集裝箱改變了傳統的運輸體系,創造了容器映象的容器技術徹底改變了傳統的軟體交付模式。

縱觀全球,整個容器技術在近三年得到了爆發式的增長。據統計有67%的企業在生產環節或者嘗試在生產環節中使用Docker,幫助他們敏捷進化,提高研發交付的效率。據Docker Con 2017的統計,近三年應用數增長了30倍,約有百萬級別的容器化應用數。而容器映象的拉取個數,近三年更是趨於了指數級別增長,承載了約110億次拉取。

image

## 三、雙十一與容器映象服務的故事

早在2015年,阿里巴巴就在嘗試使用容器技術。2016年雙十一就已經將所有交易核心應用容器化,幾十萬容器撐起了雙 11 交易 17.5 萬筆/秒的下單峰值。而去年雙十一,阿里巴巴已在集團範圍實現線上服務全部容器化,內部已達到百萬級容器部署規模,其中雙十一交易峰值到32.5萬筆/秒並且可以實現十分鐘內萬臺伺服器的快速部署。

截止目前,容器映象服務支撐了集團10萬映象的託管,共計2億次的映象下載量。

## 四、為了承受高壓,我們做了多維度的優化
在早期的容器推行演練中,由於當時釋出系統日均的釋出量上萬,很多應用的規模開始破萬,釋出失敗率開始增高,影響到了業務的正常迭代流程。這個困境的根本問題在於釋出過程大量大應用映象拉取的需求,而應用映象內容過於冗餘臃腫,彼時存在大量超過5G的大映象,檔案伺服器扛不住大量的請求。

為了解決多規模、併發情況下容器映象的獲取問題,我們考慮了容器映象大小、容器內容加速及流控、映象Registry效能等三個大維度的優化。

1) 容器映象大小優化

Action 1:之前將所有的構建過程編寫在同一個Dockerfile中,包括應用及其依賴庫的編譯、測試、打包等流程,這裡可能會帶來的一些問題:映象臃腫、映象層次巢狀深、也可能存在原始碼洩露的風險。我們進行了多階段映象構建優化,將映象製作過程中的中間產物與最終映象構建產物分離,形成最精簡的應用映象。

image

Action 2:將功能統一的命令聚合到同一層來完成,將使用頻繁的應用或環境製作成基礎映象複用,儘可能減少映象的層數。關於容器映象優化的最佳實踐,我們也開展了很多的線下沙龍活動進行分享,可以通過《Docker 映象優化與最佳實踐》瞭解更多,文章連結為https://yq.aliyun.com/articles/219139

2) 容器內容加速和流控

在大規模的映象分發場景之下,優化映象本身的大小作用有限,我們依然需要考慮如何從系統上提升映象拉取的效能。最初很容易想到伺服器擴容,可是擴容後又發現後端儲存成為瓶頸。此外,大量來自不同IDC的客戶端請求消耗了巨大的網路頻寬,造成網路擁堵。同時,很多業務走向國際化,大量的應用部署在海外,海外伺服器下載要回源國內,浪費了大量的國際頻寬,而且還很慢;如果傳輸大檔案,網路環境差,失敗的話又得重來一遍,效率極低。

為了解決這些問題,阿里推出了蜻蜓這個產品。蜻蜓通過使用P2P技術同時結合智慧壓縮、智慧流控等多種創新技術,解決大規模檔案下載以及跨網路隔離等場景下各種檔案分發難題,大幅提高資料預熱、大規模容器映象分發等業務能力。

在本地機器使用了分層的方式來下載映象,下面介紹下Docker Pull的執行過程:
image

 *Docker 映象分層下載圖*

Docker Daemon呼叫Registry API得到映象的Manifest,從Manifest中能算出每層的URL,Daemon隨後把所有映象層從Registry並行下載到Host本地倉庫。

所以最終,映象傳輸的問題變成了各映象層檔案的並行下載的問題。而蜻蜓擅長的正是將每層映象檔案從Registry用P2P模式傳輸到本地倉庫中。

那麼具體又是如何做到的呢?

事實上蜻蜓會在Host上啟動proxy,Docker Engine的所有命令請求都會通過這個proxy,我們看下圖:
image

首先,docker pull命令,會被dfget proxy截獲。然後,由dfget proxy向CM傳送排程請求,CM在收到請求後會檢查對應的下載檔案是否已經被快取到本地,如果沒有被快取,則會從Registry中下載對應的檔案,並生成種子分塊資料(種子分塊資料一旦生成就可以立即被使用);如果已經被快取,則直接生成分塊任務,請求者解析相應的分塊任務,並從其他peer或者supernode中下載分塊資料,當某個Layer的所有分塊下載完成後,一個Layer也就下載完畢了,同樣,當所有的Layer下載完成後,整個映象也就下載完成了。

蜻蜓支援多種容器技術,對容器本身無需做任何改造,映象分發比natvie方式提速可高達57倍,Registry網路出流量降低99.5%以上。為阿里巴巴業務的極速擴張和雙十一大促保駕護航。

3) 映象Registry效能優化

蜻蜓利用P2P的模式解決了從Registry獲取映象層並傳輸到本地的問題,不過當映象拉取規模在幾萬併發的量級的時候,從Registry獲取映象的Manifest也會成為效能瓶頸。容器映象服務從程式碼層面、基礎設施層面做了很多定製化的增強:

在程式碼層面:容器映象服務增加了對於Docker Registry優化,根據之前的映象請求,自動分析熱點資料並增加了熱點資料的快取,從容應對大規模併發下映象Manifest的拉取。增加了對映象下載源的動態判斷,根據映象下載請求的不同來源,自動返回離映象下載最近的Registry地址。

在基礎設施層面:為了應對流量的突發,容器映象服務加強了針對Registry流量、儲存的多維度監控,定時進行監控探活,並且實時收集監控資料,當達到監控閾值,Registry會自動進行報警和基礎設施的彈性擴容。

五、容器技術惠及雲上使用者

為了將阿里在容器技術上的積累帶給雲上的使用者使用,我們在2017年10月公測了阿里雲容器服務。容器映象服務(Container Registry)提供安全的映象託管能力,穩定的國內外映象構建服務,便捷的映象授權功能,方便使用者進行容器映象全生命週期管理。容器映象服務簡化了Registry的搭建運維工作,支援多地域的映象託管,並聯合容器服務、CodePipeline等雲產品,為使用者打造雲上使用Docker的一體化體驗。

1)全球多地域支援及映象加速器:

阿里雲容器映象服務提供了全球多地域支援,使用者可以在自己業務地就近託管容器映象,保障應用映象的極速上傳、下載操作。我們也為每一位使用者提供了新一代專屬映象加速器,通過映象加速器可以快速獲取國外優秀的映象。映象加速器採用了自主研發的智慧路由及動態快取技術,極大提升了映象的下載速度和使用者體驗。並且完全相容 Docker 原生引數配置方式,支援 Linux、MacOS、Windows 三大平臺。目前,容器映象服務已經加速了千萬次的映象拉取,幫助使用者節省192kh。

2)多階段構建:

阿里雲容器映象服務提供了豐富穩定的映象構建功能,包含自動構建、海外構建、多階段構建(multi-stage build)支援,方便打造雲上容器DevOps最佳實踐。使用者可以將應用程式碼託管在阿里雲Code、Github、Bitbucket或者自建的GitLab之上,通過容器映象服務多階段構建功能或者阿里雲CodePipline進行程式碼編譯測試,構建完成後的映象將推送至容器映象服務託管。最後通過容器映象服務上的webhook,動態通知容器服務叢集上相應的應用重新部署。

通過整個解決方案,使用者在將程式碼提交至線上之後,可以實現自動的程式碼測試,測試通過後應用自動構建成映象,最終部署到測試、預發或者生產環境的叢集上。

image

3) 映象安全掃描

映象已經成為企業的核心資產,企業軟體交付流水線的中心,線上的應用的安全問題也是至關重要的。容器映象服務提供了便捷的映象安全掃描功能,提供多維度的映象漏洞報告。映象漏洞報告中包含漏洞的CVE編號、漏洞的等級、漏洞位置及官方和社群提供的漏洞修復方案。

image

六、寫在後面

容器映象服務通過Registry效能優化,蜻蜓通過P2P技術結合智慧壓縮和流控等方案,共同解決了大規模檔案下載以及跨網路隔離等場景下各種檔案分發難題,在阿里已然成為重要的基礎設施之一,為業務的極速擴張和雙十一大促保駕護航。

為了將阿里巴巴在容器技術上的積累帶給雲上使用者,在2017年10月阿里巴巴推出了容器映象服務(公測版)。容器映象服務(Container Registry)免費提供了安全的映象託管能力,穩定的國內外映象構建服務,便捷的映象授權功能,方便使用者在雲上進行容器映象全生命週期管理,體驗容器技術帶來的敏捷變革。
此外,還有一個重大預告,容器映象服務即將推出企業版,支援在使用者自己的OSS上進行映象託管,提供P2P映象外掛支撐大規模映象拉取能力,提供自定義域名配置,映象例項級別同步,映象安全掃描等企業級功能。敬請期待!