Mesos、Kubernetes和Swarm比較指南
正如Marc Andreesen所說,“Software is eating the world”,所以現在所有公司,無論他們的時間長短火大小規模正在轉型為軟體公司。
隨著這些公司軟體組織的成熟,他們將需要改變對軟體架構的思考方式,包括團隊和軟體的平臺的思考方式。
70年代,整個應用程式執行在塵土飛揚的資料中心的一個“大型機”上非常良好,但現在企業是執行在雲端的高可用性軟體,同時他們的敏捷團隊傾向於快速交付。
在過去,軟體團隊在那些大型機器中執行了數百萬行程式碼的龐大應用程式,但是現在越來越多的公司採用“分而治之的策略”,而不是一個“Monolith單片整體”,你的應用程式被分為十個甚至數百個較小的應用程式。 我們稱這些小應用程式為微服務。
執行許多微服務可能很複雜,因此管理它們需要一個協調器(有時也稱為排程程式),用於跨資料中心釋出分散式服務。 排程器有很多選擇。
這篇部落格文章將討論排程器是什麼,以及如何選擇最適合您團隊需求的排程器。
微服務是真棒
有很多文章已經對什麼是微服務和為什麼要採用它們進行了長期論述。因此,我們這裡不再解釋為什麼它們很棒,我們只強調一些最好的特點:
1.微服務具有較小的程式碼庫,構建起來更快,並且更容易測試和維護
2.微服務允許在整個組織中標準化工具
3.微服務透過將程式碼的關鍵任務部分與較低優先順序的其他任務分開來以降低風險
所以,你決定你想“做微服務”
假設您已經使用微服務進行了beta測試,您的團隊已在您的資料中心部署了第一個或第二個微服務。 慢慢地,你意識到這些部署不會像你想要的那麼快...
什麼減慢了微服務部署
傳統的配置週期可能需要長達6周。
a. 不得不處理依賴和基本映像image
如果你想執行一個服務,你需要一臺機器來執行它。對於這臺機器不僅需要訪問它必須執行的程式碼,還需要訪問整個環境。 這臺機器需要一個Java / Ruby / PHP環境,包括所有的packages / gems / modules等程式碼依賴的任何靜態庫。
雖然像工具封隔器簡化了建立基礎image,但是維護多個不同的image可能會非常耗時。
b. 不斷更新您的基礎設施
每當您更改有關您的環境(證照,憑據或依賴關係)時,您需要將這些更改傳播到整個基礎架構。
像工具T Terraform, Chef 和 Puppet 簡化了您的基礎架構更新,可以在你的雲供應商建立依賴關係(AWS,Azure,谷歌雲引擎等)
C. 擁有和維護多個可用區是不容易的
為了保證您的應用程式正常執行,重要的是有冗餘服務。擁有多個可用區域現在是任何大型軟體公司的基本要求。 但是,即使將基礎架構作為程式碼的這種方式也是很不容易的,需要保持所有區域的同步,這對於即使是最好的開發和運營團隊來說也是艱鉅的苦差事。
容器救援
微服務可以以多種方式執行,或者直接執行在現有應用程式的機器上(會導致單點故障和維護噩夢),在單獨的機器上(更昂貴),或者執行在編排器上的容器中,後者提供了應用程式的標準部署策略。
容器是一種低階虛擬化方法,它不是建立整個全部的虛擬機器,只是建立一個僅包含應用程式程式碼+環境的映像。 這允許單個機器執行多個容器,而不必處理應用程式環境或依賴關係。兩種最流行的是LXC和RKT。
在容器中執行應用程式提供了最靈活的方法,包括最佳化特定應用的使用,同時允許根據需要進行擴充套件服務。
使用排程器來管理容器而不是機器
排程器是您的應用程式居住的ship。排程器有不同的顏色和尺寸,包括從高貴的Kubernetes Nomad groups到Docker swarm。
最流行的排程程式是:
1.Mesos(Mesosphere)
2.Kubernetes(Google)
3.Nomad(Hashicorp)
4.Docker Swarm(Docker)
5.Cloud Foundry(Pivotal,HP,IBM,其他)
6.OpenShift(Redhat)
他們有什麼不同?
雖然大多數排程程式執行Docker(或rkt)容器,但它們在兩個主要方面策略和功能上有所不同。
策略:
1. Monolithic單片整體:Hadoop YARN,Docker swarm
單片戰略有一個單點協調,知道整個系統的整個狀態,並做聰明的分配。 它們通常是漂亮的靜態系統,例如YARN,它允許在同一個硬體上執行像Hadoop和Spark這樣的東西 -所以沒有太多的可移動部件
2.雙層(悲觀併發):Mesos
兩層排程程式比較自由:一箇中央授權機構為執行在其上的每個框架提供資源,這些框架接受他們認為合適的資源。 因此,如果我們使用Mesos作為排程器,那麼作為一個消費者,我們實際上會談到像Marathon這樣的一個框架,例如啟動長時間執行的程式。
2.共享狀態(樂觀併發):Nomad,Kubernetes。
有共享的狀態排程器,這些傢伙啟動容器最快。Nomad有一個基準測試,他們在5分鐘內在5k個節點上啟動1mm容器。 相當了不起。
對於大多數應用程式,策略並不重要,因此我們大部分將專注於功能。
功能 :
[img index=1]
上圖說明如下:
1.企業支援
除了Google之外,所有提供商都可以使用企業支援。Kubernetes支援僅適用於其GCE雲產品,但有一些第三方提供商提供支援。
2.多資料中心/可用區支援
並非所有排程程式都支援多可用區。
3.Bare Metal裸機
大多數排程器除了Cloud Foundry以外可以安裝在資料中心內的“裸機”或物理機器上。 這可以節省你對管理程式許可費用。
4.Volume卷安裝
卷安裝允許跨容器部署實現持久儲存資料。 這是一個關鍵的區別,取決於您的應用程式的需求。 Mesos是這裡的領導者,Kubernetes正在慢慢趕上。
5.安全管理
安全管理是一個很大的配置編排,它不會在你開始使用排程程式時消失。Docker和Mesos在這裡沒有內建的解決方案。
如何選擇?
這是棘手的地方,所有的解決方案執行容器並擴充套件得很好,你最好需要選擇一個適合你的工程團隊。
1.功能方面
功能差異可能看起來很小,但是它們最終會非常顯著,具體取決於您的應用程式需求。 例如卷的持久和私人私有dock註冊支援通常是一些平臺的限制。
2.合規性需求
您有嚴格的稽核能力或合規性需求嗎? 只有Cloud Foundry提供任何型別的使用者/許可權模型,它可能是太基本的您的要求。
3.動態支援
隨著排程器越來越受歡迎,更多的選項每天都會出現
4.成熟度
下面是建立日期:
Cloud Foundry - 2011
Mesosphere - 2013
Kubernetes - 2014
Nomad - 2015
A Handy Guide to the Mesos-Kubernetes-Swarm Jungle
[該貼被banq於2016-11-24 10:26修改過]
相關文章
- 對比剖析Swarm Kubernetes Marathon編排引擎Swarm
- Go中泛型和反射比較指南Go泛型反射
- Jenkins vs Kubernetes:比較 DevOps 工具Jenkinsdev
- js 深比較和淺比較JS
- Oracle date 型別比較和String比較Oracle型別
- Twitter 宣佈拋棄 Mesos,全面轉向 Kubernetes
- Twitter 宣佈拋棄 Mesos,全面轉向Kubernetes
- Spark on Yarn 和Spark on MesosSparkYarn
- not in 和 not exists 比較和用法
- Apache Hadoop Yarn與Kubernetes比較選擇 - codehunterApacheHadoopYarn
- etcd和redis比較Redis
- TCP和UDP比較TCPUDP
- Redis 和 Memcached 比較Redis
- Java和JavaSciprt比較Java
- Go和Python比較的話,哪個比較好?GoPython
- 比較器-Comparable和Comparator
- ImageMagic 和 GraphicsMagick 的比較
- ArrayList和LinkedList的比較
- PyTorch和TensorFlow比較 - thegradientPyTorch
- ==和equals方法的比較
- kubernetes ingress 在物理機上的nodePort和hostNetwork兩種部署方式解析及比較
- Go 與 C++ 的對比和比較GoC++
- Transformer和MoE架構比較ORM架構
- Java 中 Comparable 和 Comparator 比較Java
- TreeMap和HashMap的元素比較HashMap
- 比較Windows和Linux SQL容器WindowsLinuxSQL
- Kubernetes決勝Swarm的優勢在這裡?Swarm
- powershell中的where和foreach比較
- 檔案和影像比較工具Kaleidoscope
- 360°全方位比較PostgreSQL和MySQLMySql
- 堆排序和快速排序效能比較排序
- 字符集和比較規則
- tbase和postgres-xl的比較
- EXCEL,POI,EASYEXCEL的使用和比較Excel
- 定製排序和比較器排序排序
- Airflow替代方案:Prefect和Dagster比較AI
- 類和類之間的比較
- mongodb和hbase的簡單比較MongoDB
- jQuery的prop和attr方法比較jQuery