十分钟万台服务器部署能力,探秘阿里双十一弹性扩容背后的技术故事
往往在大促等高峰時段都需要對流量提前預估,但實際上預先計算好的資源和應用容量,依然可能不足以支撐流量高峰,需要緊急擴容;而容器技術則非常適合這種場景,在需要時快速地、自動彈性伸縮。那么在業務需求極速上升的情況下,大量服務器資源啟動時如何抗住并發部署的壓力呢?
?
在本次雙十一期間容器鏡像服務參與并提供了服務支撐,其具備在十分鐘之內快速萬臺服務其部署的能力。
指數級別增長、百億次拉取次數,容器鏡像之于容器技術
作為一種輕量級的虛擬化技術,容器技術所具備的敏捷、可移植、可控性,使得它一經推出就受到眾多開發者的追捧。但其實更重要的是,容器技術定義了一種標準化的交付方式——容器鏡像。
?
容器鏡像將應用的代碼以及代碼環境依賴都都打包在一起,這是一個與環境無關的交付物,可以應用在軟件生命周期的任何階段。就像集裝箱改變了傳統的運輸體系,創造了容器鏡像的容器技術徹底改變了傳統的軟件交付模式。
?
縱觀全球,整個容器技術在近三年得到了爆發式的增長。據統計有67%的企業在生產環節或者嘗試在生產環節中使用Docker,幫助他們敏捷進化,提高研發交付的效率。據Docker Con 2017的統計,近三年應用數增長了30倍,約有百萬級別的容器化應用數。而容器鏡像的拉取個數,近三年更是趨于了指數級別增長,承載了約110億次拉取。
? DockerCon2017年容器鏡像拉取情況的最新統計
雙十一與容器鏡像服務的故事
?
早在2015年,阿里巴巴就在嘗試使用容器技術。2016年雙十一就已經將所有交易核心應用容器化,幾十萬容器撐起了雙 11 交易 17.5 萬筆/秒的下單峰值。而在今年雙十一,阿里巴巴已在集團范圍實現在線服務全部容器化,內部已達到百萬級容器部署規模,其中雙十一交易峰值到32.5萬筆/秒并且可以實現十分鐘內萬臺服務器的快速部署。
?
截止目前,容器鏡像服務支撐了集團10萬鏡像的托管,共計2億次的鏡像下載量。
?
為了承受高壓,我們做了多維度的優化
在早期的容器推行演練中,由于當時發布系統日均的發布量上萬,很多應用的規模開始破萬,發布失敗率開始增高,影響到了業務的正常迭代流程。這個困境的根本問題在于發布過程大量大應用鏡像拉取的需求,而應用鏡像內容過于冗余臃腫,彼時存在大量超過5G的大鏡像,文件服務器扛不住大量的請求。
?
為了解決多規模、并發情況下容器鏡像的獲取問題,我們考慮了容器鏡像大小、容器內容加速及流控、鏡像Registry性能等三個大維度的優化。
?
容器鏡像大小優化
Action 1:之前將所有的構建過程編寫在同一個Dockerfile中,包括應用及其依賴庫的編譯、測試、打包等流程,這里可能會帶來的一些問題:鏡像臃腫、鏡像層次嵌套深、也可能存在源代碼泄露的風險。我們進行了多階段鏡像構建優化,將鏡像制作過程中的中間產物與最終鏡像構建產物分離,形成最精簡的應用鏡像。
多階段鏡像構建優化后獲取最精簡應用鏡像
?
Action 2:將功能統一的命令聚合到同一層來完成,將使用頻繁的應用或環境制作成基礎鏡像復用,盡可能減少鏡像的層數。
?
容器內容加速和流控
在大規模的鏡像分發場景之下,優化鏡像本身的大小作用有限,我們依然需要考慮如何從系統上提升鏡像拉取的性能。最初很容易想到服務器擴容,可是擴容后又發現后端存儲成為瓶頸。此外,大量來自不同IDC的客戶端請求消耗了巨大的網絡帶寬,造成網絡擁堵。同時,很多業務走向國際化,大量的應用部署在海外,海外服務器下載要回源國內,浪費了大量的國際帶寬,而且還很慢;如果傳輸大文件,網絡環境差,失敗的話又得重來一遍,效率極低。
?
為了解決這些問題,阿里推出了蜻蜓這個產品。蜻蜓通過使用P2P技術同時結合智能壓縮、智能流控等多種創新技術,解決大規模文件下載以及跨網絡隔離等場景下各種文件分發難題,大幅提高數據預熱、大規模容器鏡像分發等業務能力。
?
在本地機器使用了分層的方式來下載鏡像,下面介紹下DockerPull的執行過程:
Docker 鏡像分層下載圖
Docker Daemon調用RegistryAPI得到鏡像的Manifest,從Manifest中能算出每層的URL,Daemon隨后把所有鏡像層從Registry并行下載到Host本地倉庫。
?
所以最終,鏡像傳輸的問題變成了各鏡像層文件的并行下載的問題。而蜻蜓擅長的正是將每層鏡像文件從Registry用P2P模式傳輸到本地倉庫中。
?
那么具體又是如何做到的呢?
?
事實上蜻蜓會在Host上啟動proxy,Docker Engine的所有命令請求都會通過這個proxy,我們看下圖:
蜻蜓P2P容器鏡像分發示意圖
首先,docker pull命令,會被dfget proxy截獲。然后,由dfget proxy向CM發送調度請求,CM在收到請求后會檢查對應的下載文件是否已經被緩存到本地,如果沒有被緩存,則會從Registry中下載對應的文件,并生成種子分塊數據(種子分塊數據一旦生成就可以立即被使用);如果已經被緩存,則直接生成分塊任務,請求者解析相應的分塊任務,并從其他peer或者supernode中下載分塊數據,當某個Layer的所有分塊下載完成后,一個Layer也就下載完畢了,同樣,當所有的Layer下載完成后,整個鏡像也就下載完成了。
?
蜻蜓支持多種容器技術,對容器本身無需做任何改造,鏡像分發比natvie方式提速可高達57倍,Registry網絡出流量降低99.5%以上。為阿里巴巴業務的極速擴張和雙十一大促保駕護航。
?
鏡像Registry性能優化
蜻蜓利用P2P的模式解決了從Registry獲取鏡像層并傳輸到本地的問題,不過當鏡像拉取規模在幾萬并發的量級的時候,從Registry獲取鏡像的Manifest也會成為性能瓶頸。容器鏡像服務從代碼層面、基礎設施層面做了很多定制化的增強:
?
在代碼層面:容器鏡像服務增加了對于Docker Registry優化,根據之前的鏡像請求,自動分析熱點數據并增加了熱點數據的緩存,從容應對大規模并發下鏡像Manifest的拉取。增加了對鏡像下載源的動態判斷,根據鏡像下載請求的不同來源,自動返回離鏡像下載最近的Registry地址。
在基礎設施層面:為了應對流量的突發,容器鏡像服務加強了針對Registry流量、存儲的多維度監控,定時進行監控探活,并且實時收集監控數據,當達到監控閾值,Registry會自動進行報警和基礎設施的彈性擴容。
?
鏡像服務惠及云上用戶
自2015年起面向阿里集團內部和對阿里云容器服務提供支撐以來,阿里云容器鏡像技術積累了深厚的經驗。一般而言,大家認為容器鏡像服務是為用戶提供了安全穩定的鏡像托管能力,但是實際上并不至于此:除了鏡像托管以及鏡像的上傳下載之外,容器鏡像服務還包含了從鏡像構建到應用部署等一整套的DevOps能力。
?
為了將阿里巴巴在容器技術上的積累帶給云上用戶,容器鏡像服務于2017年10月30日正式對外公測。容器鏡像服務(ContainerRegistry)免費提供了安全的鏡像托管能力,穩定的國內外鏡像構建服務,便捷的鏡像授權功能,方便用戶在云上進行容器鏡像全生命周期管理,體驗容器技術帶來的敏捷變革。
?
1)全球多地域支持及鏡像加速器:
阿里云容器鏡像服務提供了全球多地域支持,用戶可以在自己業務地就近托管容器鏡像,保障應用鏡像的極速上傳、下載操作。我們也為每一位用戶提供了新一代專屬鏡像加速器,通過鏡像加速器可以快速獲取國外優秀的鏡像。鏡像加速器采用了自主研發的智能路由及動態緩存技術,極大提升了鏡像的下載速度和用戶體驗。并且完全兼容 Docker 原生參數配置方式,支持 Linux、MacOS、Windows 三大平臺。目前,容器鏡像服務已經加速了千萬次的鏡像拉取,幫助用戶節省超過十萬個小時。
?
2)多階段構建:
阿里云容器鏡像服務提供了豐富穩定的鏡像構建功能,包含自動構建、海外構建、多階段構建(multi-stage build)支持,方便打造云上容器DevOps最佳實踐。用戶可以將應用代碼托管在阿里云Code、Github、Bitbucket或者自建的GitLab之上,通過容器鏡像服務多階段構建功能或者阿里云CodePipline進行代碼編譯測試,構建完成后的鏡像將推送至容器鏡像服務托管。最后通過容器鏡像服務上的webhook,動態通知容器服務集群上相應的應用重新部署。
?
通過整個解決方案,用戶在將代碼提交至線上之后,可以實現自動的代碼測試,測試通過后應用自動構建成鏡像,最終部署到測試、預發或者生產環境的集群上。
阿里云容器化DevOps流程圖
?
3)??鏡像安全掃描
鏡像已經成為企業的核心資產,企業軟件交付流水線的中心,線上的應用的安全問題也是至關重要的。容器鏡像服務提供了便捷的鏡像安全掃描功能,提供多維度的鏡像漏洞報告。鏡像漏洞報告中包含漏洞的CVE編號、漏洞的等級、漏洞位置及官方和社區提供的漏洞修復方案。
阿里云容器鏡像安全掃描示意圖
?
總結
?
容器鏡像服務通過Registry性能優化,蜻蜓通過P2P技術結合智能壓縮和流控等方案,共同解決了大規模文件下載以及跨網絡隔離等場景下各種文件分發難題,在阿里已然成為重要的基礎設施之一,為業務的極速擴張和雙十一大促保駕護航。
?
截止到目前為止,已經有數萬用戶經過容器鏡像服務(ContainerRegistry)享受了安全的鏡像托管能力、穩定的國內外鏡像構建服務、便捷的鏡像授權功能,通過容器鏡像進行全生命周期管理。容器鏡像服務簡化了Registry的搭建運維工作,支持多地域的鏡像托管,并聯合容器服務、CodePipeline等云產品,為用戶打造云上使用Docker的一體化體驗。
??
作者簡介:
阿里云容器服務團隊成立于2015年,于2016年公有云容器服務正式商業化、專有云企業版正式發布、產品實現國際化,于今年發布專有云敏捷版,全面升級提供Kubernetes和Swarm的支持。
總結
以上是生活随笔為你收集整理的十分钟万台服务器部署能力,探秘阿里双十一弹性扩容背后的技术故事的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ansible基础
- 下一篇: ubuntu安装keepass2 中文乱