NewSQL 究竟新在哪裡?

Charles0429發表於2019-03-01

近幾年來,資料庫領域出現了一種新的關聯式資料庫型別,稱為NewSQL,例如,Google的Spanner,Amazon的Aurora等等,這些資料庫相對於傳統資料庫來講,區別在哪裡?What's Really New with NewSQL?給了很好的總結,本篇文章主要是總結該論文的觀點,最後會有一個簡單的討論部分,全文的組織結構如下:

  • 為什麼需要NewSQL?
  • NewSQL的分類
  • NewSQL的技術挑戰有哪些?
  • 討論

本文收錄在我的github中papers專案,papers專案旨在學習和總結分散式系統相關的論文。
同時本文也同步釋出在個人部落格oserror.com

為什麼需要NewSQL?

資料庫的發展通常是隨著業務需求的變化,在2000年左右,隨著網際網路的興起,有許多同時線上的使用者,這對資料庫領域帶來了非常大的挑戰,資料庫通常會成為瓶頸,所以,此時業務針對資料庫的需求,主要體現在可擴充套件上面。

這時期資料庫的擴充套件性,往往採用如下兩種方案:

  1. 垂直擴充套件:使用更好的硬體,來做資料庫的伺服器
  2. 水平擴充套件:採用中介軟體,做sharding的方式,即分庫分表的方式

垂直擴充套件中使用更好的硬體意味者成本高,並且更換硬體後,需要把資料從老的機器遷移到新的機器,中間可能需要停服務,因此往往採用水平擴充套件,例如,Google's MySQL-based cluster。

採用中介軟體方式也有缺點,中介軟體一般要求輕量級,簡單資料庫操作可以搞定,但是,如果需要做分散式事務或者聯表操作,會非常複雜,通常這些邏輯會放到應用層來做。

後續,NOSQL興起,主要有幾個原因:

  1. 傳統關聯式資料庫更傾向於一致性,而在效能和可用性比較差
  2. 全功能的關係型資料庫太重
  3. 關係模型對於簡單的查詢太重,不必要

NOSQL以Google’s BigTable 和 Amazon’s Dynamo為代表,開源版對應為HBase和Cassandra。

NOSQL往往是不保證強一致性的,而對於一些應用來講(例如金融服務),是需要強一致性和事務的,因此,如果它們基於NOSQL系統來開發的話,應用層需要些大量的邏輯來處理一致性和事務相關的問題。此時,業務需求是擁有可擴充套件性的基礎上,能夠支援強一致性。

因此,這裡有幾條路:

  1. 效能更好的單個伺服器來做資料庫伺服器
  2. 中介軟體層支援分散式事務

使用更好的單個伺服器的話,不滿足業務需求的可擴充套件性。

使用中介軟體的話,會有如下問題,例如:

  1. 中介軟體層往往是比較輕量級的,要實現一致性,必須在中介軟體層實現分散式事務,這點是非常困難的
  2. 中介軟體層本身的高可用很難保證

上面兩條路都不能很好的滿足應用的需求,因此,NewSQL出現了。

首先來看NEWSQL的定義:針對OLTP的讀寫,提供與NOSQL相同的可擴充套件性和效能,同時能支援滿足ACID特性的事務。即保持NOSQL的高可擴充套件和高效能,並且保持關係模型。

NEWSQL的優點:

  1. 輕鬆的獲得可擴充套件性
  2. 能夠使用關係模型和事務,應用邏輯會簡化很多

注意,此篇論文中的NEWSQL偏向於OLTP型資料庫,和一些OLAP型別的資料庫不同,OLAP資料庫更偏向於複雜的只讀查詢,查詢時間往往很長。

而NEWSQL資料庫的特性如下,針對其讀寫事務:

  1. 執行時間短
  2. 一般只查詢一小部分資料,通過使用索引來達到高效查詢的目的
  3. 一般執行相同的命令,使用不同的輸入引數

NewSQL的分類

分三大類:

  1. 從頭開始,使用新架構的系統
  2. 中介軟體
  3. DAAS,資料庫即服務

New Architectures

採用新架構的NewSQL有如下特點:

  1. 無共享儲存
  2. 多節點的併發控制
  3. 基於多副本做高可用和容災
  4. 流量控制
  5. 分散式查詢處理

優勢:

  1. 所有的部分都可以為分散式環境做優化,例如查詢優化,通訊協議優化。例如,所有的NEWSQL DBMS可以直接在節點間傳送查詢,而不是通過中心節點,例如中介軟體系統
  2. 本身負責資料分割槽,因此,可以把查詢傳送給有資料的分割槽,而不是把資料傳送給查詢。
  3. 擁有自身的儲存,可以指定更復雜的多副本的方式

缺點:

  1. 懂該資料庫的人少,缺少專業的運維

代表產品:Spanner,CockroachDB

Transparent Sharding Middleware

中介軟體負責的事情如下:

  1. 對查詢請求做路由
  2. 分散式事務的協調者
  3. 資料分佈,資料多副本控制,資料分割槽

往往在各個資料庫節點,需要裝代理與中介軟體溝通,負責如下事情:

  1. 在本地節點執行中間節點發來的情況,並且返回結果

優點:

  1. 應用通常不需要做變化

缺點:

  1. 各個節點還是執行傳統資料庫,即以磁碟為核心的資料庫,對現有的大記憶體,多核伺服器難以高效地利用
  2. 重複的查詢計劃和查詢優化,在中介軟體做一次,在各個DBMS做一次

備註:有研究表明,以磁碟為主要儲存的傳統DBMS,很難有效地利用非常多的核,以及更大的記憶體容量。

代表產品: MariaDB MaxScale, ScaleArc

Database-as-a-Service

特點:

  1. 使用者可以按需使用
  2. 資料庫本身可能使用雲產品,例如雲端儲存等,可以較容易的實現可擴充套件性

代表產品:

  1. Amazon Aurora
  2. ClearDB

NewSQL的技術挑戰有哪些?

Main Memory Storage

傳統資料庫都是以磁碟為儲存中心的架構,讀盤操作相對較慢,一般是記憶體中快取頁。

現在來講,記憶體較便宜,容量大,能儲存大量的資料。這些純記憶體操作帶來的好處是,讀取和寫入資料速度較快。

現有的大記憶體伺服器,對資料庫對記憶體的管理提出了新的要求,不再是像傳統資料庫那樣,只是用來做頁快取,可以採用更高效地記憶體管理方式。

Partitioning/Sharding

資料分割槽一般以某幾列做hash或者range分割槽。

特點:

  • 資料庫需要能在多個分割槽執行SQL,並且合併資料結果的功能。
  • 把同一個使用者的資料可以放在一起,即使是不同資料表的資料,可以減少通訊開銷。
  • 可以線上的新增或者刪除機器。
  • 可以線上的遷移或複製分割槽。

Concurrency Control

資料庫通過Concurrency Control來提供ACID中的Atomicity和Isolation。

Atomicity

分散式場景下,一般採用類2PC的協議,根據事務是否需要中心節點,分為以下兩類:

  1. 中心節點:單點,容量限制
  2. 非中心節點:需要時鐘的同步

關於時鐘同步,不同資料庫也有不同的做法,Spanner和CroachDB在時鐘同步上的不同選擇:

But what makes Spanner differ- ent is that it uses hardware devices (e.g., GPS, atomic clocks) for high-precision clock synchronization. The DBMS uses these clocks to assign timestamps to transactions to enforce consistent views of its multi-version database over wide-area networks. CockroachDB also purports to provide the same kind of consistency for transactions across data centers as Span- ner but without the use of atomic clocks. They instead rely on a hybrid clock protocol that combines loosely synchronized hardware clocks and logical counters [41].複製程式碼

Isolation

現有實現Isolation的技術主要包括:

  • 2PL:two phase locking
  • MVCC: Multiversion Concurrency Control
  • OCC: Optimistic Concurrency Control

大部分的資料庫還是在選擇使用MVCC,例如CockroachDB;有些資料庫使用2PL+MVCC,修改資料的時候,還是採用2PL,例如,InnoDB,Spanner

Secondary Indexes

一般有兩種實現方式:區域性索引VS全域性索引

區域性索引:

  1. 每個partition有一部分索引資料,每次修改索引,只需要修改一個節點,但查詢資料需要可能涉及多個節點

全域性索引:

  1. 每個partition都有完整的索引資料,每次修改索引,都需要使用分散式事務,修改所有包含此索引副本的節點,查詢資料只需要在一個節點

Replication

兩個需要考慮的點:

  1. 如何保證一致性:Paxos和2PC(跨Partition)
  2. 同步的方式:採用同步執行命令的方式,還是同步狀態的方式

Crash Recovery

如何最小化當機時間?

採用主備切換

如何優化新加機器恢復到同步的時間?

一般手段為做checkpoint

討論

可擴充套件性是NewSQL的一個非常重要的特點,對於中介軟體的方式,其上需要存路由資訊,其本身的可擴充套件性比較難以解決,個人認為,其不應該算入NewSQL。

NewSQL的技術挑戰除了上述提到的之外,還有如何實現多租戶架構及租戶之間的隔離,負載均衡等等問題。

從整篇論文中描述的內容可以看出,NewSQL中並沒有開拓性的理論技術的創新,更多的是架構的創新,以及把現有的技術如何更好地適用於當今的伺服器,適用於當前的分散式架構,使得這些技術有機的結合起來,形成高效率的整體,實現NewSQL高可用,可擴充套件,強一致性等需求。

PS:
本部落格更新會在第一時間推送到微信公眾號,歡迎大家關注。

NewSQL 究竟新在哪裡?
qocde_wechat

參考文獻

相關文章