詳談微服務與容器技術發展史
作為一名軟體開發者或技術愛好者,像「微服務」和「Docker」這樣的術語已經不絕於耳,但你是否仍然不明白為什麼會有這麼多相關的炒作?如果是,那就應該看看這篇文章!
SOA「簡史」
在 2000 年初,我們目睹了面向服務架構(Service Oriented Architecture,SOA)的崛起,這是一種非常流行的軟體架構設計範式。簡而言之,SOA 是一種軟體架構模式,用於構建大型的企業應用程序,這些應用程序通常要求集成多種服務,而每種服務使用不同的平台和編程語言來構建,並通過通用的通信機制進行交互。
以下是面向服務架構(SOA)的簡單圖示:
關鍵點
SOA 是大型軟體產品(如企業應用程序)的首選。
SOA 側重於將多個服務集成到單個應用程序中,而不是強調模塊化應用程序。
在 SOA 中,用於服務間交互的通用通信機制被稱為企業服務匯流排(Enterprise Service Bus,ESB)。
基於 SOA 的應用程序本質是單體。也就是說,單個應用程序層包含了用戶界面或表示層、業務邏輯或應用程序層,以及資料庫層,這些全部都集成到一個平台中。
關於「單體架構」
讓我們以網店為例。我們知道,很多電商網站都可以通過多種設備訪問,所以這些網站通常都為筆記本電腦和移動設備提供了不同的用戶界面。
我們也知道,多個操作或服務彼此依賴,以確保應用程序的正常運行。其中一些服務負責創建賬號、顯示產品目錄、建立和驗證購物車、生成賬單、確認訂單、完成支付等。
在單體應用程序中,所有這些服務都在同一個應用程序層上運行,因此這個電子商務網站的軟體架構如下所示:
缺點
很顯然,隨著服務數量的增加,應用程序的規模將不斷增長。這可能會讓構建和維護應用程序代碼庫的開發人員不堪重負。
難以更新當前的技術棧,即使是在當前技術棧中修改一點內容也會是一場噩夢。
每一項變更都要求開發人員重建整個應用程序,十分浪費資源。
隨著客戶群的增加,我們將有更多的請求需要,這將需要更多的資源。因此,建立可擴展的產品時至關重要的。對於單體應用程序,我們只能在一個方向上進行伸縮,即垂直伸縮,而不是水平伸縮。這意味著我們可以通過添加更多硬體資源(如內存和 CPU)在單台計算機上擴展應用程序,但橫向擴展(跨多台計算機)仍然是一項挑戰。
救星「微服務」來了
微服務架構可以被認為是對 SOA 的特殊化,也是一種可以克服單體架構缺陷的替代模式。
在微服務架構中,我們專註於將應用程序模塊化,將其分解成較小的獨立服務,這些服務可獨立於其他服務或整個應用程序本身而構建、部署、伸縮和維護。這些獨立服務被稱為微服務,因此這種架構被稱為微服務架構。
關鍵點
微服務架構和 SOA 雖然不一樣,但它們確實存在一些相似之處。微服務架構被稱為 SOA 的變體,甚至是 SOA 的一種特殊化。換句話說,SOA 可以被認為是微服務架構的超集。
人們之所以能夠在這些架構之間找到相似性,主要是因為它們都專註於構建具有鬆散耦合的服務。這些服務具有明確的界限,並且每個服務都具有獨立的功能集。
不同之處在於,SOA 可能意味著其他很多東西。例如,SOA 適用於單體架構,重點是將系統集成在一個應用程序中,並確保代碼的可復用性。但對微服務架構來說並不是這樣的,微服務架構的重點是通過構建獨立服務和確保產品的可伸縮性來模塊化應用程序。
優點
引入關注點分離的理念,在軟體應用程序開發中實現敏捷,不管是在簡單的還是複雜的領域。
微服務的獨立能力或獨立性帶來了以下好處:
將開發人員分成小團隊來降低複雜性,每個小團隊負責構建和維護一個或多個服務。
允許部署分塊,而不是每次發生變更都要重新構建整個應用程序,以此來降低風險。
增量更新或升級一個或多個服務的技術棧,而不是在一個時間點更新整個應用程序,以此降低維護難度。
可以使用任意的編程語言來構建服務,除此之外,還可以為每個給定服務維護單獨的數據模型。
可以構建全自動的部署機制,確保個體服務的部署、服務管理和自動伸縮。
技術的演變
除了軟體架構模式的發展之外,我們還看到 Docker 和 Kubernetes 等新技術的出現,用於支持我們的軟體基礎設施,實現對可伸縮產品和服務的高效管理。我們已經從硬體虛擬化發展到容器化。
或許你會想,這意味著什麼?
讓我們藉助下圖來理解 IT 基礎設施領域的發展:
第一張圖顯示的是一台物理機器或一台硬體伺服器。通常,我們在構建應用程序時使用的是宿主操作系統提供的資源,在部署應用程序時也使用了相同的模式。但如果你想擴展應用程序該怎麼辦呢?在某些時候,你可能需要另一台硬體伺服器。而隨著數量不斷增加,成本和其他資源(如硬體和能源消耗)也會隨之增加。
此外,你可能會想,是否有必要在任何時候都使用所有的硬體資源和操作系統?當然不是。既然這樣,那麼為什麼還需要這麼龐大的基礎設施呢?
這個問題促成了硬體虛擬化的發展,於是虛擬機(VM)出現了,我們通過虛擬機來優化 IT 基礎設施。如你在第二張圖中看到的,虛擬機具有自己的客戶操作系統,運行在單個物理機或宿主操作系統中。我們因此能夠運行多個應用程序,而無需安裝大量物理機。宿主操作系統可以確保在不同虛擬機之間進行系統性的資源分配和負載均衡。
虛擬機降低了軟體維護的難度和成本,不過仍然可以進一步優化。例如,並非所有的應用程序在客戶操作系統環境中都會按預期運行。此外,即使是運行簡單的進程,客戶操作系統也需要大量資源。
這些問題促成了下一個創新:容器化。與特定於操作系統的虛擬機不同,容器特定於應用程序,因為更加輕量級。此外,虛擬機可以運行多個進程,而容器作為單個進程運行。於是:
我們可以在物理機上運行多個容器,或者甚至可以考慮在單個虛擬機上運行容器。無論是哪種情況,它都可以解決應用程序相關的問題。
容器化與虛擬化之間並不是競爭關係,而是一種互補,用以進一步優化 IT 軟體基礎設施。
Docker
我們已經了解了 IT 軟體基礎設施的演變,接下來可能想知道如何實現之前討論過的微服務架構和容器化?答案是: Docker。
Docker 是全球領先的軟體容器化平台,它將微服務封裝進我們所說的 Docker 容器,然後進行獨立的維護和部署。每個容器都將負責一個特定的業務功能。
為了更深入了解 Docker,讓我們以前面討論過的電子商務網站為例。我們知道它擁有多項業務和服務,例如創建賬號、顯示產品目錄、建立和驗證購物車等。在微服務架構中,所有這些都可以視為微服務並封裝在 Docker 容器中。但是,為什麼要這樣做?
其中一個原因是為了確保開發和生產環境之間的一致性。例如,假設有三位開發人員正在開發此應用程序,他們每個人都有自己的開發環境。其中一個開發人員可能在他的機器上運行 Windows 操作系統,而第二個開發人員可能運行 Mac OS,第三個開發人員會更喜歡基於 Linux 的操作系統。他們每個人都需要花費數小時的時間將應用程序安裝到各自的開發環境中,並且需要做額外的工作將它們部署到雲端。這一過程並不那麼順暢,在將這些應用程序部署到雲基礎設施上時,他們之間總是會發生摩擦。
藉助 Docker,可以使應用程序獨立於主機環境。因為採用了微服務架構,所以現在可以將每個服務封裝到 Docker 容器中。Docker 容器是輕量級的,並且資源是隔離的,通過它可以構建、維護、發布和部署應用程序。
優點
Docker 是一款非常流行的軟體,有強大的社區支持,並專門為微服務而構建。
與虛擬機相比,它是輕量級的,在成本和資源消耗方面頗具優勢。
它為開發和生產環境提供了一致性,非常適合用於構建雲原生應用程序。
它為持續集成和部署提供了便利。
Docker 可與 AWS、Microsoft Azure、Ansible、Kubernetes、Istio 這些流行的工具和服務集成。
譯者 | 無明
編輯丨張嬋 高效開發運維 公眾號
熱文閱讀
溫馨提示:
Stay hungryStay foolish


TAG:架構師技術聯盟 |