秒級啟動萬個容器,探秘阿里雲容器映象加速黑科技

2021-10-02 01:48:06 字數 1843 閱讀 9437

阿里雲容器與儲存團隊展開合作,利用dadi加速器支援映象按需讀取和p2p分發,實現3.01秒啟動10000個容器,完美杜絕容器冷啟動的數分鐘漫長等待,以及映象倉庫大規模並行分發場景下的網路擁堵。

年關將至,各種年貨節、秒殺商品、倒計時直播即將紛至沓來。這些業務的共同點都是流量瞬間暴增,必須在立刻籌備大量的伺服器,並在極短時間內擴容容器承接線上流量,避免系統崩潰。除了需要集群節點的快速擴容,也對應用部署速度提出更高要求。

針對冷啟動的痛點,阿里雲推出乙個全新儲存引擎dadi加速器,將容器冷啟動耗時縮短至數秒。方案沉澱自阿里集團內部大規模應用的資料訪問加速經驗,曾在雙十一大促中為大規模容器集群擴容提供了秒級拉起能力。

本次測試場景是在 1000 臺4核8g的節點組成的kubernetes集群中進行,阿里雲容器服務kubernetes (ack) 能在極短時間內擴容出 1000 臺節點worker並加入到kubernetes 集群中。ack 的此能力在應對大促,秒殺,短時流量洪峰時具有亮眼的表現。

同時針對本次測試場景,利用kubernetes 強大的擴充套件性和自定義控制器,加快在大規模集群中建立應用和刪除應用的速度,保障了測試在極短時間內方便快捷的進行。

阿里雲容器團隊聯合儲存團隊研發的dadi加速器在本次測試中啟動10000個容器僅需3.01秒,10秒內啟動了近60000個容器。

figure 1 - 1萬個容器的啟動耗時為3.01秒,其中p999分位耗時2.97秒。

同時針對1萬個容器的冷熱啟動進行對比,即在本地有無映象快取對啟動時間的影響,熱啟動耗時2.91秒,其中p999耗時2.56秒

figure 2 - 1萬個容器的冷熱啟動耗時對比

dadi冷啟動由於資料按需從p2p網路中獲取,減輕了磁碟壓力避免發生io擁堵,因此長尾容器較少。

此外,還進行了限時摸高測試。在10秒的限制時間內利用1000臺宿主機啟動了59997個容器,在10.06秒時第6萬容器啟動完畢:

figure 3 - 限時 10 秒摸高測試

注:上述圖示資料,均在阿里雲容器團隊的容器服務ack中進行。為方便獲得每個容器的啟動時間,採用c/s模式:worker中每個容器拉起後向測試的httpserver上報自己狀態,以httpserver記錄的請求時間作為容器啟動耗時。

按需p2p資料讀取: 為減輕批量擴容時對單點registry帶來的總體負載,dadi利用樹形p2p網路對進行資料分發。即少數p2p根節點從registry獲取,其他節點(宿主機)之間可相互傳輸資料,批量擴容時可快速分發資料到所有節點;

高效的解壓縮演算法: dadi提供了一種新型的壓縮檔案格式,可按需單獨解壓使用者訪實際問的資料,且解壓時間開銷可忽略不計。

figure 5 - 容器啟動流程對比

figure 6 – dadi p2p資料分發

隨著kubernetes 被越來越廣泛地接受,阿里雲ack支撐了各行各業的企業級客戶。此次ack和dadi的深度整合,實現秒級啟動萬個容器,從容應對大規模應用擴容和發布,相關技術在未來也將成為serverless容器的啟動加速利器。

如何設計乙個秒級100萬級的訂單支付架構

在訂單支付系統中,往往會面臨這樣的問題 如何保證每秒萬級甚至10萬百萬級的支付請求或者訂單請求。在講這個這個設計之前來分析下要實現這個秒級100萬級的訂單支付架構會面臨怎樣的問題。1.db層 讀寫的壓力,高可用,資料庫的一致性。1.1.假定我們使用是的mysql,單庫,是無法支撐這個資料量級的併發操...

docker 容器內部啟動乙個http服務

首先要使用docker start命令啟動乙個已經停止的容器 docker start i c2f30指定 i引數,則可以進入容器內部。接下來,建立乙個python指令碼 test.py from flask import flask deffunc return hello docker if n...

使用docker run啟動並進入乙個容器

在日常使用中經常碰到使用者需要自己打包docker映象的情況,此時就需要進入到容器裡面安裝各種類庫。如何進入任意乙個基礎映象,並在其中進行操作呢?docker run it containerid bin bash進入容器後,往往還需要將本地機器的內容考到容器裡面 命令如下 docker cp fi...