譯者 | 李睿
審校 | 梁策 孫淑娟
如今,“云原生”這一概念已多用來表示應(yīng)用邏輯和基礎(chǔ)設(shè)施(包括數(shù)據(jù)庫)的最佳實踐集合。然而,早在云計算或云原生概念出現(xiàn)幾十年前,許多支持應(yīng)用程序運行的數(shù)據(jù)庫就已存在,只是這些傳統(tǒng)解決方案的數(shù)據(jù)引力限制了應(yīng)用程序和工作負載的移動能力。隨著企業(yè)將業(yè)務(wù)遷移到云端,數(shù)據(jù)存儲方法該怎樣發(fā)展?需不需要云原生數(shù)據(jù)庫?云原生數(shù)據(jù)庫又意味著什么?以下我們來一一解答。
什么是云原生?
要定義“云原生”,需要先來明白什么是“原生”(Native)。對于個人而言,原生二字可能會讓你聯(lián)想到母語、本國或本地之類的概念,亦或是自然界里野生動物的原生棲息地,包括各個物種如何適應(yīng)所處環(huán)境等。因此,我們也從這里出發(fā)來理解云原生的含義。
以下是云原生計算基金會(CNCF)對該術(shù)語的定義: “云原生技術(shù)使企業(yè)能夠在公共云、私有云和混合云等現(xiàn)代動態(tài)環(huán)境中構(gòu)建和運行可擴展的應(yīng)用程序,容器、服務(wù)網(wǎng)格、微服務(wù)、不可變基礎(chǔ)設(shè)施以及聲明性API都是典型例子。這些技術(shù)使松散耦合的系統(tǒng)具有彈性、可管理性和可觀察性,輔以強大的自動化,工程師可以最少的工作量進行高頻預(yù)測性更改?!?/p>
這一定義范圍相當寬泛,但來定義云原生數(shù)據(jù)庫還是有些吃力,就如CNCF景觀圖數(shù)據(jù)庫部分所示:
數(shù)據(jù)庫只是龐大的云計算領(lǐng)域中的一小部分
仔細觀察就會發(fā)現(xiàn),這里包含各種各樣的產(chǎn)品:如傳統(tǒng)的關(guān)系數(shù)據(jù)庫和NoSQL數(shù)據(jù)庫,它們支持各種不同的數(shù)據(jù)模型,包括鍵/值、文檔和圖形。此外還包括現(xiàn)有數(shù)據(jù)庫之上的分層聚類、查詢或模式管理技術(shù)。這還不包括CNCF領(lǐng)域的其他有關(guān)類別,例如用于數(shù)據(jù)移動的流式傳輸和消息傳遞,或用于持久性的云原生存儲。
這些數(shù)據(jù)庫中哪些是云原生呢?除了專為云設(shè)計的數(shù)據(jù)庫,是否也包括那些可以適應(yīng)云中工作的數(shù)據(jù)庫?在比爾·懷爾德 (Bill Wilder) 2012年出版的《云架構(gòu)模式》(Cloud Architecture Patterns)一書中,他提出了一個有趣觀點,把“云原生”定義為:“任何經(jīng)過架構(gòu)而能充分利用云平臺的應(yīng)用程序”。
根據(jù)這個定義,云原生數(shù)據(jù)庫就是那些經(jīng)過架構(gòu),能充分利用底層云基礎(chǔ)設(shè)施的數(shù)據(jù)庫。但是,這樣定義也會有爭議。
為什么要關(guān)心數(shù)據(jù)庫是否是云原生?
或者換個方式來問,云原生數(shù)據(jù)庫有什么優(yōu)勢?其中,推動云計算普及的兩個主要因素包括:成本和上市時間。
- 成本——即用即付的能力對于提高云采用率至關(guān)重要(但不意味著云計算價格低廉或成本管理簡單)。
- 上市時間——快速啟動基礎(chǔ)設(shè)施以進行原型設(shè)計、開發(fā)、測試和交付新應(yīng)用程序和功能的能力(但不意味著云開發(fā)和運營容易)。
就像堆棧選擇中的其他因素一樣,這些目標也適用于數(shù)據(jù)庫選擇。
云原生數(shù)據(jù)庫的特征是什么?
現(xiàn)在,我們可以重新審視CNCF的定義,以有助于成本和上市時間目標實現(xiàn)來歸納出云原生數(shù)據(jù)庫的特征:
- 可擴展性——系統(tǒng)必須能夠動態(tài)增加容量,以吸收額外的工作負載。
- 彈性——必須能夠縮減規(guī)模,以便用戶只為所需資源付費。
- 恢復(fù)能力——系統(tǒng)抵受故障,必須保障不丟失數(shù)據(jù)。
- 可觀察性——能夠跟蹤活動,以及運行狀況檢查和處理故障轉(zhuǎn)移。
- 自動化——將操作任務(wù)落實為可重復(fù)邏輯,以降低出錯可能。這一特性最難實現(xiàn),但對于實現(xiàn)大規(guī)模高交付速度至關(guān)重要。
云原生數(shù)據(jù)庫旨在落實這些要求,這讓它們與那些可以通過一些調(diào)整部署到云中的數(shù)據(jù)庫——“云就緒”數(shù)據(jù)庫區(qū)分開來。
什么最能代表云原生數(shù)據(jù)庫?
本文以Apache Cassandra?為例來審視云原生數(shù)據(jù)庫的定義。雖然Cassandra在開發(fā)時“云原生”一詞尚未普及,但由于受到了公共云基礎(chǔ)設(shè)施的啟發(fā)(例如亞馬遜AWS的Dynamo論文和谷歌公司的BigTable),它在架構(gòu)影響上有許多相似之處。因為這層關(guān)系,Cassandra體現(xiàn)了以下原則:
- Cassandra通過添加節(jié)點展示了橫向可擴展性,并且可以彈性縮減,以在高峰負載期之外釋放資源。
- 在默認情況下,Cassandra是一個AP系統(tǒng),也就是說,它如CAP定理中所述的那樣優(yōu)先考慮可用性和分區(qū)容錯性,而不是一致性。Cassandra的內(nèi)置復(fù)制、無共享架構(gòu)和自我修復(fù)功能有助于保證彈性。
- Cassandra節(jié)點公開日志記錄、指標和查詢跟蹤,從而實現(xiàn)可觀察性。
- 自動化是Cassandra最具挑戰(zhàn)性的方面,這也是數(shù)據(jù)庫常碰到的一個問題。
雖然Cassandra集群自動化的初始部署比較簡單,但其他任務(wù)(例如擴展或升級)可能非常耗時且難以自動化。畢竟,即使是對單節(jié)點數(shù)據(jù)庫操作也很有挑戰(zhàn),許多數(shù)據(jù)庫管理員也都認同這點。幸運的是,K8ssandra項目為在Kubernetes上部署Cassandra提供了最佳實踐,其中包括在交付運營(“Day 2”)后的自動化操作方面取得了重大進展。
云原生數(shù)據(jù)庫是否必須在Kubernetes上運行?
有關(guān)Kubernetes,當人們談?wù)撛浦械臄?shù)據(jù)庫時,實際上是在說需要某種存儲的有狀態(tài)工作負載。但在云計算世界中,有狀態(tài)是個麻煩事。數(shù)據(jù)引力相當棘手——由于法規(guī)和法律的限制,數(shù)據(jù)可能難以移動,而且成本可能會變得非常高昂。
由于最初不是為有狀態(tài)工作負載而設(shè)計,在開始使用Kubernetes部署容器化應(yīng)用程序時,其面臨的挑戰(zhàn)有增無減。目前出現(xiàn)了推動部署數(shù)據(jù)庫在Kubernetes上運行的新趨勢,以在單一平臺上運行整個堆棧來最大限度地提升開發(fā)和運營效率。Kubernetes對云原生數(shù)據(jù)庫有哪些額外要求呢?
(1)容器化
首先,數(shù)據(jù)庫必須在容器中運行。這聽起來顯而易見,但也需要做些工作。存儲必須外部化,內(nèi)存和其他計算資源必須適當調(diào)整,應(yīng)用程序日志和指標必須可用于基礎(chǔ)設(shè)施,以進行監(jiān)控和日志聚合。
(2)存儲
接下來,需要將數(shù)據(jù)庫的存儲需求映射到Kubernetes架構(gòu)。每個數(shù)據(jù)庫節(jié)點最起碼要提出一個持久卷聲明,Kubernetes可以使用它來分配具有適當容量和輸入/輸出(I/O)特征的存儲卷。數(shù)據(jù)庫通常使用Kubernetes狀態(tài)集進行部署,這有助于管理存儲卷到pod的映射,并保持一致、可預(yù)測的身份。
(3)自動化操作
最后,需要工具來管理和自動化數(shù)據(jù)庫操作,這當中包括安裝和維護。通常這由Kubernetes操作員模式實現(xiàn)。操作員模式本身是一個控制回路,它觀察Kubernetes資源的狀態(tài),并采取措施以助其實現(xiàn)。這樣的話,它們就類似于Kubernetes的內(nèi)置控制器,但關(guān)鍵區(qū)別在于它們了解特定域的狀態(tài),從而幫助Kubernetes做出更好決策。
例如,K8ssandra項目使用cass-operator,它定義了一個名為“Cassandra Datacenter”的Kubernetes自定義資源(CRD),由它來描述Cassandra集群每個頂級故障域的期望狀態(tài)。這比處理有狀態(tài)集或單個pod的抽象水平更高。
Kubernetes數(shù)據(jù)庫操作員通常有助于解答以下問題:
- 故障轉(zhuǎn)移期間會發(fā)生什么?(pod、磁盤、網(wǎng)絡(luò))
- 向外擴展時會發(fā)生什么?(pod重新安排)
- 如何執(zhí)行備份?
- 如何有效檢測和預(yù)防故障?
- 軟件如何升級?(滾動重啟)
結(jié)論
云原生數(shù)據(jù)庫是按可擴展性、彈性、韌性、可觀察性和自動化等云原生原則設(shè)計的數(shù)據(jù)庫。就如Cassandra所示,自動化通常是最終關(guān)卡,但在Kubernetes中運行數(shù)據(jù)庫可以有效助力企業(yè)朝著這一目標邁進。
原文標題:The Search for a Cloud-Native Databaseby,作者:Pieter Humphrey