對(duì)于許多組織來(lái)說(shuō),一個(gè)日益增長(zhǎng)的趨勢(shì)是DevOps團(tuán)隊(duì)支持業(yè)務(wù)目標(biāo)和戰(zhàn)略。在這種軟件開發(fā)重點(diǎn)的轉(zhuǎn)變中,開發(fā)團(tuán)隊(duì)在差異化服務(wù)產(chǎn)品甚至顛覆、最終改變行業(yè)方面發(fā)揮著關(guān)鍵作用。
因此,應(yīng)用程序架構(gòu)師不太關(guān)心封裝在單體應(yīng)用程序中的大規(guī)模工作流。今天的問(wèn)題通常圍繞著DevOps團(tuán)隊(duì)必須做些什么來(lái)實(shí)現(xiàn)所需的敏捷級(jí)別(通過(guò)大規(guī)模使用云原生平臺(tái)有節(jié)奏地部署軟件)——這在不久前是聞所未聞的。
得益于敏捷實(shí)踐和全新的云原生基礎(chǔ)設(shè)施,開發(fā)團(tuán)隊(duì)可以每天部署代碼幾次,而不是每幾個(gè)月(甚至更長(zhǎng)時(shí)間)部署一次。
云本原生應(yīng)用程序開發(fā)的好處
與使用傳統(tǒng)的、單體的應(yīng)用程序開發(fā)實(shí)踐所開發(fā)的應(yīng)用程序不同,云原生應(yīng)用程序由于其多功能性,可以更小、更靈活,并且容易與其他應(yīng)用程序和服務(wù)集成。許多開發(fā)人員還可以開發(fā)屬于更廣泛生態(tài)系統(tǒng)的應(yīng)用程序或服務(wù)。
目標(biāo)是使部署持續(xù)的快速和健壯。最終的測(cè)試是,這些敏捷部署是否能夠在規(guī)模上滿足最終用戶的需求,并且比競(jìng)爭(zhēng)產(chǎn)品更好。在無(wú)狀態(tài)容器環(huán)境中快速一致地部署數(shù)據(jù)和網(wǎng)絡(luò)時(shí),可能會(huì)出現(xiàn)無(wú)法預(yù)見的問(wèn)題,因此,組織必須優(yōu)先考慮在云原生世界中高效地管理和擴(kuò)展數(shù)據(jù)和網(wǎng)絡(luò)。
管理容器中的持久存儲(chǔ)
筆者經(jīng)常發(fā)現(xiàn),組織在進(jìn)行云原生遷移時(shí)面臨的一個(gè)主要障礙是如何在暫態(tài)的容器環(huán)境中管理有狀態(tài)應(yīng)用程序的數(shù)據(jù)。
在為云原生架構(gòu)開發(fā)和部署軟件時(shí),開發(fā)人員必須始終了解他們創(chuàng)建和分發(fā)的代碼將如何在組織的運(yùn)維中進(jìn)行交互。容器和微服務(wù)為開發(fā)人員提供了難以置信的部署通用性。由于底層架構(gòu)的無(wú)狀態(tài)性,它們可以立即擴(kuò)展和減少代碼部署。然而,當(dāng)涉及到數(shù)據(jù)放置時(shí),維護(hù)數(shù)據(jù)持久性、穩(wěn)定性和安全性可能會(huì)帶來(lái)挑戰(zhàn),特別是當(dāng)應(yīng)用程序架構(gòu)師使用可能存在于多個(gè)位置的代碼和微服務(wù)時(shí)。
在最初使用容器的新興DevOps環(huán)境中,一個(gè)簡(jiǎn)單的策略可能是為其CI/CD管道、Git存儲(chǔ)庫(kù)或應(yīng)用程序附加一個(gè)網(wǎng)絡(luò)文件系統(tǒng)(NFS)。盡管如此,正如我們將在下面看到的,數(shù)據(jù)可移植性、彈性和動(dòng)態(tài)供應(yīng)/取消供應(yīng)可能會(huì)變得繁瑣和不合標(biāo)準(zhǔn)。使用不可共享且具有潛在故障點(diǎn)和數(shù)據(jù)安全威脅的專有云存儲(chǔ)基礎(chǔ)設(shè)施,可能會(huì)出現(xiàn)類似問(wèn)題。
簡(jiǎn)言之,在云原生之旅開始之前,擁有一個(gè)持久存儲(chǔ)層可以避免麻煩和回溯。
持久存儲(chǔ)應(yīng)該如何工作
解決無(wú)狀態(tài)環(huán)境中應(yīng)用程序開發(fā)和部署的持久存儲(chǔ)難題的一種方法是采用與容器平臺(tái)集成的存儲(chǔ)層。
當(dāng)開發(fā)人員使用Kubernetes編排器使他們更容易為項(xiàng)目創(chuàng)建資源時(shí),理想情況下持久存儲(chǔ)層應(yīng)該由動(dòng)態(tài)存儲(chǔ)平臺(tái)組成。開發(fā)人員應(yīng)該有信心,存儲(chǔ)層也會(huì)符合應(yīng)用程序部署的數(shù)據(jù)安全性和彈性要求。
通過(guò)一個(gè)可行的軟件定義的存儲(chǔ)平臺(tái),開發(fā)團(tuán)隊(duì)可以動(dòng)態(tài)地定義和調(diào)整項(xiàng)目的數(shù)據(jù)需求,而不是使用NFS掛載手動(dòng)完成此過(guò)程。而且,他們不需要依賴存儲(chǔ)管理員來(lái)提供存儲(chǔ),他們可以根據(jù)需要更改存儲(chǔ)配置。
同樣,對(duì)于以塊協(xié)議(如SQL或NoSQL數(shù)據(jù)庫(kù))存儲(chǔ)數(shù)據(jù)的應(yīng)用程序,一些組織可能傾向于采用服務(wù)提供商的專有解決方案。但是,這樣會(huì)限制跨不同的多云或區(qū)域提供存儲(chǔ)可用性的能力,并且會(huì)將開發(fā)人員鎖定到單個(gè)提供商的解決方案中。
開源軟件定義的存儲(chǔ)允許跨許多不同類型的基礎(chǔ)設(shè)施(包括裸機(jī)、虛擬機(jī)以及公有云和私有云環(huán)境)進(jìn)行持久和可移植的存儲(chǔ)。數(shù)據(jù)聯(lián)合可以跨混合和多云環(huán)境進(jìn)行,因此開發(fā)人員可以根據(jù)需要放置敏感數(shù)據(jù),并集成來(lái)自各種多云部署的應(yīng)用程序和微服務(wù)。
對(duì)于人工智能(AI)和機(jī)器學(xué)習(xí)(ML)等大規(guī)模分析應(yīng)用程序,數(shù)據(jù)科學(xué)家通常必須管理來(lái)自多個(gè)位置和設(shè)備的大量數(shù)據(jù)增量。另一個(gè)例子是來(lái)自邊緣設(shè)備和物聯(lián)網(wǎng)資源。必須在整個(gè)數(shù)據(jù)生命周期中無(wú)縫地提供從設(shè)備邊緣到遠(yuǎn)程staging,再到核心系統(tǒng)的數(shù)據(jù)聚合和分發(fā)。通常,不同類型的事件需要不同的存儲(chǔ)協(xié)議,從對(duì)象到塊再到文件。持久存儲(chǔ)層功能必須可用,以處理這些非常動(dòng)態(tài)和多樣化的存儲(chǔ)需求。
最終,開發(fā)團(tuán)隊(duì)必須能夠依靠一個(gè)標(biāo)準(zhǔn)化的平臺(tái),通過(guò)一個(gè)單獨(dú)的API,在經(jīng)常是多樣的、要求很高的環(huán)境(包括多云、裸機(jī)和虛擬機(jī))中自動(dòng)化存儲(chǔ)管理。當(dāng)開發(fā)人員需要根據(jù)需要縮減或重新部署時(shí),存儲(chǔ)層還應(yīng)提供顯著的故障轉(zhuǎn)移優(yōu)勢(shì)。它還需要非常靈活,因此,開發(fā)人員可以通過(guò)提供幾乎零延遲來(lái)定義他們需要什么。
云原生持久存儲(chǔ)提供了這些功能,并為DevOps團(tuán)隊(duì)帶來(lái)了顯著的靈活性和可移植性。它可以為云原生環(huán)境中的軟件部署提供靈活性,同時(shí)使開發(fā)人員能夠自由地管理自己的存儲(chǔ)需求。