Docker和微服務的崛起

做爲一名軟件開發者或技術愛好者,像「微服務」和「Docker」這樣的術語已經不絕於耳,但你是否仍然不明白爲何會有這麼多相關的炒做?數據庫

若是是,那就應該看看這篇文章!編程

SOA「簡史」

在2000年初,咱們目擊了面向服務架構(Service Oriented Architecture,SOA)的崛起,這是一種很是流行的軟件架構設計範式。簡而言之,SOA是一種軟件架構模式,用於構建大型的企業應用程序,這些應用程序一般要求集成多種服務,而每種服務使用不一樣的平臺和編程語言來構建,並經過通用的通訊機制進行交互。性能優化

如下是面向服務架構(SOA)的簡單圖示:服務器

架構

關鍵點

  1. SOA是大型軟件產品(如企業應用程序)的首選。
  2. SOA側重於將多個服務集成到單個應用程序中,而不是強調模塊化應用程序。
  3. 在SOA中,用於服務間交互的通用通訊機制被稱爲企業服務總線(Enterprise Service Bus,ESB)。
  4. 基於SOA的應用程序本質是單體。也就是說,單個應用程序層包含了用戶界面或表示層、業務邏輯或應用程序層,以及數據庫層,這些所有都集成到一個平臺中。

關於「單體架構」

讓咱們以網店爲例。咱們知道,不少電商網站均可以經過多種設備訪問,因此這些網站一般都爲筆記本電腦和移動設備提供了不一樣的用戶界面。併發

咱們也知道,多個操做或服務彼此依賴,以確保應用程序的正常運行。其中一些服務負責建立帳號、顯示產品目錄、創建和驗證購物車、生成帳單、確認訂單、完成支付等。負載均衡

在單體應用程序中,全部這些服務都在同一個應用程序層上運行,所以這個電子商務網站的軟件架構以下所示:編程語言

缺點

  1. 很顯然,隨着服務數量的增長,應用程序的規模將不斷增加。這可能會讓構建和維護應用程序代碼庫的開發人員不堪重負。
  2. 難以更新當前的技術棧,即便是在當前技術棧中修改一點內容也會是一場噩夢。
  3. 每一項變動都要求開發人員重建整個應用程序,十分浪費資源。
  4. 隨着客戶羣的增長,咱們將有更多的請求須要,這將須要更多的資源。所以,創建可擴展的產品時相當重要的。對於單體應用程序,咱們只能在一個方向上進行伸縮,即垂直伸縮,而不是水平伸縮。這意味着咱們能夠經過添加更多硬件資源(如內存和CPU)在單臺計算機上擴展應用程序,但橫向擴展(跨多臺計算機)仍然是一項挑戰。

救星「微服務」來了!

微服務架構能夠被認爲是對SOA的特殊化,也是一種能夠克服單體架構缺陷的替代模式。分佈式

在微服務架構中,咱們專一於將應用程序模塊化,將其分解成較小的獨立服務,這些服務可獨立於其餘服務或整個應用程序自己而構建、部署、伸縮和維護。這些獨立服務被稱爲微服務,所以這種架構被稱爲微服務架構。模塊化



關鍵點

  1. 微服務架構和SOA雖然不同,但它們確實存在一些類似之處。微服務架構被稱爲SOA的變體,甚至是SOA的一種特殊化。換句話說,SOA能夠被認爲是微服務架構的超集。
  2. 人們之因此可以在這些架構之間找到類似性,主要是由於它們都專一於構建具備鬆散耦合的服務。這些服務具備明確的界限,而且每一個服務都具備獨立的功能集。
  3. 不一樣之處在於,SOA可能意味着其餘不少東西。例如,SOA適用於單體架構,重點是將系統集成在一個應用程序中,並確保代碼的可複用性。但對微服務架構來講並非這樣的,微服務架構的重點是經過構建獨立服務和確保產品的可伸縮性來模塊化應用程序。

優勢

  1. 引入關注點分離的理念,在軟件應用程序開發中實現敏捷,無論是在簡單的仍是複雜的領域。
  2. 微服務的獨立能力或獨立性帶來了如下好處:
    • 將開發人員分紅小團隊來下降複雜性,每一個小團隊負責構建和維護一個或多個服務。
    • 容許部署分塊,而不是每次發生變動都要從新構建整個應用程序,以此來下降風險。
    • 增量更新或升級一個或多個服務的技術棧,而不是在一個時間點更新整個應用程序,以此下降維護難度。
    • 可使用任意的編程語言來構建服務,除此以外,還能夠爲每一個給定服務維護單獨的數據模型。
  1. 能夠構建全自動的部署機制,確保個體服務的部署、服務管理和自動伸縮。

技術的演變

除了軟件架構模式的發展以外,咱們還看到Docker和Kubernetes等新技術的出現,用於支持咱們的軟件基礎設施,實現對可伸縮產品和服務的高效管理。咱們已經從硬件虛擬化發展到容器化。

或許你會想,這意味着什麼?

讓咱們藉助下圖來理解IT基礎設施領域的發展:

第一張圖顯示的是一臺物理機器或一臺硬件服務器。一般,咱們在構建應用程序時使用的是宿主操做系統提供的資源,在部署應用程序時也使用了相同的模式。但若是你想擴展應用程序該怎麼辦呢?在某些時候,你可能須要另外一臺硬件服務器。而隨着數量不斷增長,成本和其餘資源(如硬件和能源消耗)也會隨之增長。

此外,你可能會想,是否有必要在任什麼時候候都使用全部的硬件資源和操做系統?固然不是。既然這樣,那麼爲何還須要這麼龐大的基礎設施呢?

這個問題促成了硬件虛擬化的發展,因而虛擬機(VM)出現了,咱們經過虛擬機來優化IT基礎設施。如你在第二張圖中看到的,虛擬機具備本身的客戶操做系統,運行在單個物理機或宿主操做系統中。咱們所以可以運行多個應用程序,而無需安裝大量物理機。宿主操做系統能夠確保在不一樣虛擬機之間進行系統性的資源分配和負載均衡。

虛擬機下降了軟件維護的難度和成本,不過仍然能夠進一步優化。例如,並不是全部的應用程序在客戶操做系統環境中都會按預期運行。此外,即便是運行簡單的進程,客戶操做系統也須要大量資源。

這些問題促成了下一個創新:容器化。與特定於操做系統的虛擬機不一樣,容器特定於應用程序,由於更加輕量級。此外,虛擬機能夠運行多個進程,而容器做爲單個進程運行。因而:

  1. 咱們能夠在物理機上運行多個容器,或者甚至能夠考慮在單個虛擬機上運行容器。不管是哪一種狀況,它均可以解決應用程序相關的問題。
  2. 容器化與虛擬化之間並非競爭關係,而是一種互補,用以進一步優化IT軟件基礎設施。

Docker

咱們已經瞭解了IT軟件基礎設施的演變,接下來可能想知道如何實現以前討論過的微服務架構和容器化?答案是:Docker。

Docker是全球領先的軟件容器化平臺,它將微服務封裝進咱們所說的Docker容器,而後進行獨立的維護和部署。每一個容器都將負責一個特定的業務功能。

爲了更深刻了解Docker,讓咱們之前面討論過的電子商務網站爲例。咱們知道它擁有多項業務和服務,例如建立帳號、顯示產品目錄、創建和驗證購物車等。在微服務架構中,全部這些均可以視爲微服務並封裝在Docker容器中。可是,爲何要這樣作?

其中一個緣由是爲了確保開發和生產環境之間的一致性。例如,假設有三位開發人員正在開發此應用程序,他們每一個人都有本身的開發環境。其中一個開發人員可能在他的機器上運行Windows操做系統,而第二個開發人員可能運行Mac OS,第三個開發人員會更喜歡基於Linux的操做系統。他們每一個人都須要花費數小時的時間將應用程序安裝到各自的開發環境中,而且須要作額外的工做將它們部署到雲端。這一過程並不那麼順暢,在將這些應用程序部署到雲基礎設施上時,他們之間老是會發生摩擦。

藉助Docker,可使應用程序獨立於主機環境。由於採用了微服務架構,因此如今能夠將每一個服務封裝到Docker容器中。Docker容器是輕量級的,而且資源是隔離的,經過它能夠構建、維護、發佈和部署應用程序。

優勢

  1. Docker是一款很是流行的軟件,有強大的社區支持,並專門爲微服務而構建。
  2. 與虛擬機相比,它是輕量級的,在成本和資源消耗方面頗具優點。
  3. 它爲開發和生產環境提供了一致性,很是適合用於構建雲原生應用程序。
  4. 它爲持續集成和部署提供了便利。
  5. Docker可與AWS、Microsoft Azure、Ansible、Kubernetes、Istio這些流行的工具和服務集成。

在此我向你們推薦一個Java高級羣 :725633148 裏面會分享一些資深架構師錄製的視頻錄像:(有Spring,MyBatis,Netty源碼分析,高併發、高性能、分佈式、微服務架構的原理,JVM性能優化、分佈式架構)等這些成爲架構師必備的知識體系 進羣立刻免費領取,目前受益良多!

相關文章
相關標籤/搜索