容器時代,這確實是我們想要的未來!

jopen 9年前發布 | 10K 次閱讀 容器
 

【編者的話】由于上一篇 容器時代,難道這就是我們想要的未來? 反響強烈,CircleCI的創始人Paul Biggar再次出山寫了此文章。此文同樣知識點非常很多,文字犀利,可以看出Paul Biggar是對于軟件行業有深刻理解的人物。每個人對于容器生態圈或者Docker的看法有不同,希望從文章中讀者能與Paul有些共鳴。

上周我寫 It’s The Future ,諷刺了容器生態系統,順帶輕嘲諷下 Docker、Google、CoreOS和一堆其他技術。很多 Docker愛好者享受容器生態系統成為笑柄,但這篇文章也被很多人所喜愛而同樣分享這篇文章的很多人叫囂著“我告訴你,這一切都是胡說八道”。

正是我的這種諷刺方式很輕易的使人們可能認為容器生態系統是胡說八道。畢竟,輕輕一瞥很難理解Docker是什么 。這是集裝箱,也就是像虛擬化,但并不完全是虛擬化。它有一個有點像Chef的Dockerfile,但它與一個涉及到無法理解的文件系統或其他一些所謂 層的東西相結合。它和AWS、Heroku、VMware和Vagrant的目的一樣解決了類似的問題,但在每種情況下,它的方式會和起初認知的總會略有 不通,也存在真的永遠搞不清楚它是什么。它有27種競品工具,這些工具你不可能說出它們是哪些,它們有滑稽的名字如:machine、swarm、 flannel、weave、etcd、rkt、kubernetes、compose、flocker。它不知何故和炫酷的微服務聯系到了一起,但這是 極其愚蠢的想法,當考慮到首先保持運行一個單一的服務它是多么困難。而在這一切之后,它有這種看不懂的態勢被盛傳,數十家創業公司和大公司都在競相擁戴 它。

這真的不需要再看看整個 Docker和container相關的技術,并得出結論:它就是廢物?

但事實并非如此。

它實際上是我們如何構建應用的未來。

為什么會是新動力?

為什么會存在許多兄弟們認為 It’s The Future 是100%準確,這壓根不是諷刺,他們質疑整個容器的技術炒作。

Docker和容器生態系統(以下簡稱“ Docker”)應用程序開發世界的集大成之作,如虛擬化,面向服務架構和操作系統,并與不同的目標和利益重新傳遞它們。至于它這樣做,它引起大量的開發者社區的洗牌:守財奴怕一切的新東西。

軟件產業,正如你所期望的,絕對是擠滿了憎惡進步的人。有這么一群人,他們會走進米開朗基羅建成的西斯廷教堂宣布他們已經有了神的完美圖片,他們更喜歡自己的天花板是白色的,而且壁畫不是很酷的呢。

與此同時,大部分的軟件產業做出決策,像一個高中少年:他們癡迷處處觀察在他們的朋黨哪些是酷的,他們也許看看Instagram的和 非死book的內容,然后盲從他們所引領的技術。圍繞這些技術,它們構成幫派,甚至圍繞技術生態雕刻自己的身份,他們不斷適應,他們甚至在自己的筆記 本電腦上蓋上他們的幫派色彩,并且討厭和抱怨那些陌生或者另類的技術。

正如世界之水Docker:做著幾乎一切事情的新途徑。它扔掉有關操作系統、部署、OPS、打包、防火墻、PaaSes和一切舊的規則。一些開發 人員立刻愛上它,有時正當的理由,如能解決的問題,有時是因為它是一個閃亮的玩具,在其他孩子得到之前,它使他們變得炫酷。其他開發者恨它,它純粹的炒 作,他們說:它只是像以前來了新技術一樣,我不明白為什么每個人都在談論這件技術,他們說,通常的原因是,比理性更感性的。

鑒于Docker基于該技術本身不是必須的。大多的討厭者是不是真的反應基于Docker解決方案的重要和復雜問題。大多數情況下,如果你沒有花 時間擴展系統,你可能沒有注意到那些問題。如果不直觀和深刻領會什么叫“黃牛不是寵物”,這確實很重要,那么你在選擇很多由Docker和其相關工具會顯 得怪異和可怕。

容器時代,這確實是我們想要的未來!

合并世界

Docker正出于兩個學科合并點:Web應用和分布式系統。在過去的十年中,我們所處的網絡社區被大大假裝成基本上都被我們可以通過了解如何編 寫代碼構建Web應用程序。我們寫一些HTML、JavaScript、Rails并且我們有一個網站。我們增加了一些forms、handlers,也 許再加一個API,我們就大功告成了:這足夠推出的一款產品,能夠獲得投資、客戶和收入,可以改變世界!

同時,在過去的二十年中,分布式系統的那些人脈一直在做一些很無聊的破事。他們已經實驗過像CORBA和SOAP復雜的協議,并學會如何解決問 題,如CAP定理,以及證明為何時鐘同步是不可能的,而這兩大問題,以主要理論為居多。而這些問題及其解決方案對于只是試圖拿用它來運送web應用程序的 知識后續自己可以如何編寫的那些人是無趣的。

但隨后有趣的事情發生了。Web應用程序變得足夠大,他們開始需要擴展。供多人訪問該Web應用程序在一個VPS上再也呆不住,或者只是進行垂直 擴展。當我們開始擴展,我們開始看到所有這些BUG在我們的應用中,存在有趣名字的漏洞,如“race conditions”、“network partitions”、“deadlock“和“Byzantine failures”。這些都是分布式系統兄弟們一直在努力一段時間去解決的問題,這些問題的解決方案不僅是困難,但在許多情況下,從理論上來說是不可能被 解決的。

早年這種可擴展性的危機,隨著Heroku的出現。況且Heroku讓橫向擴展基礎設施變得容易了,使我們能夠再次假裝我們真的只是進行簡單的Web應用程序。我們收買了自己內心,作為一個行業,也許是5年假裝和自欺欺人。

我們現在打破自欺欺人的限制,就如我們從這個困局出來吧,我們發現自己試圖在早期建立可擴展性,并重新這些破事做設計,使他們能夠擴展,并了解整 體架構的缺點正如為什么用一個單一的數據庫是沒有辦法不停為我們工作。我們拿出像永恒建筑的短語,“寵物VS牛”,微服務,以及一整套的最佳和最差的實踐 方案使得這些事顯得更容易。

在這一點上,這個轉變過程中,Docker的到來,試圖解決很多問題。但是,而不是告訴我們,我們可以假裝擴展的問題不存在,我們可以以基本同樣 的方式繼續做事情,像Heroku的那樣,Docker告訴我們,分布式系統基本上是我們一直在做,一直以來,我們需要接受它,并一開始就在這個模型內進 行編碼。代替處理像web框架,數據庫和操作系統簡單的事情,我們現在看到類似Swarm、Weave、 Kubernetes 、etcd這類工具,這些工具不會假裝一切都會變得簡單,而實際上要求我們加緊我們研究,不單單是解決問題,而是要深刻理解,那些我們正在解決的問題。

有利的一面是,我們獲得了建立可擴展架構的能力使得我們不會假裝我們可以想象它并不存在。現在,我們需要知道什么是network partition,如何處理它,如何在一個AP和一個CP系統作出選擇,以及如何構建架構:在實際惡劣的網絡和機器下進行擴展。有時有雷電天氣在弗吉尼 亞州,有時候遇到了著火,有時鯊魚咬傷海底電纜,有時還有延遲,遞送失敗的情況,機器掛了和內存泄漏。

一切都需要更加有彈性,更加可靠,而且我們需要承認,這些都是我們需要考慮的是開發應用程序的一部分。而我們需要做的,不是因為它的絢麗,或者因 為它的一些神話般的最佳實踐,而是因為像Amazon、Netflix、Google 已經把15年的汗水和鮮血和行業經驗融入工作的人們把這些問題克服了,告訴我們如何在真正地大規模構建系統。

解決了實際問題

那么究竟是Docker為我們解決什么呢?我們正在做構建Web應用程序的一切是非常脆弱的,Docker是迫使這些變得合理化:

  • 迄今為止,我們單獨地部署應用程序(dev的一部分)在服務器(DevOps中ops那部分)上。而且,我們甚至有兩個不同的團隊管理這些應 用程序棧。這樣做是可笑的,因為應用程序依賴于機器和操作系統就如代碼一樣,并把它們分開考慮是沒有意義的。集裝箱會統一操作系統和應用程序在開發工具包 中。
  • 迄今為止,我們已經運行我們的面向服務架構在AWS 、Heroku、其他IaaSes和PaaSes
    ,它們缺乏任何合理的工具去遷移和管理面向服務架構。 Kubernetes和Swarm可以管理和協調這些服務。
  • 迄今為止,我們已經使用了整個操作系統部署我們的應用程序,它們帶來所有保障,而不是我們可以部署在最小化上。容器允許你暴露一個很小的僅需要端口的應用,甚至可以小到一個簡單的靜態二進制。
  • 迄今為止,我們一直在擺弄機器,已確保它們是否是活著的,使用“配置管理”工具或者重新部署多次應用程序在同一臺機器。由于容器可伸縮了業務流程框架,只有不變的鏡像被啟動且運行的機器都不會被重用,這樣消除潛在的故障點。
  • 迄今為止,隨著像Rails的面向服務架構的路由規則的出現,我們使用的語言和框架,它們很大程度上被設計成單機單應用運行了。現在Kubernetes和Compose允許你指定跨服務的拓撲結構。
  • 迄今為止,我們已經AWS給定的服務器配置搭配中部署重度依賴虛擬化服務。“我想要的是0.1個CPU和200MB的RAM服務器”,這個是不可能的。我們已經浪費了遠比使用我們應用實際需要的虛擬化開銷。容器可以按更小的配置進行部署,并做到更好的共享。
  • 迄今為止,我們已經部署使用多用戶操作系統的應用程序和服務。UNIX建有幾十個同時在其上運行的用戶,共享的二進制文件、數據庫、文件系統 和服務。這是一個完全不匹配當我們構建Web服務我們所做的。此外,容器可以容納只是簡單的二進制文件,而不是整個操作系統,這將導致除了關于你的應用程 序或服務你可以少考慮。

唯一不變的就是變化

我們的行業不會等待這些技術的成熟,才如此迅速去神化令人振奮的新技術。Docker正在以驚人的速度發展,同樣這意味著它沒有接近穩定或成熟。 我們在容器運行時間、鏡像格式、流程控制工具、主機操作系統有很多種選擇,每個都有不同程度的用途,范圍,同樣需要扶持和社區的支持。

環顧我們行業發展,存在很多直到技術成為老而乏味還沒有得到穩定。舉一個例子,有多少協議在我們得到了REST之前死去?我們用之前學到的教訓建 立了REST、AJAX、JSON協議是踩在了SOAP和CORBA的尸體上。這兩個主要技術過渡過了大約10年的歷程。然而,我們仍然沒有得到在十年前 有對SOAP等同的基于REST的API工具,并且尤其是還SOAP沒有完全死亡。

同樣的故事發生在前端,而且確實很多兄弟會拿 前端開發正在做的蠢事 與我的 Docker生態系統作對比。自從我們十年前逃離Java,同樣的故事已經發生在各種編程語言中。自始自終,直到問題都完美解決,開發者會不斷拿出新的解決方案。更何況Docker生態系統有成噸的問題需要解決。

容器時代,這確實是我們想要的未來!

因此我們可以預期 Docker目前是不會達到成熟的狀態。當你嘗試的時候,仍然有許多衍生和奇怪的問題需要你去打破,當從幾年后我們回首它們,然而一些決定不止是無法讓人 理解,實際上可能是完全錯誤的。最好的做法還是要嘗試、失敗,重試、再失敗,直到我們可以靈活運用它們。

這將花費數年,我們才能領悟這一切,并讓它平息下來。但是,這并不意味著容器是廢物,或者說我們可以忽略它們。我們總是在過往我們熟知的技術與進行飛躍,并嘗試新的東西,從教訓中學習、調整、迭代,并提高行業實力面臨抉擇。

如果你正在找我,我會在未來等著你。

原文鏈接: it-really-is-the-future (翻譯:周峰 )

===============================================

譯者介紹

周峰,在魔都互聯網公司(餓了么)摸爬,架構工具組一員,致力于提供更好的工具支撐業務發展。同時喜歡參加各類活動,為容器技術的發展貢獻微弱的力量。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!