構建彈性、可擴展的云原生應用程序
云原生應用設計使軟件工程師能夠專注于滿足客戶需求,這是一種解決方案,可以在使用案例層面上利用。
在1986年,我搬到科羅拉多州博爾德市去為我叔叔的初創公司工作。第一天到達辦公室時,他幫我找了一張附有 Compaq Portable 計算機的桌子。系統頂部放著一本關于使用 dBase II 的書。我的任務是為他的公司建立一個跟蹤訂單的應用程序。我叔叔知道我對計算機很感興趣,我迫不及待地想要開始工作。這成為我學習微型計算機時代應用程序構建的第一次經歷。流程非常簡單:
- 記錄所需的需求。
- 創建滿足定義需求的設計。
- 構建和調試解決方案。
- 驗證解決方案是否按預期工作。
- 找出如何分發解決方案。
- 要求客戶采用并使用解決方案。
盡管我們目前在 Web2 和 Web3 世界中構建應用程序和服務,但我通常將這個時代稱為“無 Web”應用程序設計時代。
幾年后,我記得在軟盤上分發基于 Turbo Pascal 的應用程序,供分布在美國各地的保險代理使用。后來,應用程序存儲在放置在企業數據中心的文件服務器上。Web1 迭代還要幾年才出現。
2023年容器技術趨勢展望
DZone 的 2023 年容器技術趨勢報告將探討容器的當前狀態、全球容器化戰略的關鍵趨勢和進展,以及現代化軟件架構的建設性內容。
盡管大多數應用程序開發生命周期步驟并沒有真正改變,但云服務提供商帶來了一些重要的因素:
- 采用集中化方法。
- 提高可伸縮性。
- 應用程序和服務的彈性。
所有這些方面都是云原生應用的優勢所在。
什么是云原生?
維基百科定義云原生計算為使用云服務“在公有云、私有云和混合云等現代動態環境中構建和運行可擴展的應用程序”。隨著公司和初創企業渴望擺脫維護數據中心的業務,轉向云端成為首要任務。
云原生應用不僅僅是在云中運行的應用程序。一個關鍵區別是應用程序如何設計成在云中本地運行。采用容器、無服務器和微服務的方式提供了易于從一個環境部署到另一個環境的解決方案,同時提供了橫向擴展和多區域支持。
由于硬件層與代碼庫分離,云原生應用可以輕松實現縱向擴展。
云原生方法
采用云原生方法使軟件工程師能夠將應用程序拆分為多個方面,并使用通用方法來處理每個方面:
- 無服務器——將基于事件驅動的請求轉移到函數式 Lambda 中進行處理。
- 微服務——將大型應用程序拆分為較小的處理單元。
- 容器——將應用程序打包成獨立的多層容器以進行分發。
對于每個方面,云服務提供商提供可增強體驗的附加組件。一些常見的示例包括:
- API 網關——為服務提供保護,并處理常見組件(如授權請求)。
- 自動擴展——根據預配置的閾值進行擴展和收縮。
- 緩存——將請求的信息存儲在基于內存的緩存中,以避免較長時間運行的應用程序請求。
- 故障轉移——自動將流量路由到用于處理的次要節點。
- 文件存儲——無限可擴展且性能卓越的對象存儲。
- 負載均衡——將請求分發到位于不同地理位置的實例。
- 編排——容器解決方案在大規模上自動化、擴展和管理。
- 持久化——使用基于 SQL 和 NoSQL 的數據存儲選項。
- 機密管理——避免高度敏感信息的泄露。
由于云原生方法可以在最小粒度上進行架構,因此得到的云原生應用可以針對設計的每個方面提供最佳解決方案,如圖3所示:
云原生應用由多個云服務功能構建
云原生的好處
云原生應用構建方法使軟件工程師能夠根據用例級別使用最佳技術來構建解決方案,以滿足客戶的業務需求。這意味著一個用例可以采用基于事件驅動的無服務器解決方案,而另一個用例可以利用由 SaaS 驅動的持久性層支持的微服務。
云原生應用允許按需調整應用程序的組件。這意味著對一個微服務的需求不需要為其他微服務分配相同水平的資源。此外,組件實例可以在相同或不同地理區域水平擴展。
由于硬件層與應用程序層分離,設計云原生應用的人可以專注于滿足業務需求和企業目標。
與設計在本地數據中心運行的應用程序相比,這些優點為云原生應用提供了強大的優勢。當考慮到備份計劃或災難恢復等概念時,差異只會變得更大。
云原生的挑戰
盡管云原生計算看起來是應用程序設計的天堂,但也存在一些需要考慮的挑戰。對于云原生計算的主要批評是潛在的高成本問題。
一些常見例子包括:
- 無法清除的原型組件。
- 自動創建快照而沒有建立保留計劃。
- 在存在更便宜選擇的情況下過度分配硬件資源。
大多數云服務提供商都提供了出色的工具來預測和分析成本,但必須廣泛采用標準才能使成本控制成為優先事項。在全球多個地區工作時,了解現有的法規非常重要,特別是涉及敏感數據。未能遵守可能會導致處罰或費用。
云提供商提供了多區域故障和災難恢復保護的能力。然而,這些高級概念在設計和實施上可能具有挑戰性,既要實現自動的故障處理,又要保護免受意外數據問題的影響。
結論
作為軟件工程師,我們在應用程序設計方面已經取得了長足的進步。然而,對我來說,唯一沒有改變的方面就是當我有機會設計和構建一個新的應用程序時,我仍然感到非常興奮。
我一直專注于以下使命宣言,我認為適用于任何 IT 專業人員:
將時間集中在提供能夠擴展你的知識產權價值的功能/特性上。利用框架、產品和服務處理其他事項。
云原生應用設計完全符合我的個人使命宣言,因為它使軟件工程師能夠專注于滿足客戶的業務需求:允許在每個用例級別使用最佳解決方案。然而,就像我們在生活中做出的每個決策一樣,我們必須始終注意相關成本。