回顧前一次的文章,當你把應用程式部署到公有雲或是容器化平台後,就代表你完成雲運算應用系統的建置了嗎?基本上,這應該是我們開始踏上雲端旅程的起點。在我們順利將應用程式移轉到容器化平台之後,我們可以透過下列指標,來檢驗我們是否能得到雲原生應用程式的好處。
(1) 你是否可以因應不同的需求量任意地配置雲平台的資源以滿足應用上的需求
這個衡量的指標,說明的是我們的應用程式是否可以動態地擴充,這時我們就會檢視應用程式是否具備《狀態性》。
無狀態(Stateless):表示應用程式並未採用記憶體和硬碟來儲存狀態和日誌,因此可以將應用部署到一個全新的環境中。
有狀態 (Stateful):表示應用狀態將依賴於本地的運行環境,因此無法將應用隨意部署到其他環境,不能隨意的擴展。
所以,假設你檢查之後應用程式屬於《有狀態》的服務,那麼我們就必須調整應用程式的架構,讓他不依賴於本地運行環境來決定其狀態。方法不外乎就是將需要留存於本地的資訊,移轉到第三方的儲存體,例如:資料庫或是 Redis 等相關的中介軟體。藉此,讓應用程式滿足無狀態可任意擴展的狀態。
(2) 應用程式本身是否具備多租戶的能力
多租戶(multi-tenancy)是指一個系統或應用程式能夠支援多個不同的租戶或使用者,每個租戶或使用者可以獨立地設定和管理自己的資源、數據和安全性,同時共享同一個系統或應用程式的基礎架構和資源。
在雲原生應用中,多租戶架構可以讓不同的企業、組織或客戶共享一個系統或應用程式,從而減少基礎架構的成本和管理負擔。這種架構還可以使系統更加靈活和可擴展,因為不同的租戶可以根據自己的需求和資源使用情況來分配和調整自己的資源。同時,多租戶架構也需要考慮如何保護每個租戶的數據和安全性,以確保系統的可靠性和穩定性。
(3) 雲原生應用程式具備自我恢復能力 (容錯能力)
雲原生自我修復是指雲原生應用在運行過程中,能夠自動偵測和解決可能的錯誤和故障,並恢復到正常運行狀態的能力。這種能力通過自動化的監控、分析和回應機制實現,可以大幅降低系統管理和維護的負擔,同時提高系統的可用性和可靠性。
雲原生自我修復能力主要包括以下幾個方面:
1. 自動監控和偵測:系統能夠自動收集和分析數據,並及時偵測和識別可能的錯誤和故障。
2. 自動回應和處理:系統能夠根據預設的規則和策略,自動回應和處理錯誤和故障,例如重啟應用程式、調整資源分配等。
3. 自動恢復和重建:系統能夠在發生災難性錯誤或故障時,自動恢復和重建數據和應用程式,以保護系統的可用性和穩定性。
通過這些能力,雲原生自我修復可以使系統更加穩定和可靠,同時減少系統管理和維護的工作量和成本。
(4) 雲原生應用程式具備《自動化部署》能力
雲原生自動化部署機制指的是利用自動化技術和相關工具,將應用程序及其相關的基礎設施、服務等自動化部署到雲原生環境中的過程。這種部署方式通常會涉及使用容器、叢集管理工具、自動化配置管理工具等技術,以實現應用程序和基礎設施的自動化部署、擴展和管理。透過這種自動化部署機制,可以大幅降低部署時間和成本,提高應用程序的可靠性和可擴展性,同時還能夠更容易地應對變化和挑戰。
(5) 針對雲原生應用應該具備的應用程式管理能力
1. 自動化管理:雲原生應用程式需要支援自動化管理,包括自動化部署、擴展、維護和修復等功能,進而提高系統的可靠性和可用性。
2. 監控管理:對雲原生應用程式的監控需要全面、深入,包括監控應用程序的運行狀態、資源利用率、性能指標等,從而能夠及時發現和解決問題。
3. 安全管理:在雲原生應用程式中,需要結合容器和微服務的特性,強化對應用程式的安全管理,包括控制訪問權限、防範安全漏洞和保護數據等。
4. 統一管理:需要具備統一管理的能力,包括統一管理應用程序、數據和基礎設施,從而可以實現更高效、更一致的管理。
5. 故障管理:對雲原生應用程式的故障需要有快速反應和修復的能力,需要支持故障自動檢測、自動修復等功能。
6. 優化管理:需要支持優化管理,包括自動優化資源利用率、自動調整運行環境等,從而能夠更好地滿足不斷變化的需求和挑戰。
(6) 雲原生應用程式必須具備《隨處可行》(任意部署的能力)
雲原生應用的任意部署能力指的是應用程式可以在任何基礎架構上運行,並且可以自由地部署到任何雲端環境中,而不受特定的基礎架構或雲端平台的限制。這種能力是雲原生應用程式的一個關鍵特性,可以大大提高應用程式的靈活性和可攜性,從而能夠更好地應對不斷變化的需求和挑戰。
具有任意部署能力的雲原生應用程式通常是基於容器化技術來實現的,這使得應用程式可以在不同的基礎架構上運行,而不需要進行重寫或重新配置。同時,透過容器化,可以實現應用程式的快速部署、擴展和管理,從而提高系統的靈活性和可擴展性。
在實際應用中,具有任意部署能力的雲原生應用程式還需要考慮與不同雲端平台和基礎架構的兼容性,以確保應用程式能夠在不同的環境中順利運行。
雲原生的技術賦予現今的開發人員得以將應用程式建置並執行於任何現代化的雲平台之上,例如:公有雲、私有雲及混合雲等。容器化技術、服務網格 (Service meshes)、微服務以及 Web API 等就是雲原生技術的範例,這些機制將使得鬆散耦合的系統具備彈性、可管理性與可觀察性。結合強大完善的自動化工具,使得開發人員得以頻繁地修改應用程式,縮短交付的週期。
透過上述的六個評估指標,可以協助我們判斷目前我們的處境,也可以針對這些狀況來思考相對的改進措施或是要導入的工具。還有一個指標是我沒放在上面的,叫做雲原生應用程式是分散式系統,其實他指的就是用微服務來實踐可能是一個好的概念。不過,這進一步又牽扯到服務的拆解等相關議題,就先不列在這個早期的階段。畢竟應用程式好好的,也可以應付複雜的需求,所以先不要把事情搞複雜了,維持簡單是一件好事。