摘要: Dragonfly 目前承載了阿里全集團 90%以上的文件下載任務、日分發峯值達到 1 億次,100%成功支撐雙十一營銷活動數據抵達數萬臺機器,github Star 數已達到 2500+。2018 年 11 月 14 日已正式進入 CNCF,成爲 CNCF 沙箱級別項目(Sandbox Level Project)。git
Dragonfly 是一個由阿里巴巴開源的雲原生鏡像分發系統,主要解決以 Kubernetes 爲核心的分佈式應用編排系統的鏡像分發難題。隨着企業數字化大潮的席捲,行業應用紛紛朝微服務架構演進,並經過雲化平臺優化業務管理。Dragonfly 源於阿里巴巴,從實際落地場景出發,前瞻性地解決了雲原生鏡像分發的__效率、流控與安全__三大難題。github
Dragonfly 目前承載了阿里全集團 90%以上的文件下載任務、日分發峯值達到 1 億次,100%成功支撐雙十一營銷活動數據抵達數萬臺機器,github Star 數已達到 2500+。2018 年 11 月 14 日已正式進入 CNCF,成爲 CNCF 沙箱級別項目(Sandbox Level Project)。算法
隨着阿里集團業務爆炸式增加,2015 年時發佈系統日均發佈量突破兩萬,不少應用的機器規模開始破萬,發佈失敗率開始增高,而根本緣由則是發佈過程須要大量的文件拉取,文件服務器扛不住大量的請求,固然第一時間會想到服務器擴容,但是擴容後又發現後端存儲成爲瓶頸且擴容成本也很是巨大(按照咱們的計算,爲了知足業務需求,不阻礙業務的發展,後續至少須要 2000 臺高配物理機且上不封頂)。此外,大量來自不一樣 IDC 的客戶端請求消耗了巨大的網絡帶寬,形成網絡擁堵。後端
同時,阿里巴巴不少業務走向國際化,大量的應用部署在海外,海外服務器下載要回源國內,浪費了大量的國際帶寬,並且還很慢;若是傳輸大文件,網絡環境差,失敗的話又得重來一遍,效率極低。跨域
因而咱們很天然的就想到了 P2P 技術,P2P 技術並不新鮮,當時也調研了不少國內外的系統,可是調研的結論是這些系統的規模和穩定性都沒法達到咱們的指望,所以就有了Dragonfly這個產品的誕生。緩存
做爲一款通用文件分發系統,Dragonfly 主要可以解決如下幾個方面的問題:安全
經過 P2P 技術解決大規模鏡像下載問題,原理以下:服務器
針對上圖有幾個概念須要先解釋:網絡
主要下載過程以下:多線程
經過上述 P2P 技術,能夠完全解決鏡像倉庫的帶寬瓶頸問題,充分利用各個 Peer 的硬件資源和網絡傳輸能力,達到規模越大傳輸越快的效果。
Dragonfly的系統架構不涉及對容器技術體系的任何改動,徹底能夠無縫支持容器使其擁有 P2P 鏡像分發能力,以大幅提高文件分發效率!
結合 CDN 與預熱技術解決遠距離傳輸問題
經過 CDN 緩存技術,每一個客戶端能夠就近從 SuperNode 中下載種子塊,而無需跨地域進行網絡傳輸,CDN 緩存原理大體以下:
同一個文件的第一個請求者會觸發檢查機制,根據請求信息計算出緩存位置,若是緩存不存在,則觸發回源同步操做生成種子塊;不然向源站發送 HEAD 請求並帶上 If-Modified-Since 字段,該字段的值爲上次服務器返回的文件最後修改時間,若是響應碼爲 304,則表示源站中的文件目前還未被修改過,緩存文件是有效的,而後再根據緩存文件的元信息肯定文件是不是完整的,若是完整,則緩存徹底命中;不然須要經過斷點續傳方式把剩下的文件分段下載過來,斷點續傳的前提是源站必須支持分段下載,不然仍是要同步整個文件。若是 HEAD 請求的響應碼爲200,則表示源站文件已被修改過,緩存無效,此時須要進行回源同步操做;若是響應碼既不是 304 也不是 200,則表示源站異常或地址無效,下載任務直接失敗。
經過 CDN 緩存技術能夠解決客戶端回源下載以及就近下載的問題,可是若是緩存不命中,針對跨域遠距離傳輸的場景,SuperNode 回源同步的效率將會很是低,這會直接影響到總體的分發效率,爲了解決該問題,Dragonfly採用了一種自動化層級預熱機制來最大程度的提高緩存命中率,其大體原理以下:
經過 Push 命令把鏡像文件推送到 Registry 的過程當中,每推送完一層鏡像就會當即觸發 SuperNode 以 P2P 方式把該層鏡像同步到 SuperNode 本地,經過這種方式,能夠充分利用用戶執行Push和Pull操做的時間間隙(大概10分鐘左右),把鏡像的各層文件同步到 SuperNode 中,這樣當用戶執行 Pull 命令時,就能夠直接利用 SuperNode 中的緩存文件,天然而然也就沒有遠距離傳輸的問題了。
經過動態壓縮和智能化調度解決帶寬成本問題
經過動態壓縮,能夠在不影響 SuperNode 和 Peer 正常運行的狀況下,對文件中最值得壓縮的部分實施相應的壓縮策略,從而能夠節約大量的網絡帶寬資源,同時還能進一步提高分發速率,相比於傳統的 HTTP 原生壓縮方式,動態壓縮主要有如下幾個方面的優點:
動態壓縮的優點首先天然是動態性,它能夠保證只有在 SuperNode 和 Peer 負載正常的狀況下才會開啓壓縮,同時只會對文件中最值得壓縮的分塊進行壓縮且壓縮策略也是動態肯定的;此外,經過多線程壓縮方式能夠大幅提高壓縮速率,並且藉助 SuperNode 的緩存能力,整個下載過程只須要壓縮一次便可,壓縮收益比相對於 HTTP 原生方式至少提高 10 倍。
除了動態壓縮外,經過 SuperNode 強大的任務調度能力,能夠儘可能使在同一個網絡設備下的 Peer 互傳分塊,減小跨網絡設備、跨機房的流量,從而進一步下降網絡帶寬成本。
經過加密插件解決安全傳輸問題
在下載某些敏感類文件(好比祕鑰文件或者帳號數據之類的文件)時,傳輸的安全性必需要獲得有效保障,在這方面,Dragonfly主要作了如下幾個方面的工做:
在阿里巴巴集團內部,Dragonfly做爲全集團基礎技術構件,目前已經承載了全集團 90%以上的文件下載任務,包括鏡像文件、應用軟件包、算法數據文件、靜態資源文件以及索引文件等等,日分發峯值目前能夠達到 1 億次,爲集團業務提供了高效穩定的文件分發能力;同時,每一年雙十一你們買買買的過程當中,其中最爲關鍵的營銷活動數據(數 GB 大小)也是在將近零點的時候經過Dragonfly來成功(100%成功)抵達數萬臺機器上的,萬一在這個過程當中有一點點問題,雙十一會如何,你懂的......
目前 Dragonfly 也已經開源,在開源社區中, 目前 Star 數 2500+,同時有很是多的外部用戶對 Dragonfly 表現出濃厚的興趣,也有不少外部公司正在使用 Dragonfly 來解決他們在鏡像或者文件分發方面遇到的各類問題,好比中國移動、滴滴、科大訊飛等;此外,Dragonfly 已成爲全中國第三個進入CNCF Sandbox 級別的項目,後續咱們還會繼續加油努力,爭取儘快畢業!
經過以上介紹,我相信針對Dragonfly是否足夠成熟,你們內心應該也有桿秤了吧,固然,Dragonfly還有不少事情須要不斷完善和改進,在這裏誠邀各路人才,一塊兒把Dragonfly打形成一款世界級的產品!