解密背后承擔云服務器創建任務的 CBS 云硬碟快照服務

云函式(Serverless Cloud Function,SCF)是騰訊云為企業和開發者們提供的無服務器執行環境,幫助用戶在無需購買和管理服務器的情況下運行代碼,而隨著方便快捷的云原生服務愈發受人青睞,業務量與日俱增,作為提供云函式 SCF 底層支持的云服務器,也承受著越來越大的壓力,鮮為人知的是,承擔云服務器創建任務的,是 CBS 云硬碟快照服務,當云函式 SCF 團隊需要業務擴容或版本變更,云服務器創建并發量會增長為平常業務系統的數十倍,
通過不斷優化服務,在云函式 SCF 業務高峰期,云硬碟快照系統扛住了 1 分鐘內并發創建 6000 臺云服務器的壓力, 那么,云硬碟快照是如何做到的?
一、SCF 與 CBS 的協作之路
由于CVM云服務器和CBS云硬碟在彈性擴容、資源管理作業中便捷性突出,云函式SCF團隊逐步使用CVM云服務器和CBS云硬碟搭建底層系統,當云函式SCF云函式需要發布新版本時,會使用新版本的系統鏡像批量創建云服務器,逐步替換舊版本鏡像云服務器,云硬碟團隊和云函式SCF團隊反復協商溝通,在不影響現網其他用戶的正常業務,初步的整體目標為:1分鐘內并發創建6000臺CVM,且服務器啟動后IO延時抖動穩定,
二、云服務器創建
當說到云服務器創建,就不得不提CBS云硬碟快照服務,它是云硬碟某個時刻的資料備份,用戶可以使用快照記錄云硬碟不同時刻的資料,用于滿足系統恢復、容災以及云硬碟復制等需要,
那么,云硬碟的備份,和云服務器創建有什么關系?
別急,我們先為大家介紹下云服務器創建的兩種方式,即通過鏡像下載或云硬碟快斬訓滾創建,
2.1 云服務器創建方式對比
鏡像下載: 通過宿主機下載完整鏡像檔案并寫入CBS云硬碟后,才能啟動云服務器,
云硬碟快斬訓滾創建: 先將鏡像檔案以快照資料的形式存盤,當需要創建CVM云服務器時,利用云硬碟快照系統的秒級回滾能力,將鏡像檔案批量回滾至指定的CBS云硬碟,
它們之間的對比如下表所示,利用快斬訓滾創建云服務器,擁有很多傳統創建方案不具備的能力:

2.2 云硬碟快斬訓滾創建云服務器
通過快斬訓滾創建云服務器,具備秒級并發創建,不占用宿主機資源等特點,整體的流程如下:
1.鏡像資料存盤于cos物件存盤中:創建云服務器時,云硬碟快照系統將鏡像資料從COS拷貝至目標云硬碟上,資料傳輸不經過宿主機,
2.云服務器啟動只需訪問一小部分資料:云硬碟快照系統優先拷貝關鍵資料,用戶啟動云服務器后,后臺異步完成剩余資料拷貝作業,CBS存盤系統對用戶IO和云硬碟快照系統IO做了隔離處理,分配固定帶寬用于云硬碟快照系統的寫入,整體流程對用戶的云硬碟性能無影響,
云硬碟快照系統優先搬遷關鍵資料,讓用戶在數秒內啟動云服務器正常訪問,那么,如果用戶啟動云服務器后,訪問了未完成拷貝的資料,資料訪問是不是就會失敗?
其實,由于云硬碟快照系統具備優先拷貝關鍵資料的能力,正常情況下,云硬碟快照系統會按磁盤扇區位置順序拷貝資料,若一旦用戶訪問了未完成拷貝的資料,會觸發云硬碟快照系統的優先拷貝機制,優先拷貝用戶需要訪問的資料,

示意圖說明:
- 當用戶需要訪問待拷貝資料塊,宿主機通知云硬碟快照系統優先從COS物件存盤搬遷指定資料
- 云硬碟快照系統將資料寫入CBS云硬碟中
- 快照系統回傳寫入成功資訊
- 宿主機下發讀請求IO正常訪問云硬碟資料,
三、云硬碟快照系統肩負重任
回到云函式SCF團隊的業務需求,1分鐘創建6000臺云服務器,啟動后IO無卡頓,其實對于云硬碟快照系統還是一個非常大的挑戰,
云硬碟快照系統主要由三個模塊組成:管理節點manager,調度器scheduler,資料傳輸模塊transfer,管理節點manager負責快照任務管理,調度器scheduler負責任務調度,下發具體的拷貝任務,資料傳輸模塊transfer則具體執行拷貝任務,
當用戶發起創建云硬碟服務器請求時,manager模塊接收請求,委托任務給schuduler,指定鏡像檔案回滾至目標云硬碟上,schuduler下發具體拷貝任務,讓transfer模塊從COS將資料塊拷貝寫入至目標云硬碟,

挑戰一:拷貝資料耗時長
高并發量下,如果所有鏡像資料都從COS物件存盤系統拉取,對COS的讀壓力會非常大,觸發COS的Qos流控,且用戶訪問云硬碟資料IO延時高,解決方案 :搬遷節點transfer,增加本地cache,
由于云函式SCF批量創建云服務器使用同一個鏡像,在每個搬遷節點transfer中都快取鏡像的部分資料塊,一旦命中transfer的cache就不再從COS下載資料,這樣每個transfer只需下載一次鏡像,

挑戰二:系統 QPS 能力低
1分鐘創建6000臺子機,對快照系統的QPS能力要求達數十萬,隨著業務量上升,快照系統整體架構需具備橫向擴展提升QPS的能力,解決方案 :調度器scheduler支持水平擴展,
在快斬訓滾創建云服務器程序中,核心處理邏輯在調度器scheduler,無論是順序拷貝的調度,還是優先拷貝請求都要經過scheduler, 所以scheduler的負載直接影響到整個云硬碟快照系統的性能,scheduler單機性能有限,無法滿足并發量要求,開發團隊將scheduler由主從配置升級為水平擴展,并且整體架構均做了適配,使其不再成為性能瓶頸,

挑戰三:單倉庫讀寫能力有限
如果大量的云硬碟落在同一個存盤倉庫,則會造成單倉庫寫入流量過大,觸發單倉庫回滾帶寬限制,解決方案 :增加云硬碟倉庫調度系統,
在批量購買云硬碟時,從倉庫的剩余容量、已創建的云硬碟數、回滾帶寬、倉庫當前用戶IO寫入帶寬四個緯度綜合考量,把同一批次創建的CBS云硬碟盡量打散到多個,滿足6000臺云服務器并發創建的需求,
四、總結
通過上述方案,云硬碟快照完成了 1 分鐘 6000 臺云服務器創建任務,IO 延時降低 95.6%,COS 讀帶寬降低 89%,為使用云函式 SCF 的企業和開發者帶來服務升級,
Get 同款服務:
- 云函式 SCF
- 云硬碟快照服務
傳送門:
- GitHub: github.com/serverless
- 官網:serverless.com
歡迎訪問:Serverless 中文網,您可以在 最佳實踐 里體驗更多關于 Serverless 應用的開發!
推薦閱讀:《Serverless 架構:從原理、設計到專案實戰》
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/21452.html
標籤:其他
