1分鐘創建6000臺雲服務器,雲函數是如何做到的?

雲函數(Serverless Cloud Function,SCF)是騰訊云為企業和開發者們提供的無服務器執行環境,幫助用戶在無需購買和管理服務器的情況下運行代碼。而隨著方便快捷的雲原生服務愈發受人青睞,業務量與日俱增,作為提供雲函數SCF底層支持的雲服務器,也承受著越來越大的壓力。鮮為人知的是,承擔雲服務器創建任務的,是CBS雲硬盤快照服務。當雲函數SCF團隊需要業務擴容或版本變更,雲服務器創建併發量會增長為平常業務系統的數十倍。


通過不斷優化服務,在雲函數SCF業務高峰期,雲硬盤快照系統扛住了1分鐘內併發創建6000臺雲服務器的壓力。 那麼,雲硬盤快照是如何做到的?


一、SCF與CBS的協作之路

由於CVM雲服務器和CBS雲硬盤在彈性擴容、資源管理工作中便捷性突出,雲函數SCF團隊逐步使用CVM雲服務器和CBS雲硬盤搭建底層系統。當雲函數SCF雲函數需要發佈新版本時,會使用新版本的系統鏡像批量創建雲服務器,逐步替換舊版本鏡像雲服務器。雲硬盤團隊和雲函數SCF團隊反覆協商溝通,在不影響現網其他用戶的正常業務,初步的整體目標為:1分鐘內併發創建6000臺CVM,且服務器啟動後IO延時抖動穩定。


二、雲服務創建

當說到雲服務器創建,就不得不提CBS雲硬盤快照服務,它是雲硬盤某個時刻的數據備份。用戶可以使用快照記錄雲硬盤不同時刻的數據,用於滿足系統恢復、容災以及雲硬盤複製等需要。

那麼,雲硬盤的備份,和雲服務器創建有什麼關係?

別急,我們先為大家介紹下雲服務器創建的兩種方式,即通過鏡像下載或雲硬盤快照回滾創建。


1、雲服務器創建方式對比

鏡像下載:通過宿主機下載完整鏡像文件並寫入CBS雲硬盤後,才能啟動雲服務器。


雲硬盤快照回滾創建:先將鏡像文件以快照數據的形式存儲,當需要創建CVM雲服務器時,利用雲硬盤快照系統的秒級回滾能力,將鏡像文件批量回滾至指定的CBS雲硬盤。


它們之間的對比如下表所示,利用快照回滾創建雲服務器,擁有很多傳統創建方案不具備的能力:


1分鐘創建6000臺雲服務器,雲函數是如何做到的?


2、雲硬盤快照回滾創建雲服務器


通過快照回滾創建雲服務器,具備秒級併發創建,不佔用宿主機資源等特點,整體的流程如下:


1.鏡像數據存儲於cos對象存儲中:創建雲服務器時,雲硬盤快照系統將鏡像數據從COS拷貝至目標雲硬盤上,數據傳輸不經過宿主機。


2.雲服務器啟動只需訪問一小部分數據:雲硬盤快照系統優先拷貝關鍵數據,用戶啟動雲服務器後,後臺異步完成剩餘數據拷貝工作。CBS存儲系統對用戶IO和雲硬盤快照系統IO做了隔離處理,分配固定帶寬用於雲硬盤快照系統的寫入,整體流程對用戶的雲硬盤性能無影響。


雲硬盤快照系統優先搬遷關鍵數據,讓用戶在數秒內啟動雲服務器正常訪問,那麼,如果用戶啟動雲服務器後,訪問了未完成拷貝的數據,數據訪問是不是就會失敗?


其實,由於雲硬盤快照系統具備優先拷貝關鍵數據的能力,正常情況下,雲硬盤快照系統會按磁盤扇區位置順序拷貝數據。若一旦用戶訪問了未完成拷貝的數據,會觸發雲硬盤快照系統的優先拷貝機制,優先拷貝用戶需要訪問的數據。


1分鐘創建6000臺雲服務器,雲函數是如何做到的?

圖一. 快照回滾創建服務器圖示


示意圖說明:

①當用戶需要訪問待拷貝數據塊,宿主機通知雲硬盤快照系統優先從COS對象存儲搬遷指定數據
②雲硬盤快照系統將數據寫入CBS雲硬盤中
③快照系統返回寫入成功信息
④宿主機下發讀請求IO正常訪問雲硬盤數據。


三、雲硬盤快照系統肩負重任

回到雲函數SCF團隊的業務需求,1分鐘創建6000臺雲服務器,啟動後IO無卡頓,其實對於雲硬盤快照系統還是一個非常大的挑戰。
雲硬盤快照系統主要由三個模塊組成:管理節點manager,調度器scheduler,數據傳輸模塊transfer。管理節點manager負責快照任務管理,調度器scheduler負責任務調度,下發具體的拷貝任務。數據傳輸模塊transfer則具體執行拷貝任務。
當用戶發起創建雲硬盤服務器請求時,manager模塊接收請求,委託任務給schuduler,指定鏡像文件回滾至目標雲硬盤上。schuduler下發具體拷貝任務,讓transfer模塊從COS將數據塊拷貝寫入至目標雲硬盤。


1分鐘創建6000臺雲服務器,雲函數是如何做到的?

圖二. 雲硬盤快照系統架構圖示


挑戰一 拷貝數據耗時長


高併發量下,如果所有鏡像數據都從COS對象存儲系統拉取,對COS的讀壓力會非常大,觸發COS的Qos流控,且用戶訪問雲硬盤數據IO延時高。解決方案 :搬遷節點transfer,增加本地cache。


由於雲函數SCF批量創建雲服務器使用同一個鏡像,在每個搬遷節點transfer中都緩存鏡像的部分數據塊,一旦命中transfer的cache就不再從COS下載數據,這樣每個transfer只需下載一次鏡像。


1分鐘創建6000臺雲服務器,雲函數是如何做到的?

圖三. transfer增加本地cache圖示


挑戰二 系統QPS能力低


1分鐘創建6000臺子機,對快照系統的QPS能力要求達數十萬。隨著業務量上升,快照系統整體架構需具備橫向擴展提升QPS的能力。解決方案 :調度器scheduler支持水平擴展。


在快照回滾創建雲服務器過程中,核心處理邏輯在調度器scheduler,無論是順序拷貝的調度,還是優先拷貝請求都要經過scheduler, 所以scheduler的負載直接影響到整個雲硬盤快照系統的性能。scheduler單機性能有限,無法滿足併發量要求。開發團隊將scheduler由主從配置升級為水平擴展,並且整體架構均做了適配,使其不再成為性能瓶頸。


1分鐘創建6000臺雲服務器,雲函數是如何做到的?

圖四. scheduler水平擴展圖示


挑戰三 單倉庫讀寫能力有限


如果大量的雲硬盤落在同一個存儲倉庫,則會造成單倉庫寫入流量過大,觸發單倉庫回滾帶寬限制。解決方案 :增加雲硬盤倉庫調度系統。


在批量購買雲硬盤時,從倉庫的剩餘容量、已創建的雲硬盤數、回滾帶寬、倉庫當前用戶IO寫入帶寬四個緯度綜合考量,把同一批次創建的CBS雲硬盤儘量打散到多個,滿足6000臺雲服務器併發創建的需求。


通過上述方案,雲硬盤快照完成了1分鐘6000臺雲服務器創建任務,IO延時降低95.6%,COS讀帶寬降低89%,為使用雲函數SCF的企業和開發者帶來服務升級。


分享到:


相關文章: