1. 程式人生 > 實用技巧 >分散式SQL資料庫新的演變方向

分散式SQL資料庫新的演變方向

資料庫體系結構發展的下一步是分散式SQL。在這裡看看一些特徵。

隨著各個組織先後將其業務轉向雲端環境時,他們很快地意識到:在一些最關鍵的應用背後,那些舊式的關係型資料庫不但限制了遷移的速度,而且根本無法有效地實現靈活的業務擴充套件。許多企業既希望保持諸如Oracle、SQL Server、Postgres和MySQL之類關係型資料庫的可靠性,又能夠享受到雲服務所帶來的規模效應、以及全域性穩定性等“紅利”。

為了滿足此類需求,人們開始轉向使用NoSQL資料庫。但是由於NoSQL並非完全為提供真正的一致性而設計的,因此它無法作為事務型資料庫而使用。當然,最近有一些NoSQL解決方案聲稱能夠提供“ACID事務”。不過,它們無法提供諸如:財務分帳、庫存控制、以及身份管理等關鍵任務所需的隔離級別。

分散式SQL–一種新的資料庫

2012年,Google發表了一篇有關Spanner的論文。文中介紹了一種全新的基於分散式系統的,且可以全球性擴充套件的分佈資料庫。總的說來,Google Cloud Spanner是一種可擴充套件的、多版本的、同步複製(synchronously-replicated)型資料庫。它是第一個能夠在全球範圍內分發資料,並支援外部一致性(externally-consistent)的分散式事務的系統。

下面我們此基礎上,一起來具體討論此類分散式SQL的基本相關概念,特別是如何實現可擴充套件性和一致性的。通常,為了能夠在分散式環境中真正具有可擴充套件性,分散式SQL資料庫具有如下七種核心特徵:

1.可擴充套件

正如我們無需繁重的準備就能夠實現擴充套件式計算那樣,分散式SQL資料庫能夠在不增加操作複雜性的情況下,適應雲端環境的無縫擴充套件。也就是說,它具有在多個分散式參與者之間均勻分佈資料的能力。

2.一致性

分散式SQL資料庫必須在分散式環境中提供高度的隔離性。雲端環境往往是由各種分散式系統和微服務所組成,而不同的呼叫和操作可能會指向同一塊資料,因此我們很難保證事務一致性。分散式SQL資料庫除了能夠調節資源的爭用,還能夠提供與單例項資料庫相同的事務隔離級別。

3.彈性

分散式SQL資料庫能夠在無需任何外部工具的條件下,提供最高級別的彈性。憑藉著雲服務為我們的業務所提供持續線上環境,分散式資料庫可以將故障恢復的用時減到最少,並且無需任何外部配置,即可自動化地複製資料。

4.異地複製

由於雲服務能夠以一種可接受的服務水平,將使用者的業務觸達全球的各個角落,因此分散式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的一個切入口進行試用。

原文轉自:http://suo.im/61qgLg 作者:陳峻