做爲一名軟件開發者或技術愛好者,像「微服務」和「Docker」這樣的術語已經不絕於耳,但你是否仍然不明白爲何會有這麼多相關的炒做?數據庫
若是是,那就應該看看這篇文章!編程
在2000年初,咱們目擊了面向服務架構(Service Oriented Architecture,SOA)的崛起,這是一種很是流行的軟件架構設計範式。簡而言之,SOA是一種軟件架構模式,用於構建大型的企業應用程序,這些應用程序一般要求集成多種服務,而每種服務使用不一樣的平臺和編程語言來構建,並經過通用的通訊機制進行交互。性能優化
如下是面向服務架構(SOA)的簡單圖示:服務器
架構
讓咱們以網店爲例。咱們知道,不少電商網站均可以經過多種設備訪問,因此這些網站一般都爲筆記本電腦和移動設備提供了不一樣的用戶界面。併發
咱們也知道,多個操做或服務彼此依賴,以確保應用程序的正常運行。其中一些服務負責建立帳號、顯示產品目錄、創建和驗證購物車、生成帳單、確認訂單、完成支付等。負載均衡
在單體應用程序中,全部這些服務都在同一個應用程序層上運行,所以這個電子商務網站的軟件架構以下所示:編程語言
微服務架構能夠被認爲是對SOA的特殊化,也是一種能夠克服單體架構缺陷的替代模式。分佈式
在微服務架構中,咱們專一於將應用程序模塊化,將其分解成較小的獨立服務,這些服務可獨立於其餘服務或整個應用程序自己而構建、部署、伸縮和維護。這些獨立服務被稱爲微服務,所以這種架構被稱爲微服務架構。模塊化
除了軟件架構模式的發展以外,咱們還看到Docker和Kubernetes等新技術的出現,用於支持咱們的軟件基礎設施,實現對可伸縮產品和服務的高效管理。咱們已經從硬件虛擬化發展到容器化。
或許你會想,這意味着什麼?
讓咱們藉助下圖來理解IT基礎設施領域的發展:
第一張圖顯示的是一臺物理機器或一臺硬件服務器。一般,咱們在構建應用程序時使用的是宿主操做系統提供的資源,在部署應用程序時也使用了相同的模式。但若是你想擴展應用程序該怎麼辦呢?在某些時候,你可能須要另外一臺硬件服務器。而隨着數量不斷增長,成本和其餘資源(如硬件和能源消耗)也會隨之增長。
此外,你可能會想,是否有必要在任什麼時候候都使用全部的硬件資源和操做系統?固然不是。既然這樣,那麼爲何還須要這麼龐大的基礎設施呢?
這個問題促成了硬件虛擬化的發展,因而虛擬機(VM)出現了,咱們經過虛擬機來優化IT基礎設施。如你在第二張圖中看到的,虛擬機具備本身的客戶操做系統,運行在單個物理機或宿主操做系統中。咱們所以可以運行多個應用程序,而無需安裝大量物理機。宿主操做系統能夠確保在不一樣虛擬機之間進行系統性的資源分配和負載均衡。
虛擬機下降了軟件維護的難度和成本,不過仍然能夠進一步優化。例如,並不是全部的應用程序在客戶操做系統環境中都會按預期運行。此外,即便是運行簡單的進程,客戶操做系統也須要大量資源。
這些問題促成了下一個創新:容器化。與特定於操做系統的虛擬機不一樣,容器特定於應用程序,由於更加輕量級。此外,虛擬機能夠運行多個進程,而容器做爲單個進程運行。因而:
咱們已經瞭解了IT軟件基礎設施的演變,接下來可能想知道如何實現以前討論過的微服務架構和容器化?答案是:Docker。
Docker是全球領先的軟件容器化平臺,它將微服務封裝進咱們所說的Docker容器,而後進行獨立的維護和部署。每一個容器都將負責一個特定的業務功能。
爲了更深刻了解Docker,讓咱們之前面討論過的電子商務網站爲例。咱們知道它擁有多項業務和服務,例如建立帳號、顯示產品目錄、創建和驗證購物車等。在微服務架構中,全部這些均可以視爲微服務並封裝在Docker容器中。可是,爲何要這樣作?
其中一個緣由是爲了確保開發和生產環境之間的一致性。例如,假設有三位開發人員正在開發此應用程序,他們每一個人都有本身的開發環境。其中一個開發人員可能在他的機器上運行Windows操做系統,而第二個開發人員可能運行Mac OS,第三個開發人員會更喜歡基於Linux的操做系統。他們每一個人都須要花費數小時的時間將應用程序安裝到各自的開發環境中,而且須要作額外的工做將它們部署到雲端。這一過程並不那麼順暢,在將這些應用程序部署到雲基礎設施上時,他們之間老是會發生摩擦。
藉助Docker,可使應用程序獨立於主機環境。由於採用了微服務架構,因此如今能夠將每一個服務封裝到Docker容器中。Docker容器是輕量級的,而且資源是隔離的,經過它能夠構建、維護、發佈和部署應用程序。
在此我向你們推薦一個Java高級羣 :725633148 裏面會分享一些資深架構師錄製的視頻錄像:(有Spring,MyBatis,Netty源碼分析,高併發、高性能、分佈式、微服務架構的原理,JVM性能優化、分佈式架構)等這些成爲架構師必備的知識體系 進羣立刻免費領取,目前受益良多!