一個時代的變革往往始於一個微小的創新。
1956 年,對航運一竅不通的卡車大亨麥克萊恩第一次將集裝箱用於貨物運輸時,恐怕連他自己也想象不到,一個普通的鐵箱子將會引發一場全球的巨大變革。
集裝箱尺寸一致,運輸流程標準、系統。每個箱子只裝一件貨物,能在港口、火車、輪船間自由裝卸。它大大提升效率的同時,也讓運輸成本降低了 90%,從實質上打破了各個國家、港口之間的物流壁壘。
這個箱子將世界就變成了一座大工廠,促使了全球分工和資源流通——蘋果找到中國的富士康,豐田公司創造出“及時生產”,美國人吃到了巴西的牛肉……一個微不足道的創新讓世界的經濟和政治格局都為之改變。
在 IT 屆,這個箱子被稱為“容器”。
和集裝箱一樣,容器將應用封裝好後,便可以在任意環境之下自由裝卸、敏捷執行,提高研發效率的同時,大大降低了運維成本,從而掀起科技圈的新浪潮。
自 2013 年 Docker 出現以來,“容器”便成為雲計算領域炙手可熱的關鍵詞。2019 年公開資訊顯示,Docker 開源版的下載次數超過 800 億次,有約有三分之一的財富 100 強和五分之一的全球 500 強公司都使用 Docker 企業版。權威機構 Gartner 預測,2022 年將有 75% 的企業使用容器。
不同於以往追隨矽谷的姿態, 國內的容器化實踐早在 10 年前便已拉開帷幕。
效能危機這其中,佈局最早的是阿里。
2011 年,隨著雲計算的普及,阿里巴巴走過物理機時代,全面邁向虛擬機器。
如果說物理機是家裡的電腦,那虛擬機器則是在電腦上模擬出的許多臺小電腦,它擁有完整的軟硬體功能,使用體驗就跟電腦一致。但“虛擬化”有效能損耗。如果一臺 100 個 CPU 的物理機能虛擬出來 100 臺小電腦,那麼只有 90 臺真正幹活,另外 10 臺要額外做管理工作,損耗由此形成。
規模小時損耗無傷大雅,但阿里數萬叢集,光是虛擬化過程中耗損的算力就抵得過一家中型網際網路公司。
2011 年,為了緩解巨大的虛擬化損耗,淘寶的第一個程式設計師蔡景現(花名:多隆)和第一代架構師林昊(花名:畢玄)在無心插柳中研發出了阿里第一代容器——T4。
T4 同樣基於物理機而來。普通虛擬機器將整個作業系統執行在虛擬的硬體平臺上,進而提供執行環境供應用程式執行,而 T4 則直接在宿主平臺上載入執行應用程式。
但它依然無法解決阿里高企的運維成本。
彼時,為了維繫龐大叢集的穩定,阿里運維團隊超過 300 人,24 小時輪班,依然追不上逐年攀升的業務量。“雙11” 期間,使用者暴漲,應用激增,數以百計的工程師更要手動擴容,用人肉築起堤壩才不至於被流量洪峰衝倒。
也是在這一年,大洋彼岸一家名不見經傳的 Dotcloud 公司開源了其容器建立技術 Docker。
容器並不是 Dotcloud 公司的創新,但他們開源的 Docker 為容器引入了映象機制。
映象,簡而言之是一個壓縮包, 裡面包含應用程式碼和所依賴的所有檔案和目錄。將映象打包上傳到映象庫後,無論在何種環境,工程師只需到庫裡下載映象,便能重新創造出跟之前一摸一樣的容器,無縫操作。
有了它,工程師就像擁有魔法,能在任意環境中,快速構建出需要的容器。
它完美地解決了傳統 IT 流程下的兩大難題——釋出成功率低和運維壓力。
傳統的 IT 流程下, 業務、研發、運維職責不明晰,運維要一次次調整引數來保障應用執行穩定。
但用了 Docker,情況便大為不同。研發工程師在寫應用程式碼的同時,便會交代清楚執行所依賴的環境,應用釋出成功率自然能提高,也減小了運維壓力。這也形成了一種 DevOps (研發運維一體化)的工作模式。
Docker 扇動翅膀,科技圈出現容器風暴。擁有了映象後的容器,成為了 IT 屆的“集裝箱”,與之配套的技術、標準也紛紛上線。
微軟、谷歌、亞馬遜等巨頭公司熱烈擁抱,先前瀕臨淘汰的小公司 Dotcloud 成為炙手可熱的新星,而後還直接將公司名字改成了大功臣 Docker,並利用 Docker 著手商業化。
大洋彼岸的阿里不遑多讓。2015 年,林昊招募林軒加入團隊,持續完善 T4。後者敏銳地捕捉到了這股容器化熱浪。他和林昊、蔡景現一致決定將 T4 映象化升級,以保持技術先進性。
在林軒的搖旗吶喊下, 楊育兵(花名:沈陵)、張振(花名:守辰)、一嘯等人先後加入,成為最早的容器小分隊。大半年後,他們成功將 T4 升級為 Alidocker。
一盆涼水容器團隊期望將 T4 全部替換成 Alidocker。原想一鳴驚人,沒承想等來的卻是冷板凳。
如先前所說,容器,作為封裝業務應用的集裝箱,如若替換便會帶來一整條研發、運維鏈路的改變。而阿里的技術體系之複雜世所罕見,一個引數的改變都有可能引發故障,故而甚少業務部門願意拿身家性命冒險。
但容器團隊有自己的考慮。在技術迭代頻仍的科技圈,即便是具有壟斷地位的產品、技術和公司,也會驟然被時間的浪潮打翻,
危機感是科技公司的達摩克利斯之劍。
2015 年,Docker 正式成為了容器界的標準,但阿里卻還在使用 T4。
不能再等了!容器團隊夾著 PPT,奔走宣揚,為了讓業務團隊留下深刻印象,林軒介紹楊育兵“這是我們容器小王子”,而張振是“映象小王子”,他還在內網寫下長帖疾呼《阿里人請用 Alidocker !》
一番操作下,大家記住了 Alidocker 和兩位王子,依然無動於衷。有主動找上門的,問的都是 T4,也有禁不住熱情的,送上幾個沒有名字的邊緣應用。
轉眼來到 2016 年 6 月,團隊只接到 30 多個應用。此時各業務已開始籌備 雙11,說服其用 Alidocker 更是難上加難。
林軒急了,在一次會議中舌戰百人,痛陳映象化的必要性:“弓馬再嫻熟,遲早要換成火槍大炮原子彈。不接受先進的文明,總有一天像大清朝一樣完蛋!”
事情陷入僵局,時任阿里集團 CTO 張建鋒(花名:行癲)站了出來,“我支援 Alidocker,線上應用要 100% 容器化!”
張建鋒
對於容器化,張建鋒有完整的佈局。容器的優勢有目共睹,阿里業務逐年爆發,容器規模化後,跑在雲伺服器上是必然趨勢。
阿里雲的飛天作業系統已經可以成熟排程數萬臺物理機,但因為虛擬化損耗,容器依然只跑在物理機上,無法享受到上雲便利。
為了給容器打造最合適的底座,在 2016 年 雙11 覆盤會上,張建鋒點將張獻濤(花名:旭卿)為首的彈性計算團隊,打造神龍伺服器,攻克雲計算十數年的難題——將虛擬化損耗降低為零。
從上層的容器到下層的資源底座神龍,如此,阿里便能構建敏捷、高效的業務執行體系。
在張建鋒的支援下,阿里容器化的程序按下“加速鍵”, 一場橫跨了 5 個事業部,9 個團隊,11 個業務域的容器化改革拉開帷幕。
初露鋒芒容器掀起的風暴繼續在科技圈狂吹,若想將 Docker 進行大規模應用,編排、排程就顯得尤為重要。
2015 年,谷歌的 K8s、Docker 的 Swarm、以及開源社群的 Mesos 在容器編排市場呈“三足鼎力”之勢。
為了避免 Docker 一家獨大,谷歌(Google)、紅帽(RedHat)等開源玩家們,共同成立了一個名為 CNCF(Cloud Native Computing Foundation)的基金會,它本質上是以 K8s 為核心的開源社群。
容器編排市場進入長達兩年的混戰。期間,阿里容器化程序也如火如荼。
Alidocker 起初表現不穩定,釋出卡單、響應延時、映象下載慢、擴容難……每一個 Bug 的出現,都會帶來一次業務方的跳腳。容器團隊 7 乘 24 小時輪班值守,為了與不同的業務高度匹配,他們每週迭代十幾個版本,楊育兵專門寫了《Alidocker 的 1000 個細節》來答疑解惑。
2016 年 9 月,雙11 進入全鏈路壓測,容器團隊一舉一動都在聚光燈下。
第一次壓測,Alidocker 因為釋出鏈路慢,導致壓測失利。為了解決問題,楊育兵把上下游相關係統全摸了一遍;張振做映象到吐,直到 雙11 所有交易業務都能跑通。
時間逼近,連阿里集團 CEO 逍遙子都忍不住過問:“畢玄,你覺得今年上 Alidocker 靠不靠譜?”
開弓沒有回頭箭,雙11 如約而至。零點,大螢幕數字飛速翻滾。容器團隊緊緊盯著螢幕。
17.5 萬筆/秒,訂單建立峰值再破記錄。數百應用、20 萬容器、100% 核心流量,Alidocker 成功扛住,資料處理能力提升 5 倍。
萬重大山落地,容器團隊露出久違的笑容。
突破瓶頸容器編排市場的國際戰局也逐漸清晰。
K8s 在開源社群 Github 上的各項指標一騎絕塵,將 Docker 原配 Swarm 遠遠甩在身後,2017 年底,隨著 Docker 宣佈支援 K8s。K8s 最終勝出,成為容器編排平臺的標準。 有了 K8s 這個護城河,CNCF 社群迅速推出了一系列容器生態的知名工具和專案。大量的公司和創業團隊開始圍繞 CNCF 而非 Docker 制定容器化策略。社群日益繁榮,號召力貫徹中外。
AWS、Azure、阿里雲、谷歌雲和 IBM 雲等前五大雲廠商都已經成為了 CNCF 會員,並在自己的雲平臺中提供了 K8s 服務——國外媒體稱“他們確認了雲原生和容器是企業計算的未來”。
珠玉在前,國內公司也紛紛加快了容器化的步伐。華為從 2017 年開始,在內部支撐華為終端雲服務等核心業務容器化。一年後, 騰訊自研業務開始上雲,並計劃完成雲原生技術的改造。
阿里步子更大,線上業務於 2017 年實現全面容器化(Alidocker 正式更名為 PouchContainer),容器數量上升至百萬。
帶領團隊完成這項工程的,正是丁宇(花名:叔同)。2017 年初,丁宇接手容器團隊,阿里備戰 雙11 的制勝法寶——全鏈路壓測,也是他的手筆。
丁宇
碼頭上的集裝箱僅僅憑藉箱子本身,並不能實現如此巨大的變革。麥克萊恩的偉大之處在於,圍繞著集裝箱提出了全新的貨運體系,包括管理者、港口、貨船、起重機、卡車和全新的交付流程等。
IT 行業同樣如此,容器只是集裝箱和簡單吊裝,背後的編排、排程等配套設施同樣不可或缺。
為了讓容器實現最佳效能,團隊將 PouchContainer 融合整套設施,升級為 ASI 容器服務(Alibaba Serverless Infrastructure)。
使用 ASI 容器服務後,使用者只需關心容器中的應用即可,至於容器的建立、排程、運維管控等一系列瑣事,交給容器廠商即可。
為了能讓阿里集團、阿里雲及外部使用者都享受到同樣的容器服務,ASI 勢必要相容通用標準 K8s 和 Docker,但難度極大。
“你得保證幾百萬個容器遷移到 ASI 時執行穩定,不掉鏈子”,ASI 專案負責人黃濤(花名:智清)說,“這就像給一個百米衝刺的人移植心臟。”
而且 K8s 有一個致命弱點,當叢集達到萬級規模,便會出現延遲和拒絕訪問,無法適應動輒上萬的叢集,這也是業界難以突破的瓶頸。
Docker 同樣有弱點,建立容器時映象下載慢,無法實現快速擴容。
黃濤不敢掉以輕心,選出3人組成突擊隊,為大部隊探路。花了 2 個月時間,試遍了所有方法,依然想不出萬全之策。
林昊遠赴海外,請來張瓅玶(花名:谷樸)和李響。張瓅玶曾在谷歌管理著雲原生資源池。李響則是 ETCD 分散式儲存系統的作者,ETCD 一經問世,就成為了業界標準。2019 年,李響成為 CNCF 9 位委員之一,也是委員會有史以來首位中國委員。
引發 ASI 的效能瓶頸的重要原因之一,便是管理節點中的儲存瓶頸。為了突破儲存效能,阿里技術團隊改進 ETCD 底層儲存引擎的分配演算法,將儲存空間從原本的 2GB 提升為 100GB,且沒有延時。除了儲存,團隊還透過提前載入節點所需資料,減少同步事件等方式,拓展了管理節點的各項效能。
與此同時,PouchContainer 也迎來喜訊。之前建立容器時,必須完整地拉取映象,一旦遇到大規模的業務量,擴容速度甚至會飆升至 10 分鐘。而團隊研發出了秒級映象技術,讓映象能夠按需載入,實現了秒級下載擴容。
前排左一:黃濤,右二:張振 ;後排左四:楊育兵,右三:林昊,右二:林軒
突破兩大瓶頸,ASI 打破業界難題,實現超萬級節點穩定執行。阿里內外越來越多的業務方接入。
血的教訓現實總是在不經意間給予痛擊。
“一個基礎技術團隊,在推動技術變革期間,萬眾矚目下,捅出一個大簍子……”。回憶起曾經的一個大故障,總裁直接技術負責人打電話,團隊成員們心有餘悸。
那次事故後,原打算接入的業務方陸續退出,ASI 團隊士氣低落,有人頂不住壓力離開。
痛定思痛後,丁宇在內網發帖,如此自省:“基礎不牢,地動山搖。這一年跑得太快了,不停接入新業務,忽略了團隊的承受能力,希望大家記住這個血的教訓,引以為戒。”
黃濤不得不開始考慮最極端情況下的保障措施,比如阿里叢集都掛了,容器如何恢復;又或者排程系統崩潰了,如何讓業務不受影響......
為了打造一個固若金湯的“集裝箱”, 他們苦修內功。
衝上雲霄與此同時,阿里集團開始了轟轟烈烈的上雲之路。
2019 年初,時任阿里集團 CTO 兼阿里雲智慧總裁的張建鋒召集阿里的技術骨幹開會,“今年開始,阿里巴巴不再採購物理機,所有新增計算都上公共雲。”
阿里終於迎來衝向雲霄的時機。ASI 團隊決定將讓所有容器搭載在阿里自研的神龍伺服器上,完成最關鍵的一步——上雲。
神龍伺服器將虛擬化損耗降低至幾乎不計,可以讓計算成本下降 50%,容器效能提升 30%,這是真正為容器而生的雲伺服器。
但 PouchContainer 下搭載著阿里用了十多年的物理機,執行著上萬應用, 要從雲下搬遷至雲上,僅靠 ASI 團隊,難以面面俱到。為了爭取業務方的配合,丁宇帶著所有人到一線技術團隊宣講如何上雲。
與此同時,為了真正讓阿里雲、阿里集團內部以及開源社群享受到同樣的容器服務,實現“三位一體”。李響帶領團隊與雲產品 ACK(阿里雲對外的容器服務產品)融合。團隊熟讀 ACK 程式碼,在阿里雲飛天園區閉關數週,“做不出來不回西溪!”
歷時近一年,這場集結了阿里 5 萬名工程師的浩大工程,在 2019 年 雙11 禁受住了全球最高流量洪峰的考驗。阿里正式宣佈,其核心繫統已 100% 跑在阿里雲上。
ASI 也成功實現了與雲產品 ACK 的會師。如今的雲產品 ACK,既保留了雲上的各種能力,也能成功應對阿里集團複雜的業務環境。
少為人知的是,這同時是全球最大規模的雲原生實踐。
所謂雲原生,便是以“天生就在雲上”的理念打造的一整套 IT 體系,自容器開始,雲原生中介軟體、資料庫、伺服器等基礎系統也陸續出爐,共同構建出幅員遼闊的雲原生版圖。
正如集裝箱的出現締造了全新的航運體系,容器的出現也開啟了雲計算的新時代。
集裝箱的威力2019 和 2020 年,在雲計算史上註定是兩個熱鬧的年份。
谷歌推出了以 K8s 為核心的混合雲/多雲管理平臺 Anthos;微軟推出了開源的雲原生服務網路 Open Service Mesh;華為雲釋出了第二代零損耗裸金屬容器;阿里繼 2019 年之後,在 2020 年實現了更徹底的最大規模雲原生實踐……
阿里集團 CTO 程立(花名:魯肅)表示:阿里核心系統實現了全面雲原生化,每萬筆峰值交易的 IT 成本較四年前下降了 80%,規模化應用交付效率提升了一倍之多,可在 1 小時內擴充套件超百萬容器,彈性伸縮效能提升 10 倍以上。
雲原生大潮奔騰而來。
權威機構 Gartner 預測,到 2020 年,將有 50% 的傳統老舊應用被以雲原生化的方式改造,到 2022 年,將有 75% 的全球化企業將在生產中使用雲原生的容器化應用。
沒有人再懷疑——“雲原生就是未來”。 2020 年 9 月的雲棲大會上,阿里巴巴成立雲原生技術委員會 ,負責人蔣江偉(花名:小邪)稱將對外賦能數百萬家企業進行雲原生改造,提升 30% 研發效率的同時降低 30% IT 成本。
蔣江偉
雲原生拓展商業邊界,並將這股浪潮滲透到人類活動的每個角落。
中國移動使用容器取代虛擬機器;網商銀行已將 400 多個應用程式調整為雲原生架構。京東雲也在進行微服務和容器化改造。疫情爆發期,釘釘基於阿里雲容器解決方案,在 2 小時內擴容一萬臺主機支撐 2 億上班族線上工作。申通快遞將核心系統搬到雲上,大規模部署阿里雲容器,億級包裹過境,系統穩如泰山,IT 成本還降低了 30%。阿里自研雲原生技術 Virtual Cluster、 Open kruise,在社群開源後,已經被領英、蘋果等公司採用。如果是 5 年前,你會看到“Docker 基礎介紹”和“雲原生是什麼?”而今天,當你再次搜尋時,“雲原生”已是行業公認的“雲計算的下一個時代”。
而這一切,都始於那個“箱子”。