歡迎光臨
每天分享高質量文章

詳談微服務與容器技術發展史

      作為一名軟體開發者或技術愛好者,像“微服務”和“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. 微服務的獨立能力或獨立性帶來了以下好處:

  • 將開發人員分成小團隊來降低複雜性,每個小團隊負責構建和維護一個或多個服務。

  • 允許部署分塊,而不是每次發生變更都要重新構建整個應用程式,以此來降低風險。

  • 增量更新或升級一個或多個服務的技術棧,而不是在一個時間點更新整個應用程式,以此降低維護難度。

  • 可以使用任意的程式語言來構建服務,除此之外,還可以為每個給定服務維護單獨的資料模型。

  • 可以構建全自動的部署機制,確保個體服務的部署、服務管理和自動伸縮。

  • 技術的演變

          除了軟體架構樣式的發展之外,我們還看到 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 這些流行的工具和服務整合。

    譯者 | 無明
    編輯丨張嬋 高效開發運維 公眾號

    熱文閱讀


          關於容器和Docker詳細分析,請透過“原文連結”參閱作者總結的<容器技術架構、網路和生態詳解>電子書。



    溫馨提示:

    請搜尋“ICT_Architect”“掃一掃”二維碼關註公眾號,點選原文連結獲取更多技術資料

    Stay hungry Stay foolish

    贊(0)

    分享創造快樂