作者 | Gaurav Rishi
譯者 | 張鋒
審校 | Noe
隨著應(yīng)用容器化的速度加快,Day2服務(wù)已經(jīng)成為一個(gè)迫在眉睫的問題。這些Day2服務(wù)包括數(shù)據(jù)管理功能,如備份和災(zāi)難恢復(fù)以及應(yīng)用程序遷移。在這個(gè)云原生應(yīng)用容器化的新世界中,微服務(wù)通常部署在多個(gè)位置(區(qū)域、云、本地),同時(shí)使用多種數(shù)據(jù)服務(wù)(MongoDB、Redis、Kafka等)和存儲(chǔ)技術(shù)來(lái)存儲(chǔ)這些應(yīng)用狀態(tài)。
在這種環(huán)境中,傳統(tǒng)基礎(chǔ)設(shè)施或基于虛擬機(jī)管理程序的解決方案將很難發(fā)揮作用,那么為云原生應(yīng)用設(shè)計(jì)和實(shí)施這些數(shù)據(jù)管理功能的正確架構(gòu)是什么呢?你應(yīng)該如何分析存儲(chǔ)供應(yīng)商、數(shù)據(jù)服務(wù)供應(yīng)商和云供應(yīng)商提供的各種數(shù)據(jù)管理選項(xiàng)來(lái)確定適合你環(huán)境和需求的正確方法呢?本文深入探討了各種數(shù)據(jù)管理方法在一致性、存儲(chǔ)要求和性能等多個(gè)屬性上的優(yōu)缺點(diǎn)。
定義一個(gè)詞匯
首先,我們將解構(gòu)和簡(jiǎn)化技術(shù)棧以顯示數(shù)據(jù)可能在云原生應(yīng)用中的位置。
在考慮數(shù)據(jù)管理時(shí),我們可以在上圖中顯示的一個(gè)(或多個(gè))層上進(jìn)行操作。讓我們列舉這些層:
1、物理存儲(chǔ)
該層包括各種存儲(chǔ)硬件選型,可以將狀態(tài)存儲(chǔ)在非易失性存儲(chǔ)器中,并可選擇從NVMe和SSD設(shè)備到旋轉(zhuǎn)型磁盤甚至磁帶的物理介質(zhì)。它們有不同的外形尺寸,包括陣列和獨(dú)立機(jī)架服務(wù)器。
物理存儲(chǔ)可以位于:
- 在本地,你可能會(huì)遇到來(lái)自希捷、西部數(shù)據(jù)和美光等供應(yīng)商的存儲(chǔ)硬件。
- 在托管云提供商的數(shù)據(jù)中心中。雖然你可能永遠(yuǎn)不會(huì)接觸物理設(shè)備,但你知道它是云的基礎(chǔ)架構(gòu)一部分。
2、文件和塊存儲(chǔ)
該軟件層提供文件或塊級(jí)結(jié)構(gòu),以實(shí)現(xiàn)從底層物理存儲(chǔ)進(jìn)行高效的讀寫操作。在文件和塊這兩種情況下,底層存儲(chǔ)可以是獨(dú)立的(本地磁盤)或共享的網(wǎng)絡(luò)資源(NAS 或 SAN)。
- 塊存儲(chǔ)允許你從本地或遠(yuǎn)程磁盤創(chuàng)建具有低延遲并可通過iSCSI和FiberChannel等協(xié)議訪問的原始存儲(chǔ)卷。云供應(yīng)商上的塊存儲(chǔ)實(shí)現(xiàn)包括Amazon EBS和GCE 持久性磁盤。
- 文件存儲(chǔ)使用NFS和SMB等協(xié)議為文件語(yǔ)義和操作提供共享存儲(chǔ)。本地常見的文件存儲(chǔ)實(shí)現(xiàn)包括來(lái)自NetApp和Dell EMC的產(chǎn)品。云供應(yīng)商上的文件存儲(chǔ)實(shí)現(xiàn)包括 Amazon EFS、Google Cloud Filestore和Azure Files。
這一層通常提供快照功能,按照時(shí)間點(diǎn)創(chuàng)建卷的副本來(lái)進(jìn)行保護(hù)。此外,在 Kubernetes 環(huán)境中,該層提供容器存儲(chǔ)接口 (CSI) 驅(qū)動(dòng)程序來(lái)規(guī)范化API,讓上層可以使用這些API來(lái)調(diào)用快照功能。請(qǐng)注意,就所支持的功能而言,并非所有CSI實(shí)現(xiàn)都是相同的。
3、數(shù)據(jù)服務(wù)
這一層位于文件/塊存儲(chǔ)實(shí)現(xiàn)之上。它提供了各種數(shù)據(jù)庫(kù)實(shí)現(xiàn)以及日益流行的存儲(chǔ)類型,即對(duì)象(又名 blob)存儲(chǔ)。該層通常與應(yīng)用程序進(jìn)行交互,底層數(shù)據(jù)庫(kù)實(shí)現(xiàn)基于工作負(fù)載和業(yè)務(wù)邏輯來(lái)選擇。對(duì)于基于微服務(wù)的應(yīng)用程序,多語(yǔ)言持久性是一種規(guī)范,因?yàn)槊總€(gè)微服務(wù)都會(huì)為當(dāng)前的工作選擇最合適的數(shù)據(jù)服務(wù)。
一些數(shù)據(jù)庫(kù)類型和示例實(shí)現(xiàn)的子集包括:
- SQL數(shù)據(jù)庫(kù):MySQL、PostgreSQL、SQL Server
- NoSQL數(shù)據(jù)庫(kù):
- 鍵值存儲(chǔ):Redis、BerkeleyDB
- 時(shí)間序列數(shù)據(jù)庫(kù):InfluxDB 、Prometheus
- 圖數(shù)據(jù)庫(kù):Neo4j、 GraphDB
- 寬列存儲(chǔ):Cassandra、Azure Cosmos
- 文檔存儲(chǔ):MongoDB、CouchDB
- 消息隊(duì)列:Kafka、RabbitMQ、Amazon SQS
- 對(duì)象存儲(chǔ)1:Amazon S3、Google Cloud Storage、Minio
這些數(shù)據(jù)庫(kù)還有幾個(gè)托管實(shí)例,稱為數(shù)據(jù)庫(kù)即服務(wù) (DBaaS) 系統(tǒng)。這些通常包括上面列出的數(shù)據(jù)庫(kù)類別之一,有時(shí)可以提供自動(dòng)擴(kuò)展,同時(shí)滿足即服務(wù) ( -aaS ) 業(yè)務(wù)的消費(fèi)經(jīng)濟(jì)。DBaaS系統(tǒng)的示例包括 Amazon RDS、MongoDB Atlas和Azure SQL。
從數(shù)據(jù)保護(hù)的角度來(lái)看,每個(gè)數(shù)據(jù)庫(kù)實(shí)現(xiàn)都提供了一組特定的實(shí)用程序( PostgreSQL的pg_dump或WAL-E,MongoDB的mongodump等)來(lái)備份和恢復(fù)數(shù)據(jù)。值得注意的是,在一致性、恢復(fù)顆粒度和速度方面,許多實(shí)用程序具有不同的功能。無(wú)論它們是作為獨(dú)立實(shí)用程序提供還是作為即服務(wù)產(chǎn)品的一部分提供,通常僅限于特定的數(shù)據(jù)庫(kù)實(shí)現(xiàn),或者至多是一種數(shù)據(jù)庫(kù)類型。
4、有狀態(tài)應(yīng)用
應(yīng)用程序?qū)邮菢I(yè)務(wù)邏輯所在的地方,在云原生世界中,應(yīng)用程序通?;诂F(xiàn)代敏捷開發(fā)并作為分布式微服務(wù)實(shí)現(xiàn)。幾乎所有應(yīng)用程序都有一個(gè)需要持久化的狀態(tài)。雖然有多種存儲(chǔ)應(yīng)用程序狀態(tài)的模式,但我們需要在有狀態(tài)的 Kubernetes 應(yīng)用程序的上下文中將以下信息作為一個(gè)原子單元來(lái)持久化和保護(hù):
- 應(yīng)用程序數(shù)據(jù):跨各種數(shù)據(jù)服務(wù)、塊和文件存儲(chǔ)實(shí)現(xiàn)分布在多個(gè)容器上。
- 應(yīng)用程序定義和配置:應(yīng)用程序鏡像和相關(guān)的環(huán)境配置分布在各種 Kubernetes 對(duì)象中,包括ConfigMaps、Secrets等。
- 其他配置狀態(tài):包括CI/CD流水線狀態(tài)、發(fā)布信息和關(guān)聯(lián)的Helm部署元數(shù)據(jù)。
上圖為一個(gè)有狀態(tài)應(yīng)用程序的示例,它突出顯示了一些需要保護(hù)的組件和相關(guān)狀態(tài)。需要注意的是,對(duì)于實(shí)際部署,應(yīng)用程序由數(shù)百個(gè)這樣的底層組件組成。此外,在云原生架構(gòu)中,保護(hù)的原子性單元需要是應(yīng)用程序與底層數(shù)據(jù)服務(wù)或存儲(chǔ)基礎(chǔ)設(shè)施層。如前所述,這是因?yàn)閼?yīng)用程序的狀態(tài)包括分布在多個(gè)物理或虛擬節(jié)點(diǎn)和數(shù)據(jù)服務(wù)中的應(yīng)用程序數(shù)據(jù)、定義和配置。
結(jié)論
從備份/恢復(fù)和應(yīng)用程序可移植性的角度來(lái)看,一個(gè)好的數(shù)據(jù)管理解決方案需要將整個(gè)應(yīng)用程序視為原子性單元,這使得傳統(tǒng)以管理程序?yàn)橹行牡慕鉀Q方案不再適用。我們還展示了一個(gè)簡(jiǎn)單的技術(shù)棧圖,從各種數(shù)據(jù)服務(wù)、塊和文件存儲(chǔ)以及跨本地和云實(shí)現(xiàn)物理存儲(chǔ)的角度顯示應(yīng)用程序狀態(tài)實(shí)際所在的位置。這定義了一個(gè)基本范疇,使我們能夠深入了解云數(shù)據(jù)管理的操作層級(jí)。
附注
有些人可能爭(zhēng)辯認(rèn)為對(duì)象存儲(chǔ)應(yīng)該與文件/塊屬于同一層。在本文中,對(duì)象存儲(chǔ)將被視為另一種具有鍵值接口的數(shù)據(jù)服務(wù),如果需要,可以在Kubernetes中運(yùn)行。
原文鏈接:https://dzone.com/articles/demystifying-cloud-native-data-management-layers-of-operation
譯者介紹
張鋒,51CTO社區(qū)編輯,長(zhǎng)期從事技術(shù)顧問工作,專注于運(yùn)維/云原生領(lǐng)域,精通網(wǎng)絡(luò)疑難故障分析,有很豐富的大型銀行運(yùn)維工具建設(shè)實(shí)踐經(jīng)驗(yàn)。