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