分布式SQL數(shù)據(jù)庫新的演變方向
譯文【51CTO.com快譯】隨著各個組織先后將其業(yè)務(wù)轉(zhuǎn)向云端環(huán)境時,他們很快地意識到:在一些最關(guān)鍵的應(yīng)用背后,那些舊式的關(guān)系型數(shù)據(jù)庫不但限制了遷移的速度,而且根本無法有效地實現(xiàn)靈活的業(yè)務(wù)擴展。許多企業(yè)既希望保持諸如Oracle、SQL Server、Postgres和MySQL之類關(guān)系型數(shù)據(jù)庫的可靠性,又能夠享受到云服務(wù)所帶來的規(guī)模效應(yīng)、以及全局穩(wěn)定性等“紅利”。
為了滿足此類需求,人們開始轉(zhuǎn)向使用NoSQL數(shù)據(jù)庫。但是由于NoSQL并非完全為提供真正的一致性而設(shè)計的,因此它無法作為事務(wù)型數(shù)據(jù)庫而使用。當(dāng)然,最近有一些NoSQL解決方案聲稱能夠提供“ACID事務(wù)”。不過,它們無法提供諸如:財務(wù)分帳、庫存控制、以及身份管理等關(guān)鍵任務(wù)所需的隔離級別。
分布式SQL--一種新的數(shù)據(jù)庫
2012年,Google發(fā)表了一篇有關(guān)Spanner的論文。文中介紹了一種全新的基于分布式系統(tǒng)的,且可以全球性擴展的分布數(shù)據(jù)庫??偟恼f來,Google Cloud Spanner是一種可擴展的、多版本的、同步復(fù)制(synchronously-replicated)型數(shù)據(jù)庫。它是第一個能夠在全球范圍內(nèi)分發(fā)數(shù)據(jù),并支持外部一致性(externally-consistent)的分布式事務(wù)的系統(tǒng)(具體請參見--https://ai.google/research/pubs/pub39966)。
下面我們此基礎(chǔ)上,一起來具體討論此類分布式SQL的基本相關(guān)概念,特別是如何實現(xiàn)可擴展性和一致性的。通常,為了能夠在分布式環(huán)境中真正具有可擴展性,分布式SQL數(shù)據(jù)庫具有如下七種核心特征:
1.可擴展
正如我們無需繁重的準(zhǔn)備就能夠?qū)崿F(xiàn)擴展式計算那樣,分布式SQL數(shù)據(jù)庫能夠在不增加操作復(fù)雜性的情況下,適應(yīng)云端環(huán)境的無縫擴展。也就是說,它具有在多個分布式參與者之間均勻分布數(shù)據(jù)的能力。
2.一致性
分布式SQL數(shù)據(jù)庫必須在分布式環(huán)境中提供高度的隔離性。云端環(huán)境往往是由各種分布式系統(tǒng)和微服務(wù)所組成,而不同的調(diào)用和操作可能會指向同一塊數(shù)據(jù),因此我們很難保證事務(wù)一致性。分布式SQL數(shù)據(jù)庫除了能夠調(diào)節(jié)資源的爭用,還能夠提供與單實例數(shù)據(jù)庫相同的事務(wù)隔離級別。
3.魯棒性
分布式SQL數(shù)據(jù)庫能夠在無需任何外部工具的條件下,提供最高級別的魯棒性。憑借著云服務(wù)為我們的業(yè)務(wù)所提供持續(xù)在線環(huán)境,分布式數(shù)據(jù)庫可以將故障恢復(fù)的用時減到最少,并且無需任何外部配置,即可自動化地復(fù)制數(shù)據(jù)。
4.地理復(fù)制(Geo-replication)性
由于云服務(wù)能夠以一種可接受的服務(wù)水平,將用戶的業(yè)務(wù)觸達全球的各個角落,因此分布式SQL數(shù)據(jù)庫也能夠據(jù)此突破地域的限制。在復(fù)雜、廣泛、分散的地理環(huán)境中,它能夠進行分布處理和數(shù)據(jù)存儲,以滿足各地用戶的業(yè)務(wù)需求。
5.支持SQL
眾所周知,SQL是數(shù)據(jù)庫所使用的結(jié)構(gòu)化語言,也是所有應(yīng)用邏輯的默認語言。憑借著其通用性,我們不必重新培訓(xùn)開發(fā)人員,即可熟練地對接和調(diào)用數(shù)據(jù)庫資源。除了上面提到的Spanner,諸如Amazon Aurora、Yugabyte、FaunaDB和CockroachDB等都能夠支持SQL。
6.數(shù)據(jù)本地化
在分布式系統(tǒng)中,由于數(shù)據(jù)被分散到了各個地區(qū)的數(shù)據(jù)中心,因此應(yīng)用架構(gòu)師往往需要了解每個站點的位置,在程序邏輯上找到最近的位置,以便將需要調(diào)用的存儲數(shù)據(jù)綁定為應(yīng)用的一部分。那么,分布式SQL可以在其數(shù)據(jù)表中,基于某些字段對數(shù)據(jù)進行地理分區(qū),進而讓數(shù)據(jù)更接近用戶側(cè)。這就是所謂的數(shù)據(jù)庫的數(shù)據(jù)主權(quán)(data sovereignty)問題。據(jù)此,開發(fā)人員可以確保用戶對其信息的低延遲訪問,從而最大程度地減少數(shù)據(jù)在云端傳輸?shù)馁M用和流量的開銷。
7.多云(Multi-cloud)模式
分布式SQL數(shù)據(jù)庫的一個獨特特征是:半自治單元(semi-autonomous units),它們可以參與到較大的系統(tǒng)中。也就是說,每個單元都能夠自行部署,然后加入到CockroachDB集群之類更大的系統(tǒng)中。通過該特征,分布式SQL數(shù)據(jù)庫可以更好地擴展到真正的多云環(huán)境中,而不僅僅依賴于單個網(wǎng)絡(luò),來完成數(shù)據(jù)的分發(fā)。在此模式下,參與者(participant)的云服務(wù)類別將不再受到限制,它們可以位于任何地方,任何一種公共云、私有云、甚至是單個的本地(on-premise)實例。顯然,這對于我們在分布式混合與多云環(huán)境中的各類應(yīng)用來說,都是至關(guān)重要。
分布式SQL的基本要求
上述七項特征可謂分布式SQL在云端環(huán)境中所獨有的。但是,說到底它仍然是一種數(shù)據(jù)庫,因此也應(yīng)當(dāng)具備數(shù)據(jù)庫的如下基本功能:
- 可管理性:用戶可以使用一組命令行、或基于圖形化的工具,來輕松地安裝和配置目標(biāo)數(shù)據(jù)庫。用戶通過針對運行環(huán)境的控制、數(shù)據(jù)生命周期的管理、以及常規(guī)的備份與還原,以實現(xiàn)數(shù)據(jù)表的創(chuàng)建,schema的定義與實現(xiàn),索引與分區(qū)的設(shè)置,以及DDL的重建等。
- 可優(yōu)化:DBA可以深入了解數(shù)據(jù)庫在查詢響應(yīng)方面的性能,運用基于成本的優(yōu)化器(cost-based optimizer)等高級功能,進而實現(xiàn)查詢效率的優(yōu)化。
- 具有安全性:與企業(yè)的其他常用軟件類似,安全性是一個不容忽視的環(huán)節(jié)。數(shù)據(jù)庫應(yīng)提供認證、授權(quán)和可問責(zé)性,這樣的AAA機制。而且,此類功能不應(yīng)該只獨立數(shù)據(jù)庫內(nèi)部,而應(yīng)當(dāng)與具有身份管理和治理功能的集中式管控系統(tǒng)集成一起,以便對流轉(zhuǎn)在整個系統(tǒng)中各個級別的數(shù)據(jù)(包括表、行和列等級別)設(shè)置一致性的策略。
- 可集成:顯然,數(shù)據(jù)庫需要能夠通過經(jīng)過測試的、或已知的驅(qū)動程序,與前端應(yīng)用相集成,以實現(xiàn)批量獲取或?qū)С鰯?shù)據(jù)等服務(wù)。與此同時,數(shù)據(jù)庫還應(yīng)通過與ETL(Extract-Transform-Load)工具的配合使用,將捕獲到的數(shù)據(jù),與數(shù)據(jù)流分析、或云端存儲等更高級的服務(wù)相集成。
當(dāng)然,上述所謂“基本”功能要求,其實并不簡單,它們旨在提供更加成熟的、針對企業(yè)級應(yīng)用的數(shù)據(jù)庫。
總結(jié)
作為一種新興的類別和演變的方向,分布式SQL數(shù)據(jù)庫還需要在數(shù)據(jù)一致性和本地化等方面,進一步配合云端環(huán)境來不斷改進。畢竟,在嚴(yán)苛的生產(chǎn)環(huán)境中,此類數(shù)據(jù)庫會碰到更多有關(guān)性能和效率等方面的實際問題。
前文提到的CockroachDB,是一種云原生的分布式SQL數(shù)據(jù)庫。它可以幫助各種企業(yè)級應(yīng)用,將最基本的工作負載和一些關(guān)鍵性的任務(wù)遷移到云端,并實現(xiàn)了對于各種高級云端原生環(huán)境的策略編排。您可以作為了解分布式SQL的一個切入口進行試用。
原標(biāo)題:Distributed SQL: An Evolution of the Database ,作者: Jim Walker
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】