什么是微服務(wù)和容器?
首先,什么是微服務(wù)?微服務(wù)是將應(yīng)用程序拆分為多個服務(wù)的一種架構(gòu)類型,這些服務(wù)具備構(gòu)成整個應(yīng)用程序的細(xì)粒度功能。每個微服務(wù)將具備針對您的應(yīng)用程序的不同邏輯功能。與應(yīng)用程序的所有組件和功能都在單個實例中的單體架構(gòu)相比,微服務(wù)是應(yīng)用程序架構(gòu)領(lǐng)域一種更為現(xiàn)代的方法。您可以參考下圖中單體架構(gòu)與微服務(wù)架構(gòu)的比較情況。
我們要將微服務(wù)放置在哪里?在容器中。容器是存放軟件的包,里面包含運行軟件所需的一切內(nèi)容,比如代碼、依賴關(guān)系、庫、二進制文件等等。Docker 是一種構(gòu)建和運行容器的流行工具,但是 Kubernetes 正快速成為行業(yè)標(biāo)準(zhǔn),用于編排企業(yè)環(huán)境中的多個容器。與虛擬機相比,容器可以共享操作系統(tǒng)內(nèi)核,而不是像在一個主機上構(gòu)建多個虛擬機那樣擁有完整的副本。雖然可以將微服務(wù)放置在多個虛擬機中,但在這種情況下通常會使用容器,因為容器占用的空間更少,啟動速度也更快。
為什么使用微服務(wù)架構(gòu)?
微服務(wù)架構(gòu)是為解決人們在單體應(yīng)用程序中遇到的問題而創(chuàng)造的。微服務(wù)已被廣泛使用,一些大型網(wǎng)站已將他們的單體應(yīng)用程序轉(zhuǎn)變?yōu)槲⒎?wù)。使用微服務(wù)架構(gòu)的一些好處是:
與單體應(yīng)用程序中的大型代碼庫相比,開發(fā)人員只需處理小型代碼庫。 當(dāng)應(yīng)用程序組件松散耦合時,開發(fā)人員可以輕松理解源代碼,而不會減慢開發(fā)速度。如果使用的代碼行數(shù)更少,您的 IDE 的速度顯然會更快。開發(fā)人員無需處理各種功能的復(fù)雜性和依賴關(guān)系,這種情況只會在單體應(yīng)用程序中出現(xiàn)。
開發(fā)人員的職責(zé)將會更加明確。 可以按照應(yīng)用程序的組件或微服務(wù)來分配團隊工作。代碼復(fù)查速度將會加快。與單體應(yīng)用程序相比,更新速度將會加快,而且無需構(gòu)建和部署一切內(nèi)容。
應(yīng)用程序的技術(shù)堆棧可以通過微服務(wù)有所不同。應(yīng)用程序不再需要依賴一種語言或庫。只要開發(fā)人員認(rèn)為合適,微服務(wù)就可以利用多種不同編程語言。可以使用如下圖所示的多語言微服務(wù)。
持續(xù)交付將變得更加容易。 對于簡單變更,使用微服務(wù)就無需像單體應(yīng)用程序那樣再次重新部署一切。您可以選擇僅重新構(gòu)建和部署需要更新的微服務(wù)。頻繁更新的速度將會加快。
可擴展性與每個微服務(wù)無關(guān)。您可以選擇根據(jù)應(yīng)用程序所需的資源擴展它的每個組件。無需像單體應(yīng)用程序那樣為一切內(nèi)容構(gòu)建多個實例。擴展微服務(wù)將會有效利用可用資源,而不是像在單體應(yīng)用程序中那樣擁有整個應(yīng)用程序的多個副本。
數(shù)據(jù)可以分散化處理。您可以選擇為微服務(wù)使用不同的數(shù)據(jù)庫/存儲器。如果比起關(guān)系數(shù)據(jù)庫,您的微服務(wù)更適合使用非關(guān)系型數(shù)據(jù)庫,那么就可以選擇這種數(shù)據(jù)庫。微服務(wù)也可能只需要簡單的密鑰存儲數(shù)據(jù)庫,比如 Redis。如下圖所示,您可以選擇組合使用 Cloudant、MySQL 和 MongoDB。您可以利用不同的數(shù)據(jù)庫來存儲不同的數(shù)據(jù)類型。
隔離故障。 一個微服務(wù)中的錯誤或缺陷不會使整個系統(tǒng)宕機。如果采用松散耦合的組件,您的應(yīng)用程序中的微服務(wù)出現(xiàn)錯誤時,其他微服務(wù)不太可能受到影響,因為它們都在自己的容器中,不會完全依賴彼此。而對于單體應(yīng)用程序,如果沒有正確找出缺陷或錯誤,就會使整個應(yīng)用程序流程宕機。
存在哪些弊端?
在使用微服務(wù)解決單體架構(gòu)的一些問題時,每種微服務(wù)都存在一系列問題。如果您試圖將單體應(yīng)用程序拆分為微服務(wù),那么第一個挑戰(zhàn)就是如何拆分。您可以選擇將它們拆分為多個業(yè)務(wù)功能,比如一個微服務(wù)處理批次,另一個微服務(wù)處理支付服務(wù)。最后,您的組件應(yīng)該只具有一小部分的功能或責(zé)任。
我在微服務(wù)架構(gòu)中看到的一些問題如下:
一旦微服務(wù)數(shù)量增長,就會難以進行跟蹤。持續(xù)集成和持續(xù)交付的初始設(shè)置工作也并非易事,因為您需要處理擁有多個微服務(wù)所帶來的額外復(fù)雜性。
復(fù)雜性。微服務(wù)需要加強協(xié)作,尤其是在有多個團隊參與的時候。如果需要與其他微服務(wù)交互,那么微服務(wù)還會引進更多的網(wǎng)絡(luò)調(diào)用,而在單體應(yīng)用程序中則不會出現(xiàn)這種情況。部署微服務(wù)并不像部署應(yīng)用程序的一個實例那樣簡單。您還需要考慮其他很多問題:如何處理各個微服務(wù)之間的通信,解決錯誤以避免中斷其他微服務(wù),以及在每個組件中添加更多測試用例。
找到并跟蹤應(yīng)用程序中的缺陷/錯誤。如果您的微服務(wù)只有一條路徑,那么查找起來會比較容易,但如果一個微服務(wù)與其他多個微服務(wù)進行通信,僅查找錯誤就會耗費大量時間。
進行微服務(wù)路由需要完成更多工作。您需要花時間來配置和控制微服務(wù)的流動。您還需要持續(xù)跟蹤微服務(wù)的版本,并解決其路由問題。
微服務(wù)會消耗比單體應(yīng)用程序更多的資源。雖然我提到的優(yōu)點之一就是可以更出色、更有效地利用可擴展性和資源,但是所有組件都需要有自己的實例和容器,這可能就會導(dǎo)致內(nèi)存和 CPU 使用量增多。
可幫助您使用微服務(wù)的工具
Kubernetes
Kubernetes 是一個容器編排平臺,支持部署、擴展和管理所有容器。它可以自動部署容器化的微服務(wù)。這就更便于管理應(yīng)用程序的所有組件和微服務(wù)。您可能會希望了解 Docker 如何實現(xiàn)微服務(wù)容器化。IBM 公開發(fā)布了產(chǎn)品 IBM Cloud Kubernetes Service,可以為您管理集群。
Istio
Istio 能夠解決微服務(wù)中的一些弊端。Istio 是一種服務(wù)網(wǎng)格,可進一步幫助您管理微服務(wù)。Istio 可以安裝在 Kubernetes 之上,幫助您跟蹤和監(jiān)控微服務(wù)。同時,還可以幫助您快速跟蹤應(yīng)用程序中可能存在的錯誤和缺陷。Istio 還可以管理微服務(wù)的流量,比如管理和控制流動。可以輕松配置路由。Istio 也可以在微服務(wù)中提供安全保障,比如采用相互 TLS,或限制它訪問外部服務(wù)。您也可以將 Istio 安裝到 IBM Cloud Kubernetes Service 上。
總結(jié)
根據(jù)我的個人經(jīng)驗,使用容器編排平臺是通過微服務(wù)構(gòu)建應(yīng)用程序的必要條件。Kubernetes 是廣受開發(fā)人員歡迎的一種平臺,因為它可以快速將應(yīng)用程序從開發(fā)階段帶入生產(chǎn)環(huán)境。更棒的是,它是開源的!
對于開始構(gòu)建自己的應(yīng)用程序的開發(fā)人員來說,他們應(yīng)該確定使用微服務(wù)是否比使用單體應(yīng)用程序?qū)λ麄兏欣K麄儜?yīng)該考慮應(yīng)用程序的長期易用性和可擴展性。從單體架構(gòu)著手完全沒有問題,但是一旦應(yīng)用程序規(guī)模擴大,將它們拆分為微服務(wù)的難度只會更大。在這種情況下,在初期開發(fā)階段就從微服務(wù)開始顯然會更加有利。對于現(xiàn)有的單體應(yīng)用程序,開發(fā)人員應(yīng)該考慮以何種方式分離應(yīng)用程序中的哪些組件。
盡管存在一些弊端,但微服務(wù)在開發(fā)人員和企業(yè)中仍然很受歡迎,因為微服務(wù)對于應(yīng)用程序和滿足用戶需求都極為有利。一旦使用了合適級別的微服務(wù),借助它的靈活性,開發(fā)人員和企業(yè)就可以快速開發(fā)或更新應(yīng)用程序。
-
電容器
+關(guān)注
關(guān)注
64文章
6711瀏覽量
102990 -
微服務(wù)
+關(guān)注
關(guān)注
0文章
145瀏覽量
7746
發(fā)布評論請先 登錄
微服務(wù)架構(gòu)和CQRS架構(gòu)基本概念介紹
微服務(wù)網(wǎng)關(guān)gateway的相關(guān)資料推薦
運維是如何看待微服務(wù)和容器的

微服務(wù)與容器技術(shù)實踐

什么是微服務(wù)_微服務(wù)知識點全面總結(jié)
java微服務(wù)架構(gòu)有哪些

微服務(wù)和容器之間的有何關(guān)系?
通過微服務(wù)原理、領(lǐng)域驅(qū)動設(shè)計概念等來成功實現(xiàn)微服務(wù)
docker微服務(wù)架構(gòu)實戰(zhàn)
設(shè)計微服務(wù)架構(gòu)的原則

評論