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