日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Docker的“谎言”

發(fā)布時間:2025/7/25 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker的“谎言” 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者簡介:張鑫,杭州才云科技聯(lián)合創(chuàng)始人 CEO
本文節(jié)選自《程序員》,謝絕轉(zhuǎn)載,更多精彩,請訂閱《程序員》
責(zé)編:魏偉,歡迎投稿和咨詢報道,詳情聯(lián)系weiwei@csdn.net

我與容器的緣分起源于我在Google內(nèi)部研發(fā)容器集群管理系: Cluster Management。谷歌內(nèi)部一切皆容器,搜索、視頻、大數(shù)據(jù)、內(nèi)部工具等核心業(yè)務(wù)都以容器的方式運行在容器編排系統(tǒng)Borg上。2014年,隨著公司內(nèi)部的”Ursquake” (注:Urs是負(fù)責(zé)基礎(chǔ)設(shè)施的高級副總裁),我轉(zhuǎn)投到了公有云Google Cloud Platform的建設(shè)當(dāng)中。2014年3月份,在由各部門基礎(chǔ)設(shè)計技術(shù)帶頭人參加的谷歌內(nèi)部的云峰會中,我做為早起參與者之一加入到了Kubernetes的項目中。

從2015年回國創(chuàng)業(yè)至今,我親身感受到了國內(nèi)對于Docker的追捧熱度。如今,Docker已經(jīng)迅速在國內(nèi)形成了“要是不知道Docker都不好意思和人打招呼”的火熱勢態(tài);在互聯(lián)網(wǎng)巨頭和獨角獸企業(yè)中,甚有從“誰在用Docker”轉(zhuǎn)變?yōu)椤罢l沒用Docker”之勢。

Caicloud基于Kubernetes開源技術(shù),力爭為企業(yè)提供Gifee(Google’s Infrastructure for Everyone Else)的體驗。目前已經(jīng)成功落地于多家國內(nèi)大型企業(yè),其中不乏傳統(tǒng)國有企業(yè)。在不少案例中,我們都發(fā)現(xiàn)一個明顯的趨勢:很多企業(yè)一開始受到Docker現(xiàn)象的鼓吹,認(rèn)為Docker是萬靈藥,然而在自己嘗試進(jìn)行開發(fā)、生產(chǎn)使用時才發(fā)現(xiàn)Docker帶來的不僅僅是“坑”,更多的是局限和對已有流程的顛覆。這里我想從我在谷歌內(nèi)部使用容器,并基于容器研發(fā)大規(guī)模生產(chǎn)平臺的經(jīng)驗中談?wù)劕F(xiàn)有Docker和谷歌容器環(huán)境的差別,并通過Caicloud的實際案例落地經(jīng)驗總結(jié)下Docker自身所帶來的一些“謊言”和誤區(qū)。希望能拋磚引玉,并在產(chǎn)品上填補(bǔ)空白,實現(xiàn)Gifee。

Docker的謊言

這里用“謊言”略有夸大其詞之嫌,Docker也確實為軟件開發(fā)帶來了巨大的好處。而我想表達(dá)的是人們對于Docker的一些常見預(yù)期在現(xiàn)實使用中并非像理論中那般完美。

Docker達(dá)到了環(huán)境一致性

幾乎所有的Docker介紹或教程中提到的前幾個Docker帶來的好處之一,必有“環(huán)境一致性”。然而這句話表述的并不準(zhǔn)確,“環(huán)境”是一個模糊和相對的概念。Docker實現(xiàn)的是鏡像內(nèi)部的小環(huán)境一致性,它保證了一個應(yīng)用程序在一臺機(jī)器上使用Jetty 9, 在另一臺機(jī)器上也使用Jetty 9(通過封裝軟件中間件如Jetty 9)。然而大中型企業(yè)用戶很快意識到,真正的難點在于如何保證“大環(huán)境”一致,既整個業(yè)務(wù)系統(tǒng)中眾多容器、組件、服務(wù)之間如何配置、互聯(lián)、依賴,如何保證開發(fā)、測試、生產(chǎn)環(huán)境能相互轉(zhuǎn)化、克隆等。這些環(huán)境、配置在容器概念之上,是容器自身無法解決的,只能依賴集群層面的管理工具。

Docker幫助了微服務(wù)

微服務(wù)與Docker是兩個完全獨立的維度,微服務(wù)所帶來的好處完全不依賴于你是否使用Docker,同時微服務(wù)所帶來的問題Docker也無法解決。例如,如今大家都流行將原來的巨石型應(yīng)用進(jìn)行微服務(wù)細(xì)粒度切分,而第一個難點就是切分的粒度。雖然不乏最佳實踐和Rule of Thumb, 但總的邏輯是切分的粒度越細(xì),軟件開發(fā)靈敏度越高。然而帶來的問題是管理成本的增加:更多的模塊如何進(jìn)行各自的配置,更多的API通信、互聯(lián)如何管理,更多的二進(jìn)制(容器)如何發(fā)布。這些問題都是Docker自身不能解決的,也必須通過第三方工具來進(jìn)行彌補(bǔ)(例如Kubernetes的Pod機(jī)制就是谷歌基于內(nèi)部的經(jīng)驗教訓(xùn)設(shè)計的一個解決方案)。

Docker實現(xiàn)了以應(yīng)用為中心

Docker的大火也讓”App Centric”, “Cloud Native”煥發(fā)了青春,Docker確實在為實現(xiàn)這兩者的道路上提供了便利,但Docker本身還遠(yuǎn)遠(yuǎn)不能和這兩個詞劃等號。Docker對應(yīng)用雖然進(jìn)行了封裝,但是應(yīng)用的開發(fā)者在實踐中還遠(yuǎn)無法做到只要關(guān)心到Docker這一層即可。首先我們還是要關(guān)注操作系統(tǒng),是否有合適的內(nèi)核,是否有合適的API支持。其實我們甚至要關(guān)心硬件,是否是x86架構(gòu)還是power pc架構(gòu)。此外,我們還需要關(guān)心引擎,是Docker還是Rocket還是runC。最后,開發(fā)、運維者還要關(guān)心平臺,是Kubernetes還是Mesos來進(jìn)行生產(chǎn)集群管理,并需要針對具體的底層平臺做完全針對該平臺的部署、配置(甚至需要修改應(yīng)用、框架等)。而這些都不是應(yīng)用、業(yè)務(wù)所應(yīng)該關(guān)心的范疇。

Docker實現(xiàn)了Devops

Docker有很多開發(fā)、發(fā)布敏捷性方面的亮點,然而不少企業(yè)用戶認(rèn)為Docker自身就邁向了Devops,而殘酷的現(xiàn)實是他們往往在真正開始使用后很快發(fā)現(xiàn)Docker帶來了額外的負(fù)擔(dān),例如基于Docker的發(fā)布流程應(yīng)該是怎么樣,應(yīng)用程序打包的最佳實踐應(yīng)如何(如何避免打出一個上G的包),Docker的鏡像倉庫該如何管理(如何有效利用存儲空間、識別Dockerhub里的惡意鏡像)。總之,Docker畢竟給系統(tǒng)中引入了新的一層?xùn)|西,業(yè)務(wù)出了問題,到底是應(yīng)用的問題還是Docker的問題?最后(among many others),Docker自身主要是進(jìn)程級別的,而對于復(fù)合型、集群化的場景(翻譯:任何一個認(rèn)真的生產(chǎn)場景)則需要第三方的工具和系統(tǒng)來補(bǔ)足。在機(jī)器層面,如何做到跨主機(jī)的通信、數(shù)據(jù)的遷移、跨主機(jī)的任務(wù)調(diào)度;在應(yīng)用層面,如何做到用多個Docker鏡像/容器構(gòu)造成一個復(fù)合性應(yīng)用(Codis就是一個很好的例子)。當(dāng)然,Docker的安全性也是經(jīng)久不衰、流行的議題。

集群工具和Kubernetes的迅猛生產(chǎn)落地

還是要說明上述的論點旨在讓企業(yè)用戶認(rèn)識到Docker自身不是萬靈藥,但是我們也不可否認(rèn)Docker對于軟件開發(fā)、發(fā)布和計算上所帶來的變革性優(yōu)勢。如何基于Docker自身的優(yōu)勢更上一層樓,我認(rèn)為需要順應(yīng)“社會專業(yè)化分工”,讓專業(yè)的人做專業(yè)的事,通過第三方工具一起打造一個完善的生態(tài)系統(tǒng)。

谷歌在十年間打造了三個集群管理系統(tǒng):Borg、Omega、Kubernetes,原因就是基于它領(lǐng)先于外界多年的容器使用經(jīng)驗,它清楚地意識到容器自身的局限性(只是應(yīng)用運行的一個“載體”,和其他的載體諸入虛擬機(jī)、物理機(jī)在這個角度上甚至沒有本質(zhì)區(qū)別)。在雖有Mesos這一開源項目的情況下,谷歌還是在2014年決定大力推廣Kubernetes項目(內(nèi)部代號為 “Project 7”),是出于幾點深思熟慮。這些出發(fā)點也在國外眾多知名企業(yè)(如eBay等互聯(lián)網(wǎng)巨頭,或高盛、 Bloomberg等金融巨頭)和Caicloud在國內(nèi)一些大型甚至傳統(tǒng)國有企業(yè)的成功落地中得到了驗證):

  • 谷歌有著更多年的大規(guī)模生產(chǎn)級別容器管理經(jīng)驗,這里說的“大規(guī)模”是百個數(shù)據(jù)中心、百萬臺機(jī)器、億萬個容器,且這個“經(jīng)驗”既有成功也有教訓(xùn)。例如通過設(shè)計Borg我們清楚地意識到配置管理的重要性,聲明性管理的重要性,為每個服務(wù)分配獨立IP地址來避免端口沖突的重要性等。通過Omega也意識到了可插拔調(diào)度器的重要性,模塊化系統(tǒng)的重要性,以及對于任務(wù)的完成時間的不可控性等。因此Kubernetes希望能夠?qū)⒐雀鑳?nèi)部多年容器管理的理念、經(jīng)驗、教訓(xùn)以開源項目的形式傳遞給大家,而這個經(jīng)驗是獨一無二的。
  • 另外與Mesos的關(guān)注點不同(資源分配),Kubernetes是完全原生態(tài)面向服務(wù)和集群化容器應(yīng)用的(Mesos面向的是“框架”),它旨在提供更多便捷的容器管理工具、機(jī)制和功能。因此除了常見的任務(wù)調(diào)度、服務(wù)發(fā)現(xiàn)、健康檢查和自動修復(fù),它還提供了獨特的功能,諸如容器組管理,秘密數(shù)據(jù)管理,服務(wù)賬戶管理,配置管理,守護(hù)進(jìn)程管理,有狀態(tài)應(yīng)用管理等,都是谷歌在內(nèi)部形形色色應(yīng)用、業(yè)務(wù)類型管理中所提煉出來的重要功能。
  • 打造活躍、健康的開源社區(qū):Kubernetes是當(dāng)前最活躍的開源社區(qū),在github上已有1萬4千多顆星(相比于其他容器集群項目的數(shù)千顆星)。谷歌做開源社區(qū)也有重要意義:雖然在市場端不同的廠商可以通過花樣繁多的市場手法和資金投入包裝自己的產(chǎn)品領(lǐng)先度,開源社區(qū)的健壯程度卻是無法用錢或市場廣告買來的。谷歌通過打造開源社區(qū)可以更客觀地展現(xiàn)自己在基礎(chǔ)設(shè)施、容器、集群管理方面的技術(shù)優(yōu)勢。當(dāng)然或許有誤區(qū)認(rèn)為項目不活躍是因為軟件“成熟”,項目活躍是因為項目不成熟。然而谷歌內(nèi)部的代碼庫每天仍有近萬個新的issues被開啟,絕不是因為谷歌10多年的業(yè)務(wù)系統(tǒng)不成熟,而更多的是創(chuàng)新性的一種表現(xiàn)(大部分issues是在不斷迭代更強(qiáng)大的新功能——在保證穩(wěn)定的基礎(chǔ)上)。由于當(dāng)今互聯(lián)網(wǎng)業(yè)務(wù)千變?nèi)f化,創(chuàng)新層出不窮,任何系統(tǒng)都需要不斷的迭代,如果一個項目因達(dá)到“成熟”而活躍度下降,這只是該項目遭到冷落的表現(xiàn)。
  • 現(xiàn)在的空白和未來的趨勢

    無論是Docker還是開源第三方集群管理工具,如要到達(dá)Gifee都還有很長的路要走。這里我僅僅拋磚引玉列舉一些空白和我們希望和正在努力的方向。

    發(fā)布管理遠(yuǎn)大于CI/CD

    如今談到發(fā)布,大家想到的就是持續(xù)集成(CI)和持續(xù)發(fā)布(CD)。然而我們在谷歌內(nèi)部實踐的發(fā)布管理系統(tǒng)還包括很多其他的方方面面,例如:

  • 如何將鏡像的構(gòu)建與代碼庫的分支構(gòu)建相整合
  • 如何做微服務(wù)架構(gòu)中的聯(lián)合發(fā)布(最重要的是保證新老版本的API能夠平滑兼容)
  • 如何做版本管理(哪個鏡像版本運行在哪個數(shù)據(jù)中心上)
  • 如何做灰度發(fā)布(根據(jù)不同的時間節(jié)點、步調(diào)來有策略的調(diào)整新版本的上線比率,自動比對新舊版本的用戶行為等)
  • Devops遠(yuǎn)大于Docker

    Devops包含方方面面,其中諸多實踐都是Docker自身層面所不能企及的,以谷歌為例:

  • 配置管理:要做到真正的大環(huán)境一致,必須將配置完全與代碼分離,這里的配置遠(yuǎn)不僅僅是服務(wù)之間的IP地址(通過DNS服務(wù)發(fā)現(xiàn)可以解決),還包括不同環(huán)境下對于不同服務(wù)、應(yīng)用的配置參數(shù)等。對于這些狀態(tài)、配置、數(shù)據(jù)、文件的維護(hù)則需要額外的配置管理系統(tǒng)。
  • 分布式測試:測試是Devops中不可或缺的一環(huán),但是在大規(guī)模應(yīng)用系統(tǒng)中,如何有效地、智能地快速自動運行系統(tǒng)測試則需要額外的系統(tǒng);在谷歌內(nèi)部我們構(gòu)建了分布式測試系統(tǒng),能夠基于Borg,有選擇地識別出收到某個commit影響的測試集進(jìn)行高效自動化測試。
  • 智能預(yù)警:Docker或容器只是應(yīng)用運行的載體,而Docker自身失效后需要第三方系統(tǒng)來檢測并預(yù)警。谷歌打造了復(fù)雜、靈活的預(yù)警系統(tǒng),可以支持自定義的預(yù)警規(guī)則和報警行為。
  • 智能故障定位:微服務(wù)架構(gòu)的分布式天性將系統(tǒng)問題調(diào)試變得更加復(fù)雜,一個用戶的請求在系統(tǒng)內(nèi)部要遍歷多個服務(wù)模塊,而在出現(xiàn)問題時如何幫助系統(tǒng)管理員自動定位故障也需要額外的工具和系統(tǒng)來完成。
  • 集群管理遠(yuǎn)大于服務(wù)管理

    最后想澄清的一個名詞是”集群管理“。現(xiàn)在當(dāng)人們談及“集群管理”時,容易直接和Kubernetes,Mesos等劃等號。然而集群管理在谷歌內(nèi)部是一個非常龐大的組織,Borg只能算作任務(wù)管理或應(yīng)用管理,除此之外一個真正的集群管理系統(tǒng)還需要諸如機(jī)器管理、網(wǎng)絡(luò)管理、安全管理等諸多方面:

  • 機(jī)器管理:如何自動配置、安裝機(jī)器,如何自動進(jìn)行機(jī)器層面的問題檢查與修復(fù)
  • 網(wǎng)絡(luò)管理:如何與SDN聯(lián)動
  • 安全管理:如何在容器的基礎(chǔ)上做應(yīng)用、業(yè)務(wù)層面的安全檢測

  • 《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的Docker的“谎言”的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。