微服務(wù),容器和云原生架構(gòu)的中間件世界的現(xiàn)狀
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評(píng)論(0)
IT世界的技術(shù)更新非常迅速。一年前我曾寫過一篇關(guān)于:微服務(wù)是否是企業(yè)服務(wù)總線和其他中間件的死亡魔法。本文章是之前文章的后續(xù)以及關(guān)于微服務(wù)、容器和原生云架構(gòu)的中間件關(guān)系討論的更新。各種規(guī)模的企業(yè)正在以令人不可思議的速度快速向這些技術(shù)靠攏!
在2016年6月的今天,許多企業(yè)已經(jīng)采用容器和原生云架構(gòu)或正在采用它們。 這個(gè)話題也越來越和中間件供應(yīng)商相關(guān)。 因此,我們需要做一個(gè)有關(guān)微服務(wù),容器和云原生架構(gòu)的中間件世界的現(xiàn)狀的更新。
本文的關(guān)鍵要點(diǎn):
原生云架構(gòu)可以支持靈活和敏捷的開發(fā),部署,以及運(yùn)維各種軟件現(xiàn)代中間件技術(shù)可以利用容器,微服務(wù),以及原生云架構(gòu)僅僅利用容器來包裝和隔離是遠(yuǎn)遠(yuǎn)不夠的,還有很多其他概念值得理解和利用
微服務(wù)和Docker的發(fā)展勢頭
微服務(wù)和容器的主要目標(biāo)是縮短軟件開發(fā)時(shí)間,以及實(shí)現(xiàn)開發(fā)、部署以及運(yùn)維的更大靈活性。為什么它過去幾個(gè)月的發(fā)展勢頭這么猛?因?yàn)閹缀跛?a target='_blank' class='arckwlink_none'>科技巨頭企業(yè)如亞馬遜,谷歌,F(xiàn)acebook,Netflix都在這里激烈競爭。
微服務(wù)就像是一個(gè)面向服務(wù)的架構(gòu)(SOA):這是一種架構(gòu)和供應(yīng)商技術(shù)分別獨(dú)立的設(shè)計(jì)理念。因此,目前并沒有明確的界定標(biāo)準(zhǔn)或規(guī)范。你永遠(yuǎn)需要在和其他人討論之前定義你所理解的微服務(wù)術(shù)語。每個(gè)人都有不同的定義。在這篇文章中微服務(wù)是被開發(fā),部署和獨(dú)立縮放的服務(wù)。它們可以不針對任何技術(shù)來提供業(yè)務(wù)或整合邏輯。有些供應(yīng)商提供建立微服務(wù)的特殊支持(我們將在后面的文章中看到的),但基本上不涉及任何特定的技術(shù)支持。
關(guān)于微服務(wù)架構(gòu)的討論最早是一篇由Martin Fowler在2014寫的著名文章開始的,該文章的廣泛應(yīng)用起始于NetFlix的一系列豐富的開源微服務(wù)應(yīng)用框架。稍后我們會(huì)回來介紹更多細(xì)節(jié),本文章的很多內(nèi)容都是受到了Netflix杰出和詳細(xì)的技術(shù)博客帖子的啟發(fā)。
容器依賴其上運(yùn)行的操作系統(tǒng)。容器的實(shí)現(xiàn)是基于Linux內(nèi)核的資源隔離功能,如內(nèi)核
namespaces(隔離的應(yīng)用程序運(yùn)行環(huán)境,包括進(jìn)程樹,網(wǎng)絡(luò),用戶ID,以及安裝的文件系統(tǒng)),以及cgroup(提供資源限制,包括CPU,內(nèi)存, I / O和網(wǎng)絡(luò)),和一個(gè)有聯(lián)合能力的文件系統(tǒng)如AUFS和其他。這允許獨(dú)立容器在單個(gè)Linux實(shí)例中運(yùn)行,避免了初始化以及維持虛擬機(jī)的開銷。
相比于虛擬機(jī),容器的主要特點(diǎn)是標(biāo)準(zhǔn)化包裝,可移植性,基于按需創(chuàng)建的目的從而達(dá)到較低的啟動(dòng)和占用時(shí)間,可重復(fù)性,更好的資源利用率,更好地融入發(fā)展中的生態(tài)系統(tǒng)整體(如持續(xù)集成/持續(xù)交付)。容器化的應(yīng)用程序可以在任何環(huán)境隨意創(chuàng)建和運(yùn)行,無論是你的筆記本電腦,測試系統(tǒng)上,預(yù)生產(chǎn)和生產(chǎn)系統(tǒng)。而這一切完全不需要改變?nèi)萜饕约叭萜鲀?nèi)的應(yīng)用程序的任何內(nèi)容。
在微服務(wù)對立面,也有幾個(gè)容器軟件的特殊實(shí)現(xiàn)方式。但是大多數(shù)的發(fā)展勢頭都已經(jīng)被Docker拋在了后面。Docker的生態(tài)系統(tǒng)在日益增長。這必將在未來幾年更加鞏固,同時(shí)它也將變得比今天更加成熟。其他關(guān)于Docker技術(shù)的例子還有如, CoreOS’ rkt (Rocket) 及 Cloud Foundry’s Garden / Warden。請注意,所有這些容器的概念并不是什么新鮮事,早在UNIX系統(tǒng)中就已經(jīng)存在多年,比如Solaris Zones。
還有一些其他的商業(yè)案例如VMware Photon Platform / vSphere Integrated Containers 或者M(jìn)icrosoft’s Windows Server containers / Hyper-V containers or VMware Thinapp。
這里我們有一個(gè)非常好的關(guān)于Docker以及容器的概括介紹:Docker, the Future of DevOps,另外”The Open Container Initiative (OCI)”則是在2015年中期建立的一個(gè)全球性的,廠商無關(guān)的標(biāo)準(zhǔn)。許多軟件供應(yīng)商都是該委員會(huì)成員,包括Amazon, Intel, Docker, Facebook, IBM, Microsoft, Oracle, Pivotal, 和 VMware,以上只是眾多官方支持者的一部分。
一個(gè)原生云架構(gòu)
微服務(wù)和容器其獨(dú)立的服務(wù)以及靈活的部署僅僅是基礎(chǔ)需求。下面的章節(jié)會(huì)討論更多針對原生云架構(gòu)的附加需求。請注意,每節(jié)中我們都列出了很多可用的框架例子,這不代表它們是完整的列表。
原生云架構(gòu)實(shí)現(xiàn)了:
服務(wù)可擴(kuò)展性服務(wù)彈性高可用性自動(dòng)負(fù)載均衡和故障切換DevOps公有云、私有云及混合云通用廠商無關(guān)的部署快速升級(jí)更高的利用率并降低基礎(chǔ)設(shè)施成本更高的效率和靈活性
有了這一切,你可以專注于創(chuàng)新和解決您的業(yè)務(wù)問題,而不是在“靜態(tài)和僵化的傳統(tǒng)架構(gòu)”的大量技術(shù)問題中浪費(fèi)時(shí)間。要知道,原生云意味著你可以不僅僅在公共云中部署軟件。私有云或混合云的部署也包含在云原生的定義中!
持續(xù)集成和持續(xù)交付
持續(xù)集成(CI) 和持續(xù)交付(CD) 需要很多不同的東西自動(dòng)構(gòu)建,部署和運(yùn)行微服務(wù)。 這包括用于自動(dòng)測試和部署,內(nèi)部和外部的服務(wù)發(fā)現(xiàn)以及微服務(wù)和容器的分布式配置腳本。
自動(dòng)化測試和部署腳本
持續(xù)集成CI 和持續(xù)交付CD始于數(shù)年前。你的包的構(gòu)建,測試和部署服務(wù)全部自動(dòng)化完成。這提高了生產(chǎn)率,生產(chǎn)效率和產(chǎn)品質(zhì)量。下面是被用于CI / CD創(chuàng)建腳本的主要框架和工具:
自動(dòng)構(gòu)建管理: Apache Ant, Apache Maven, Gradle, …持續(xù)集成: Jenkins, Bamboo, …持續(xù)交付: Chef, Puppet, SaltStack, Ansible, …
服務(wù)發(fā)現(xiàn)
我們使用了大量不同的獨(dú)立服務(wù)以及每個(gè)服務(wù)都有數(shù)量龐大分布式實(shí)例在工作。內(nèi)部服務(wù)發(fā)現(xiàn)框架用來實(shí)現(xiàn)定位服務(wù)實(shí)現(xiàn)負(fù)載均衡和故障切換目的。因此,我們需要每個(gè)服務(wù)提供者在可用時(shí)向服務(wù)發(fā)現(xiàn)者登記注冊。從而使消費(fèi)者能夠基于注冊發(fā)現(xiàn)服務(wù)并連接使用它。
關(guān)于如何使用服務(wù)注冊中心有很多可選項(xiàng),例如Netflix’ Eureka, Apache Zookeeper,Consul, Etcd。許多稍后討論的框架還包括隱式服務(wù)注冊。在本文中分類各種不同的框架并不是件簡單的事情,很多時(shí)候各種特性是相互重疊的。
除了內(nèi)部服務(wù)發(fā)現(xiàn)外,外部服務(wù)發(fā)現(xiàn)框架用于暴露內(nèi)部微服務(wù)接口給外界(其可以是公共互聯(lián)網(wǎng),合作伙伴或其他內(nèi)部部門)。這通常被稱為“Open API initiative”或“API Management”,并作為打包和API的自配置的入口(例如,在本例中的微服務(wù)),貨幣化和安全執(zhí)法網(wǎng)關(guān)(如認(rèn)證,授權(quán),限流)。為API管理一些相關(guān)的選項(xiàng)有:
JBoss apiman: 開源的,底層的編碼框架,可以利用其它Redhat的JBoss項(xiàng)目Apigee: 專注于API 管理市場的競爭者Akana (former SOA Software): 專注于API 管理市場的競爭者CA’s Layer7: 強(qiáng)大的安全網(wǎng)關(guān),可以利用其他CA產(chǎn)品TIBCO’s Mashery: 強(qiáng)大的門戶網(wǎng)站和社區(qū),可以利用其他TIBCO產(chǎn)品,包括
應(yīng)用TIBCO API Exchange Gateway滿足高級(jí)安全和路由要求
請參閱下面文章的有關(guān)使用案例和“Open API”產(chǎn)品分類詳細(xì)信息:API管理如何改變云計(jì)算,大數(shù)據(jù),物聯(lián)網(wǎng)的游戲規(guī)則。
動(dòng)態(tài)分布式配置管理
在原生云架構(gòu)存在著大量敏捷和動(dòng)態(tài)的變化以適應(yīng)分布式的微服務(wù)和容器,你無法手工管理和配置它們。服務(wù)被設(shè)計(jì)以適應(yīng)失敗,重生并迅速更新。因此,你需要自動(dòng)化的配置管理以設(shè)置分布式節(jié)點(diǎn)上的新容器快速且自動(dòng)配置。一些所需的功能如下:
運(yùn)行期動(dòng)態(tài)自適應(yīng)(例如,改變特定實(shí)例的服務(wù)行為,數(shù)據(jù)庫連接或者是日志層級(jí))基于復(fù)雜的請求或部署上下文改變多維屬性基于請求上下文啟用或者停用特性(例如,顯示特定的用戶界面或者是特定的地區(qū)或者設(shè)備)改變云的設(shè)計(jì)模式行為(詳見后續(xù)章節(jié)中的“彈性設(shè)計(jì)模式”)
動(dòng)態(tài)分布式配置管理的兩個(gè)相關(guān)的框架是Netflix’ Archaius和 Spring Cloud Config. 這些框架使用動(dòng)態(tài)配置的輪詢和回調(diào)機(jī)制(特定IP地址和主機(jī))以適應(yīng)彈性和不斷變化的云的本地環(huán)境,因?yàn)閭鹘y(tǒng)的推送模式無法在其中正常工作。
可擴(kuò)展性和故障切換
一個(gè)原生云架構(gòu)的主要特點(diǎn)就是根據(jù)負(fù)載彈性伸縮和SLA的能力。這需要先進(jìn)的集群管理,以及服務(wù)器端和客戶端彈性的負(fù)載平衡和設(shè)計(jì)模式。
集群管理(計(jì)劃和編制)
靈活的開發(fā)和部署是微服務(wù)和容器的一個(gè)關(guān)鍵優(yōu)勢。包括添加新功能以及舊功能的裁剪。零宕機(jī)和故障切換是必需的,同時(shí)你也需要保證高效的資源利用率。
集群管理器是專為故障切換和高可擴(kuò)展性而設(shè)計(jì)。 它被用于自動(dòng)編排容器調(diào)度和管理主機(jī),包括每個(gè)主機(jī)的規(guī)則和約束應(yīng)用。
很多種集群管理框架已經(jīng)實(shí)現(xiàn),尤其是針對Docker。下面是一些最相關(guān)的實(shí)施案例(更詳細(xì)地討論在這里):
Docker Swarm: 一個(gè)Docker原生框架,使用Docker API,可以很容易地利用其他Docker框架,如Docker Compose,它必須與其他框架如ETCD,Consul或ZooKeeper結(jié)合CoreOS Fleet: 基于systemd直接構(gòu)建的底層框架,經(jīng)常被用于作為高層解決方案的底層基礎(chǔ)架構(gòu)Kubernetes: 來自Google的開源項(xiàng)目并且得到了眾多其他公司的支持包括IBM, Red Hat和Microsoft。Kubernetes是結(jié)合了復(fù)雜的功能和相對簡單的安裝/配置的一個(gè)偉大組合。它不同于其他一些先進(jìn)的集群管理器,你甚至可以通過一個(gè)簡單的“docker run”命令就將它設(shè)置在本地計(jì)算機(jī)上。如果你在云平臺(tái)上安裝它,那么它也可以利用平臺(tái)的特定功能,例如在AWS上它可以使用亞馬遜的ELB,或者它也可以利用Google云平臺(tái)的Google LB。Mesos’ Marathon: 基于強(qiáng)大(且復(fù)雜)的Apache Mesos之上的一個(gè)編排框架,一個(gè)“分布式系統(tǒng)內(nèi)核”。Mesos被用于大規(guī)模多用途的不同框架之上的封裝(如Apache Hadoop, containers via Marathon, batch processing via Chronos)。
負(fù)載均衡(服務(wù)端和客戶端)
原生云上有眾多服務(wù)器隨時(shí)在生生滅滅。由此基于微服務(wù)和容器的負(fù)載均衡需要變得更加錯(cuò)綜復(fù)雜。只是基于公共的IP地址和主機(jī)負(fù)載分布是不夠的了。如基于幾個(gè)因素的加權(quán)負(fù)載均衡概念能夠提供更卓越的彈性,如流量,資源使用情況或錯(cuò)誤的條件。
傳統(tǒng)的服務(wù)器側(cè)負(fù)載平衡多年來用于在多個(gè)服務(wù)器之間分發(fā)網(wǎng)絡(luò)或應(yīng)用流量以增加應(yīng)用程序的容量和可靠性。著名的例子是F5公司的Big-IP產(chǎn)品或亞馬遜的AWS彈性負(fù)載均衡(ELB)服務(wù)。它們用于所謂的邊緣業(yè)務(wù),即外部服務(wù)的消費(fèi)者分別導(dǎo)入為最終用戶的網(wǎng)絡(luò)流量。
此外,許多微服務(wù)架構(gòu)也包括客戶端負(fù)載平衡,以避免不必要的服務(wù)間的通信。因此一些框架,如Netflix Ribbon也嵌入到客戶端LB到每個(gè)微服務(wù)。這降低了通信的跳轉(zhuǎn),而不再需要在內(nèi)部的微服務(wù)之間服務(wù)通信多層跳轉(zhuǎn),我們稱之為所謂中間層或核心服務(wù)。
韌性設(shè)計(jì)模式
所有原生云架構(gòu)的新概念都需要新的設(shè)計(jì)模式來提供一個(gè)可重復(fù)的通用方案來解決經(jīng)常出現(xiàn)的問題。韌性設(shè)計(jì)模式通過實(shí)現(xiàn)高延時(shí)寬容,容錯(cuò)和故障恢復(fù)邏輯可以防止連鎖故障,允許快速失敗和快速恢復(fù)。
其中一個(gè)著名的模式就是Circuit Breaker用來檢測故障并封裝邏輯從而防止故障持續(xù)性重復(fù)發(fā)生 (在維護(hù),臨時(shí)的外部系統(tǒng)故障或系統(tǒng)意外的困難期間)。Akka framework就是對這個(gè)模式的很好的解讀和實(shí)現(xiàn)。Netflix Hystrix也提供了一個(gè)復(fù)雜的實(shí)現(xiàn)用于在分布式系統(tǒng)中達(dá)到延時(shí)和容錯(cuò)的目的?!癆pplication Resiliency Using Netflix Hystrix”就是Ebay Tech發(fā)布的一個(gè)非常好的文章用于解釋他們?nèi)绾卫盟鼇韺?shí)現(xiàn)云模式的。
我們已經(jīng)有大量的云計(jì)算模式出現(xiàn)(未來將會(huì)更多)。例如,Kubernetes的技術(shù)博客所解釋的“Patterns for Composite Containers”,例如“Sidecar容器”,“大使容器”或“適配器容器”。
容器解決方案堆棧
正如你在上面的章節(jié)所看到的,目前已經(jīng)有很多可用的框架和工具鏈,而且它們的數(shù)量還在每月增長。這可能會(huì)提醒許多讀者Apache Hadoop的故事,它不太成熟的框架,及其生態(tài)系統(tǒng)令人難以置信的增長速度。今天的Docker也是如此。因此,一些“解決方案堆棧”正在興起,以幫助用戶入門以及管理使用一個(gè)單一(和有商業(yè)支持的)容器堆棧的所有挑戰(zhàn),就像眾所周知的Hadoop環(huán)境曾經(jīng)遇到的一樣。 容器解決方案堆棧的幾個(gè)例子是Tectonic(Kubernetes + CoreOS平臺(tái)),Docker數(shù)據(jù)中心,Mantl 或者 HashiCorp’s Nomad。 更多方案可能將在未來幾個(gè)月出現(xiàn)。
至此,我們已經(jīng)討論了幾個(gè)概念,框架和模式,以利用容器和微服務(wù)實(shí)現(xiàn)云計(jì)算的本地架構(gòu)。但是,你也需要某種云平臺(tái)用以部署和運(yùn)行這一切。
私有,公共和混合云平臺(tái)
一個(gè)云平臺(tái)可以是私有云,公共云或者混合云,它提供了一種自助服務(wù)和靈活的云計(jì)算基礎(chǔ)設(shè)施(基礎(chǔ)設(shè)施作為一種服務(wù),即IaaS)。在云基礎(chǔ)設(shè)施之上,你需要一個(gè)平臺(tái)(平臺(tái)作為一種服務(wù),即PaaS),由此你可以部署和運(yùn)行你的容器。下圖顯示了兩者的主要特點(diǎn):
大多數(shù)企業(yè)選擇成熟可用的云產(chǎn)品,如Amazon Web Services,Microsoft Azure或開源OpenStack的IaaS和PaaS的平臺(tái),如Red Hat’s OpenShift(這是基于Docker和Kubernetes的)或Cloud Foundry(提供開源并且由幾個(gè)供應(yīng)商提供的增強(qiáng)版本如IBM with Bluemix 或 Pivotal)。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
下載地址
微服務(wù),容器和云原生架構(gòu)的中間件世界的現(xiàn)狀下載
相關(guān)電子資料下載
- 如何在Windows系統(tǒng)上設(shè)置Docker鏡像源 55
- 機(jī)器學(xué)習(xí)需要掌握的九種工具盤點(diǎn) 16
- Spring Cloud :打造可擴(kuò)展的微服務(wù)網(wǎng)關(guān) 60
- Docker鏡像國內(nèi)加速的幾種方法 55
- SpringCloud微服務(wù)架構(gòu):實(shí)現(xiàn)分布式系統(tǒng)的無縫協(xié)作 62
- VectorCAST|Docker場景下的代碼白盒測試實(shí)施 402
- 類隔離的使用場景 106
- 如何用Springboot整合Redis 118
- 如何在macOS系統(tǒng)中用Docker運(yùn)行macOS鏡像呢? 364
- 什么是Docker容器?為什么需要Docker容器? 71