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