天天看點

什麼是容器服務_您為什麼應該使用微服務和容器?

什麼是容器服務_您為什麼應該使用微服務和容器?

什麼是微服務和容器?

首先,什麼是微服務?微服務是将應用程式拆分為多個服務的一種架構類型,這些服務具備構成整個應用程式的細粒度功能。每個微服務将具備針對您的應用程式的不同邏輯功能。與應用程式的所有元件和功能都在單個執行個體中的單體架構相比,微服務是應用程式架構領域一種更為現代的方法。您可以參考下圖中單體架構與微服務架構的比較情況。

什麼是容器服務_您為什麼應該使用微服務和容器?
什麼是容器服務_您為什麼應該使用微服務和容器?

我們要将微服務放置在哪裡?在容器中。容器是存放軟體的包,裡面包含運作軟體所需的一切内容,比如代碼、依賴關系、庫、二進制檔案等等。 Docker 是一種建構和運作容器的流行工具,但是 Kubernetes 正快速成為行業标準,用于編排企業環境中的多個容器。與虛拟機相比,容器可以共享作業系統核心,而不是像在一個主機上建構多個虛拟機那樣擁有完整的副本。雖然可以将微服務放置在多個虛拟機中,但在這種情況下通常會使用容器,因為容器占用的空間更少,啟動速度也更快。

為什麼使用微服務架構?

微服務架構是為解決人們在單體應用程式中遇到的問題而創造的。微服務已被廣泛使用,一些大型網站已将他們的單體應用程式轉變為微服務。使用微服務架構的一些好處是:

  • 與單體應用程式中的大型代碼庫相比,開發人員隻需處理小型代碼庫。  當應用程式元件松散耦合時,開發人員可以輕松了解源代碼,而不會減慢開發速度。如果使用的代碼行數更少,您的 IDE 的速度顯然會更快。開發人員無需處理各種功能的複雜性和依賴關系,這種情況隻會在單體應用程式中出現。
  • 開發人員的職責将會更加明确。  可以按照應用程式的元件或微服務來配置設定團隊工作。代碼複查速度将會加快。與單體應用程式相比,更新速度将會加快,而且無需建構和部署一切内容。
  • 應用程式的技術堆棧可以通過微服務有所不同。 應用程式不再需要依賴一種語言或庫。隻要開發人員認為合适,微服務就可以利用多種不同程式設計語言。可以使用如下圖所示的多語言微服務。
    什麼是容器服務_您為什麼應該使用微服務和容器?
    什麼是容器服務_您為什麼應該使用微服務和容器?
  • 持續傳遞将變得更加容易。  對于簡單變更,使用微服務就無需像單體應用程式那樣再次重新部署一切。您可以選擇僅重新建構和部署需要更新的微服務。頻繁更新的速度将會加快。
  • 可擴充性與每個微服務無關。 您可以選擇根據應用程式所需的資源擴充它的每個元件。無需像單體應用程式那樣為一切内容建構多個執行個體。擴充微服務将會有效利用可用資源,而不是像在單體應用程式中那樣擁有整個應用程式的多個副本。
    什麼是容器服務_您為什麼應該使用微服務和容器?
    什麼是容器服務_您為什麼應該使用微服務和容器?
  • 資料可以分散化處理。 您可以選擇為微服務使用不同的資料庫/存儲器。如果比起關系資料庫,您的微服務更适合使用非關系型資料庫,那麼就可以選擇這種資料庫。微服務也可能隻需要簡單的密鑰存儲資料庫,比如 Redis。如下圖所示,您可以選擇組合使用 Cloudant、MySQL 和 MongoDB。您可以利用不同的資料庫來存儲不同的資料類型。
    什麼是容器服務_您為什麼應該使用微服務和容器?
    什麼是容器服務_您為什麼應該使用微服務和容器?
  • 隔離故障。  一個微服務中的錯誤或缺陷不會使整個系統當機。如果采用松散耦合的元件,您的應用程式中的微服務出現錯誤時,其他微服務不太可能受到影響,因為它們都在自己的容器中,不會完全依賴彼此。而對于單體應用程式,如果沒有正确找出缺陷或錯誤,就會使整個應用程式流程當機。

存在哪些弊端?

在使用微服務解決單體架構的一些問題時,每種微服務都存在一系列問題。如果您試圖将單體應用程式拆分為微服務,那麼第一個挑戰就是如何拆分。您可以選擇将它們拆分為多個業務功能,比如一個微服務處理批次,另一個微服務處理支付服務。最後,您的元件應該隻具有一小部分的功能或責任。

我在微服務架構中看到的一些問題如下:

  • 一旦微服務數量增長, 就會難以進行跟蹤 。持續內建和持續傳遞的初始設定工作也并非易事,因為您需要處理擁有多個微服務所帶來的額外複雜性。
  • 複雜性 。微服務需要加強協作,尤其是在有多個團隊參與的時候。如果需要與其他微服務互動,那麼微服務還會引進更多的網絡調用,而在單體應用程式中則不會出現這種情況。部署微服務并不像部署應用程式的一個執行個體那樣簡單。您還需要考慮其他很多問題:如何處理各個微服務之間的通信,解決錯誤以避免中斷其他微服務,以及在每個元件中添加更多測試用例。
  • 找到并跟蹤應用程式中的缺陷/錯誤。如果您的微服務隻有一條路徑,那麼查找起來會比較容易,但如果一個微服務與其他多個微服務進行通信,僅查找錯誤就會耗費大量時間。
    什麼是容器服務_您為什麼應該使用微服務和容器?
    什麼是容器服務_您為什麼應該使用微服務和容器?
  • 進行微服務路由需要完成更多工作。 您需要花時間來配置和控制微服務的流動。您還需要持續跟蹤微服務的版本,并解決其路由問題。
    什麼是容器服務_您為什麼應該使用微服務和容器?
    什麼是容器服務_您為什麼應該使用微服務和容器?
  • 微服務會消耗比單體應用程式更多的資源。 雖然我提到的優點之一就是可以更出色、更有效地利用可擴充性和資源,但是所有元件都需要有自己的執行個體和容器,這可能就會導緻記憶體和 CPU 使用量增多。

可幫助您使用微服務的工具

Kubernetes

免費試用 IBM Cloud

利用IBM Cloud Lite 快速輕松地建構您的下一個應用程式。您的免費帳戶從不過期,而且您會獲得 256 MB 的 Cloud Foundry 運作時記憶體和包含 Kubernetes 叢集的 2 GB 存儲空間。了解所有細節并确定如何開始。如果您不熟悉 IBM Cloud,請查閱 developerWorks 上的 IBM Cloud Essentials 課程 。

Kubernetes 是一個容器編排平台,支援部署、擴充和管理所有容器。它可以自動部署容器化的微服務。這就更便于管理應用程式的所有元件和微服務。您可能會希望了解 Docker 如何實作微服務容器化。IBM 公開釋出了産品 IBM Cloud Kubernetes Service ,可以為您管理叢集。

Istio

Istio 能夠解決微服務中的一些弊端。Istio 是一種服務網格,可進一步幫助您管理微服務。Istio 可以安裝在 Kubernetes 之上,幫助您跟蹤和監控微服務。同時,還可以幫助您快速跟蹤應用程式中可能存在的錯誤和缺陷。Istio 還可以管理微服務的流量,比如管理和控制流動。可以輕松配置路由。Istio 也可以在微服務中提供安全保障,比如采用互相 TLS,或限制它通路外部服務。您也可以将 Istio 安裝到 IBM Cloud Kubernetes Service 上。

總結

根據我的個人經驗,使用容器編排平台是通過微服務建構應用程式的必要條件。Kubernetes 是廣受開發人員歡迎的一種平台,因為它可以快速将應用程式從開發階段帶入生産環境。更棒的是,它是開源的!

對于開始建構自己的應用程式的開發人員來說,他們應該确定使用微服務是否比使用單體應用程式對他們更有利。他們應該考慮應用程式的長期易用性和可擴充性。從單體架構着手完全沒有問題,但是一旦應用程式規模擴大,将它們拆分為微服務的難度隻會更大。在這種情況下,在初期開發階段就從微服務開始顯然會更加有利。對于現有的單體應用程式,開發人員應該考慮以何種方式分離應用程式中的哪些元件。

盡管存在一些弊端,但微服務在開發人員和企業中仍然很受歡迎,因為微服務對于應用程式和滿足使用者需求都極為有利。一旦使用了合适級别的微服務,借助它的靈活性,開發人員和企業就可以快速開發或更新應用程式。

本文翻譯自: Why should you use microservices and containers? (2018-11-01)

參考資源

  • 檢視 IBM Cloud Container Registry 入門 ,了解更多
  • 相關文章: 快速建立并部署 Spring 微服務
  • Code Pattern: 使用 Istio 管理微服務流量
  • Code Pattern: 在 Kubernetes 上部署 Spring Boot 微服務
什麼是容器服務_您為什麼應該使用微服務和容器?

目前100000+人已關注加入我們

什麼是容器服務_您為什麼應該使用微服務和容器?
什麼是容器服務_您為什麼應該使用微服務和容器?
什麼是容器服務_您為什麼應該使用微服務和容器?
什麼是容器服務_您為什麼應該使用微服務和容器?
什麼是容器服務_您為什麼應該使用微服務和容器?
什麼是容器服務_您為什麼應該使用微服務和容器?
什麼是容器服務_您為什麼應該使用微服務和容器?
什麼是容器服務_您為什麼應該使用微服務和容器?
什麼是容器服務_您為什麼應該使用微服務和容器?
什麼是容器服務_您為什麼應該使用微服務和容器?
什麼是容器服務_您為什麼應該使用微服務和容器?
什麼是容器服務_您為什麼應該使用微服務和容器?
什麼是容器服務_您為什麼應該使用微服務和容器?
什麼是容器服務_您為什麼應該使用微服務和容器?
什麼是容器服務_您為什麼應該使用微服務和容器?
什麼是容器服務_您為什麼應該使用微服務和容器?

繼續閱讀