您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)Docker和微服務(wù)的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
在2000年初,我們目睹了面向服務(wù)架構(gòu)(Service Oriented Architecture,SOA)的崛起,這是一種非常流行的軟件架構(gòu)設(shè)計(jì)范式。簡而言之,SOA是一種軟件架構(gòu)模式,用于構(gòu)建大型的企業(yè)應(yīng)用程序,這些應(yīng)用程序通常要求集成多種服務(wù),而每種服務(wù)使用不同的平臺(tái)和編程語言來構(gòu)建,并通過通用的通信機(jī)制進(jìn)行交互。
以下是面向服務(wù)架構(gòu)(SOA)的簡單圖示:
??
SOA是大型軟件產(chǎn)品(如企業(yè)應(yīng)用程序)的首選。
SOA側(cè)重于將多個(gè)服務(wù)集成到單個(gè)應(yīng)用程序中,而不是強(qiáng)調(diào)模塊化應(yīng)用程序。
在SOA中,用于服務(wù)間交互的通用通信機(jī)制被稱為企業(yè)服務(wù)總線(Enterprise Service Bus,ESB)。
基于SOA的應(yīng)用程序本質(zhì)是單體。也就是說,單個(gè)應(yīng)用程序?qū)影擞脩艚缑婊虮硎緦?、業(yè)務(wù)邏輯或應(yīng)用程序?qū)?,以及?shù)據(jù)庫層,這些全部都集成到一個(gè)平臺(tái)中。
讓我們以網(wǎng)店為例。我們知道,很多電商網(wǎng)站都可以通過多種設(shè)備訪問,所以這些網(wǎng)站通常都為筆記本電腦和移動(dòng)設(shè)備提供了不同的用戶界面。
我們也知道,多個(gè)操作或服務(wù)彼此依賴,以確保應(yīng)用程序的正常運(yùn)行。其中一些服務(wù)負(fù)責(zé)創(chuàng)建賬號(hào)、顯示產(chǎn)品目錄、建立和驗(yàn)證購物車、生成賬單、確認(rèn)訂單、完成支付等。
在單體應(yīng)用程序中,所有這些服務(wù)都在同一個(gè)應(yīng)用程序?qū)由线\(yùn)行,因此這個(gè)電子商務(wù)網(wǎng)站的軟件架構(gòu)如下所示:
很顯然,隨著服務(wù)數(shù)量的增加,應(yīng)用程序的規(guī)模將不斷增長。這可能會(huì)讓構(gòu)建和維護(hù)應(yīng)用程序代碼庫的開發(fā)人員不堪重負(fù)。
難以更新當(dāng)前的技術(shù)棧,即使是在當(dāng)前技術(shù)棧中修改一點(diǎn)內(nèi)容也會(huì)是一場噩夢(mèng)。
每一項(xiàng)變更都要求開發(fā)人員重建整個(gè)應(yīng)用程序,十分浪費(fèi)資源。
隨著客戶群的增加,我們將有更多的請(qǐng)求需要,這將需要更多的資源。因此,建立可擴(kuò)展的產(chǎn)品時(shí)至關(guān)重要的。對(duì)于單體應(yīng)用程序,我們只能在一個(gè)方向上進(jìn)行伸縮,即垂直伸縮,而不是水平伸縮。這意味著我們可以通過添加更多硬件資源(如內(nèi)存和CPU)在單臺(tái)計(jì)算機(jī)上擴(kuò)展應(yīng)用程序,但橫向擴(kuò)展(跨多臺(tái)計(jì)算機(jī))仍然是一項(xiàng)挑戰(zhàn)。
在此我向大家推薦一個(gè)Java高級(jí)群 :725633148 里面會(huì)分享一些資深架構(gòu)師錄制的視頻錄像:(有Spring,MyBatis,Netty源碼分析,高并發(fā)、高性能、分布式、微服務(wù)架構(gòu)的原理,JVM性能優(yōu)化、分布式架構(gòu))等這些成為架構(gòu)師必備的知識(shí)體系 進(jìn)群馬上免費(fèi)領(lǐng)取,目前受益良多!
微服務(wù)架構(gòu)可以被認(rèn)為是對(duì)SOA的特殊化,也是一種可以克服單體架構(gòu)缺陷的替代模式。
在微服務(wù)架構(gòu)中,我們專注于將應(yīng)用程序模塊化,將其分解成較小的獨(dú)立服務(wù),這些服務(wù)可獨(dú)立于其他服務(wù)或整個(gè)應(yīng)用程序本身而構(gòu)建、部署、伸縮和維護(hù)。這些獨(dú)立服務(wù)被稱為微服務(wù),因此這種架構(gòu)被稱為微服務(wù)架構(gòu)。
?
微服務(wù)架構(gòu)和SOA雖然不一樣,但它們確實(shí)存在一些相似之處。微服務(wù)架構(gòu)被稱為SOA的變體,甚至是SOA的一種特殊化。換句話說,SOA可以被認(rèn)為是微服務(wù)架構(gòu)的超集。
人們之所以能夠在這些架構(gòu)之間找到相似性,主要是因?yàn)樗鼈兌紝W⒂跇?gòu)建具有松散耦合的服務(wù)。這些服務(wù)具有明確的界限,并且每個(gè)服務(wù)都具有獨(dú)立的功能集。
不同之處在于,SOA可能意味著其他很多東西。例如,SOA適用于單體架構(gòu),重點(diǎn)是將系統(tǒng)集成在一個(gè)應(yīng)用程序中,并確保代碼的可復(fù)用性。但對(duì)微服務(wù)架構(gòu)來說并不是這樣的,微服務(wù)架構(gòu)的重點(diǎn)是通過構(gòu)建獨(dú)立服務(wù)和確保產(chǎn)品的可伸縮性來模塊化應(yīng)用程序。
引入關(guān)注點(diǎn)分離的理念,在軟件應(yīng)用程序開發(fā)中實(shí)現(xiàn)敏捷,不管是在簡單的還是復(fù)雜的領(lǐng)域。
微服務(wù)的獨(dú)立能力或獨(dú)立性帶來了以下好處:
可以使用任意的編程語言來構(gòu)建服務(wù),除此之外,還可以為每個(gè)給定服務(wù)維護(hù)單獨(dú)的數(shù)據(jù)模型。
增量更新或升級(jí)一個(gè)或多個(gè)服務(wù)的技術(shù)棧,而不是在一個(gè)時(shí)間點(diǎn)更新整個(gè)應(yīng)用程序,以此降低維護(hù)難度。
允許部署分塊,而不是每次發(fā)生變更都要重新構(gòu)建整個(gè)應(yīng)用程序,以此來降低風(fēng)險(xiǎn)。
將開發(fā)人員分成小團(tuán)隊(duì)來降低復(fù)雜性,每個(gè)小團(tuán)隊(duì)負(fù)責(zé)構(gòu)建和維護(hù)一個(gè)或多個(gè)服務(wù)。
可以構(gòu)建全自動(dòng)的部署機(jī)制,確保個(gè)體服務(wù)的部署、服務(wù)管理和自動(dòng)伸縮。
除了軟件架構(gòu)模式的發(fā)展之外,我們還看到Docker和Kubernetes等新技術(shù)的出現(xiàn),用于支持我們的軟件基礎(chǔ)設(shè)施,實(shí)現(xiàn)對(duì)可伸縮產(chǎn)品和服務(wù)的高效管理。我們已經(jīng)從硬件虛擬化發(fā)展到容器化。
或許你會(huì)想,這意味著什么?
讓我們借助下圖來理解IT基礎(chǔ)設(shè)施領(lǐng)域的發(fā)展:
第一張圖顯示的是一臺(tái)物理機(jī)器或一臺(tái)硬件服務(wù)器。通常,我們?cè)跇?gòu)建應(yīng)用程序時(shí)使用的是宿主操作系統(tǒng)提供的資源,在部署應(yīng)用程序時(shí)也使用了相同的模式。但如果你想擴(kuò)展應(yīng)用程序該怎么辦呢?在某些時(shí)候,你可能需要另一臺(tái)硬件服務(wù)器。而隨著數(shù)量不斷增加,成本和其他資源(如硬件和能源消耗)也會(huì)隨之增加。
此外,你可能會(huì)想,是否有必要在任何時(shí)候都使用所有的硬件資源和操作系統(tǒng)?當(dāng)然不是。既然這樣,那么為什么還需要這么龐大的基礎(chǔ)設(shè)施呢?
這個(gè)問題促成了硬件虛擬化的發(fā)展,于是虛擬機(jī)(VM)出現(xiàn)了,我們通過虛擬機(jī)來優(yōu)化IT基礎(chǔ)設(shè)施。如你在第二張圖中看到的,虛擬機(jī)具有自己的客戶操作系統(tǒng),運(yùn)行在單個(gè)物理機(jī)或宿主操作系統(tǒng)中。我們因此能夠運(yùn)行多個(gè)應(yīng)用程序,而無需安裝大量物理機(jī)。宿主操作系統(tǒng)可以確保在不同虛擬機(jī)之間進(jìn)行系統(tǒng)性的資源分配和負(fù)載均衡。
虛擬機(jī)降低了軟件維護(hù)的難度和成本,不過仍然可以進(jìn)一步優(yōu)化。例如,并非所有的應(yīng)用程序在客戶操作系統(tǒng)環(huán)境中都會(huì)按預(yù)期運(yùn)行。此外,即使是運(yùn)行簡單的進(jìn)程,客戶操作系統(tǒng)也需要大量資源。
這些問題促成了下一個(gè)創(chuàng)新:容器化。與特定于操作系統(tǒng)的虛擬機(jī)不同,容器特定于應(yīng)用程序,因?yàn)楦虞p量級(jí)。此外,虛擬機(jī)可以運(yùn)行多個(gè)進(jìn)程,而容器作為單個(gè)進(jìn)程運(yùn)行。于是:
我們可以在物理機(jī)上運(yùn)行多個(gè)容器,或者甚至可以考慮在單個(gè)虛擬機(jī)上運(yùn)行容器。無論是哪種情況,它都可以解決應(yīng)用程序相關(guān)的問題。
容器化與虛擬化之間并不是競爭關(guān)系,而是一種互補(bǔ),用以進(jìn)一步優(yōu)化IT軟件基礎(chǔ)設(shè)施。
我們已經(jīng)了解了IT軟件基礎(chǔ)設(shè)施的演變,接下來可能想知道如何實(shí)現(xiàn)之前討論過的微服務(wù)架構(gòu)和容器化?答案是:Docker。
Docker是全球領(lǐng)先的軟件容器化平臺(tái),它將微服務(wù)封裝進(jìn)我們所說的Docker容器,然后進(jìn)行獨(dú)立的維護(hù)和部署。每個(gè)容器都將負(fù)責(zé)一個(gè)特定的業(yè)務(wù)功能。
為了更深入了解Docker,讓我們以前面討論過的電子商務(wù)網(wǎng)站為例。我們知道它擁有多項(xiàng)業(yè)務(wù)和服務(wù),例如創(chuàng)建賬號(hào)、顯示產(chǎn)品目錄、建立和驗(yàn)證購物車等。在微服務(wù)架構(gòu)中,所有這些都可以視為微服務(wù)并封裝在Docker容器中。但是,為什么要這樣做?
其中一個(gè)原因是為了確保開發(fā)和生產(chǎn)環(huán)境之間的一致性。例如,假設(shè)有三位開發(fā)人員正在開發(fā)此應(yīng)用程序,他們每個(gè)人都有自己的開發(fā)環(huán)境。其中一個(gè)開發(fā)人員可能在他的機(jī)器上運(yùn)行Windows操作系統(tǒng),而第二個(gè)開發(fā)人員可能運(yùn)行Mac OS,第三個(gè)開發(fā)人員會(huì)更喜歡基于Linux的操作系統(tǒng)。他們每個(gè)人都需要花費(fèi)數(shù)小時(shí)的時(shí)間將應(yīng)用程序安裝到各自的開發(fā)環(huán)境中,并且需要做額外的工作將它們部署到云端。這一過程并不那么順暢,在將這些應(yīng)用程序部署到云基礎(chǔ)設(shè)施上時(shí),他們之間總是會(huì)發(fā)生摩擦。
借助Docker,可以使應(yīng)用程序獨(dú)立于主機(jī)環(huán)境。因?yàn)椴捎昧宋⒎?wù)架構(gòu),所以現(xiàn)在可以將每個(gè)服務(wù)封裝到Docker容器中。Docker容器是輕量級(jí)的,并且資源是隔離的,通過它可以構(gòu)建、維護(hù)、發(fā)布和部署應(yīng)用程序。
Docker是一款非常流行的軟件,有強(qiáng)大的社區(qū)支持,并專門為微服務(wù)而構(gòu)建。
與虛擬機(jī)相比,它是輕量級(jí)的,在成本和資源消耗方面頗具優(yōu)勢(shì)。
它為開發(fā)和生產(chǎn)環(huán)境提供了一致性,非常適合用于構(gòu)建云原生應(yīng)用程序。
它為持續(xù)集成和部署提供了便利。
Docker可與AWS、Microsoft Azure、Ansible、Kubernetes、Istio這些流行的工具和服務(wù)集成。
關(guān)于“Docker和微服務(wù)的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。