- SequoiaDB分布式數(shù)據(jù)庫(kù)權(quán)威指南
- 許建輝 (加)陳元熹
- 2892字
- 2022-05-06 18:40:01
1.2.2 SequoiaDB的核心特性
SequoiaDB作為一款分布式數(shù)據(jù)庫(kù),可以為用戶帶來(lái)諸多價(jià)值。其具有以下核心特性:
● 高性能與無(wú)限彈性水平擴(kuò)展能力。
● 金融級(jí)安全特性:多數(shù)據(jù)中心間的容災(zāi)指標(biāo)RPO(復(fù)原點(diǎn)目標(biāo),Recovery Point Objective)為0。
● 分布式事務(wù)與ACID(Atomicity,Consistency,Isolation,Durability)能力。
● 完全兼容傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù),數(shù)據(jù)分片對(duì)應(yīng)用程序完全透明,同時(shí)支持結(jié)構(gòu)化、半結(jié)構(gòu)化與非結(jié)構(gòu)化數(shù)據(jù)。
● 支持聯(lián)機(jī)交易和分析混合負(fù)載,可互不干擾地同時(shí)運(yùn)行聯(lián)機(jī)交易與批處理任務(wù)。
● 多租戶能力:云環(huán)境下支持多種級(jí)別的物理與邏輯隔離。
1.彈性水平擴(kuò)展
作為一款分布式數(shù)據(jù)庫(kù),支持無(wú)限彈性水平擴(kuò)展是SequoiaDB的基本特性,其底層的分布式存儲(chǔ)引擎與上層的數(shù)據(jù)庫(kù)實(shí)例均支持這一特性。
SequoiaDB的數(shù)據(jù)庫(kù)實(shí)例均無(wú)狀態(tài)并使用TCP/IP對(duì)外提供服務(wù)。為了提升整體處理能力,用戶可以通過(guò)增加服務(wù)器數(shù)量或創(chuàng)建額外的數(shù)據(jù)庫(kù)實(shí)例來(lái)實(shí)現(xiàn)對(duì)應(yīng)用的彈性水平擴(kuò)展。
分布式存儲(chǔ)引擎內(nèi)部包含3種類型的節(jié)點(diǎn):協(xié)調(diào)節(jié)點(diǎn)、編目節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)。
其中,協(xié)調(diào)節(jié)點(diǎn)主要作為數(shù)據(jù)請(qǐng)求的路由進(jìn)程,對(duì)來(lái)自上層數(shù)據(jù)庫(kù)實(shí)例的請(qǐng)求進(jìn)行分發(fā),并對(duì)數(shù)據(jù)節(jié)點(diǎn)返回的結(jié)果進(jìn)行匯總。每個(gè)協(xié)調(diào)節(jié)點(diǎn)均無(wú)狀態(tài),可以通過(guò)增加協(xié)調(diào)節(jié)點(diǎn)的數(shù)量提升數(shù)據(jù)路由層的處理能力。
編目節(jié)點(diǎn)默認(rèn)使用三副本機(jī)制,由于只有當(dāng)協(xié)調(diào)節(jié)點(diǎn)第一次訪問(wèn)某個(gè)表或集合時(shí)才需要讀取編目節(jié)點(diǎn),只有當(dāng)建表或更改集群拓?fù)浣Y(jié)構(gòu)時(shí)才需要寫入編目節(jié)點(diǎn),因此在正常生產(chǎn)環(huán)境中編目節(jié)點(diǎn)的訪問(wèn)量極低,基本不可能成為瓶頸。
數(shù)據(jù)節(jié)點(diǎn)則采用水平分片的方式對(duì)數(shù)據(jù)進(jìn)行橫向切分,用戶可以通過(guò)增加分區(qū)組或數(shù)據(jù)分片的方式,對(duì)數(shù)據(jù)引擎層的存儲(chǔ)進(jìn)行彈性水平擴(kuò)展。
2.高可用性與容災(zāi)
由于PC服務(wù)器內(nèi)置的物理磁盤不同于傳統(tǒng)小型機(jī)加存儲(chǔ)設(shè)備的架構(gòu),在PC服務(wù)器出現(xiàn)物理故障時(shí)無(wú)法保障存儲(chǔ)在本地磁盤的數(shù)據(jù)不丟、不壞,因此所有基于PC服務(wù)器內(nèi)置磁盤架構(gòu)的數(shù)據(jù)庫(kù)必須采用多副本機(jī)制,以保障數(shù)據(jù)庫(kù)的高可用性與容災(zāi)機(jī)制。SequoiaDB通過(guò)下述5項(xiàng)技術(shù)實(shí)現(xiàn)高可用性與容災(zāi)機(jī)制。
● 數(shù)據(jù)庫(kù)實(shí)例:由于數(shù)據(jù)庫(kù)實(shí)例進(jìn)程均為無(wú)狀態(tài)節(jié)點(diǎn),因此同樣配置的數(shù)據(jù)庫(kù)實(shí)例進(jìn)程可以互為高可用冗余。不論創(chuàng)建的是MySQL、PostgreSQL還是S3實(shí)例,每個(gè)實(shí)例對(duì)外均可暴露一個(gè)或多個(gè)接入地址(IP地址+端口號(hào))。應(yīng)用程序連接到任意一個(gè)接入地址時(shí)均可向數(shù)據(jù)庫(kù)實(shí)例進(jìn)行數(shù)據(jù)讀/寫操作,且能保證多個(gè)接入地址之間的數(shù)據(jù)一致性。用戶只要為每個(gè)實(shí)例的多個(gè)接入地址前置一個(gè)類似Nginx或F5的高可用負(fù)載均衡設(shè)備,即可輕易實(shí)現(xiàn)多個(gè)接入地址的高可用冗余。
● 協(xié)調(diào)節(jié)點(diǎn):作為數(shù)據(jù)庫(kù)存儲(chǔ)引擎的路由節(jié)點(diǎn),由于協(xié)調(diào)節(jié)點(diǎn)自身無(wú)狀態(tài),因此所有協(xié)調(diào)節(jié)點(diǎn)均可以完全對(duì)等配置,對(duì)上層應(yīng)用程序或計(jì)算引擎做到高可用。應(yīng)用程序既可以通過(guò)上層數(shù)據(jù)庫(kù)實(shí)例訪問(wèn)數(shù)據(jù),也可直接對(duì)數(shù)據(jù)庫(kù)存儲(chǔ)引擎進(jìn)行API訪問(wèn)。當(dāng)應(yīng)用程序直接連接到協(xié)調(diào)節(jié)點(diǎn)進(jìn)行API操作時(shí),應(yīng)用可以通過(guò)SequoiaDB客戶端連接池配置多個(gè)IP地址與端口號(hào),實(shí)現(xiàn)高可用配置。如果應(yīng)用通過(guò)上層數(shù)據(jù)庫(kù)實(shí)例進(jìn)行訪問(wèn),則所有數(shù)據(jù)庫(kù)實(shí)例均支持多個(gè)接入地址的高可用的配置方式。
● 編目節(jié)點(diǎn):編目節(jié)點(diǎn)作為數(shù)據(jù)字典,維護(hù)著SequoiaDB存儲(chǔ)引擎的拓?fù)浣Y(jié)構(gòu)、安全策略、表與集合定義及分片規(guī)則等一系列信息。在SequoiaDB的集群配置中,編目節(jié)點(diǎn)以一個(gè)獨(dú)立復(fù)制組的方式存在,默認(rèn)使用三副本強(qiáng)一致同步策略。在任何一個(gè)節(jié)點(diǎn)發(fā)生故障時(shí),均可將服務(wù)實(shí)時(shí)漂移到其他的對(duì)等節(jié)點(diǎn)中。
● 數(shù)據(jù)節(jié)點(diǎn):SequoiaDB中保存的用戶數(shù)據(jù)由數(shù)據(jù)節(jié)點(diǎn)進(jìn)行存放與讀取。在集群部署環(huán)境中,每個(gè)數(shù)據(jù)復(fù)制組均會(huì)默認(rèn)使用三副本機(jī)制進(jìn)行數(shù)據(jù)存放。在數(shù)據(jù)復(fù)制組中,如果任何一個(gè)數(shù)據(jù)節(jié)點(diǎn)進(jìn)程發(fā)生故障,則該復(fù)制組內(nèi)的其他節(jié)點(diǎn)將會(huì)實(shí)時(shí)接管其服務(wù)。具體來(lái)說(shuō),如果發(fā)生故障的節(jié)點(diǎn)為該復(fù)制組內(nèi)的主節(jié)點(diǎn),則其余從節(jié)點(diǎn)將會(huì)在檢測(cè)到節(jié)點(diǎn)間的心跳中斷后發(fā)起投票請(qǐng)求,并使用Raft協(xié)議選舉出新的主節(jié)點(diǎn);而如果發(fā)生故障的是從節(jié)點(diǎn),則協(xié)調(diào)節(jié)點(diǎn)檢測(cè)到節(jié)點(diǎn)間的心跳中斷后,會(huì)將該數(shù)據(jù)節(jié)點(diǎn)存在的會(huì)話轉(zhuǎn)移至其余數(shù)據(jù)節(jié)點(diǎn),以盡可能對(duì)應(yīng)用程序保持透明。
● 異地容災(zāi):在傳統(tǒng)多節(jié)點(diǎn)投票選舉機(jī)制中,為了確保復(fù)制組內(nèi)的節(jié)點(diǎn)不會(huì)發(fā)生“腦裂”問(wèn)題,集群必須在確保超半數(shù)節(jié)點(diǎn)存活且達(dá)成投票共識(shí)后,才能讓其中一個(gè)數(shù)據(jù)節(jié)點(diǎn)或編目節(jié)點(diǎn)當(dāng)選為主節(jié)點(diǎn),以提供讀/寫服務(wù)。但是在同城雙中心或類似的環(huán)境下,用戶很難保證在任何一個(gè)中心整體發(fā)生故障時(shí),整個(gè)集群的所有復(fù)制組中依然會(huì)有超過(guò)半數(shù)的節(jié)點(diǎn)存活。因此,SequoiaDB通過(guò)集群分裂與歸并功能,在同城雙中心的環(huán)境中進(jìn)行秒級(jí)集群分裂,將原本處于兩個(gè)數(shù)據(jù)中心的單集群分裂為兩個(gè)獨(dú)立部署的集群,以保證存活數(shù)據(jù)中心內(nèi)的數(shù)據(jù)服務(wù)能夠以秒級(jí)啟動(dòng),并在提供完整數(shù)據(jù)庫(kù)讀/寫服務(wù)的同時(shí)確保交易數(shù)據(jù)的穩(wěn)定可靠,從而實(shí)現(xiàn)秒級(jí)RTO(復(fù)原時(shí)間目標(biāo),Recovery Time Objective)與RPO為0。
3.分布式事務(wù)
SequoiaDB支持強(qiáng)一致分布式事務(wù)功能。利用二段提交機(jī)制,SequoiaDB在分布式存儲(chǔ)引擎上實(shí)現(xiàn)了對(duì)結(jié)構(gòu)化與半結(jié)構(gòu)化數(shù)據(jù)的強(qiáng)一致分布式事務(wù)功能,不論用戶創(chuàng)建哪種數(shù)據(jù)庫(kù)實(shí)例,其底層均可提供完整的分布式事務(wù)及鎖能力。SequoiaDB完整支持4種隔離級(jí)別,同時(shí)支持讀/寫鎖等待及讀已提交版本機(jī)制。
4.多模式接口
SequoiaDB通過(guò)數(shù)據(jù)庫(kù)實(shí)例的形式提供多種關(guān)系型及非關(guān)系型數(shù)據(jù)庫(kù)兼容引擎,支持結(jié)構(gòu)化、半結(jié)構(gòu)化及非結(jié)構(gòu)化數(shù)據(jù)。SequoiaDB在當(dāng)前版本中支持MySQL、MariaDB、PostgreSQL及SparkSQL這4種關(guān)系型數(shù)據(jù)庫(kù)引擎,同時(shí)支持MongoDB的JSON操作,以及S3非結(jié)構(gòu)化數(shù)據(jù)引擎。
使用多模式接口機(jī)制,用戶可以讓SequoiaDB服務(wù)于任何類型的應(yīng)用程序,真正做到分布式數(shù)據(jù)庫(kù)的平臺(tái)化服務(wù)。
5.聯(lián)機(jī)交易和分析混合負(fù)載
一般來(lái)說(shuō),聯(lián)機(jī)交易和分析混合負(fù)載意味著數(shù)據(jù)庫(kù)既可以運(yùn)行OLTP(在線事務(wù)處理,Online Transactional Processing)來(lái)實(shí)現(xiàn)聯(lián)機(jī)交易,也可以運(yùn)行OLAP(在線分析處理,Online Analytical Processing)來(lái)統(tǒng)計(jì)分析業(yè)務(wù)。但是,當(dāng)用戶想要在同一個(gè)數(shù)據(jù)庫(kù)中針對(duì)相同數(shù)據(jù)在同一時(shí)刻運(yùn)行兩種不同類型的業(yè)務(wù)時(shí),往往會(huì)形成較多數(shù)據(jù)庫(kù)服務(wù)器中CPU、內(nèi)存、I/O和網(wǎng)絡(luò)等硬件資源的爭(zhēng)用,導(dǎo)致對(duì)外的聯(lián)機(jī)交易服務(wù)的性能與穩(wěn)定性受到影響。
在SequoiaDB中,用戶可以針對(duì)復(fù)制組的多副本,在節(jié)點(diǎn)和會(huì)話等多個(gè)級(jí)別上指定讀/寫分離策略,同時(shí)可以通過(guò)創(chuàng)建數(shù)據(jù)共享但類型不同的數(shù)據(jù)庫(kù)實(shí)例(比如MySQL實(shí)例與SparkSQL實(shí)例),使其分別服務(wù)于聯(lián)機(jī)交易業(yè)務(wù)與統(tǒng)計(jì)分析業(yè)務(wù),以實(shí)現(xiàn)針對(duì)相同數(shù)據(jù)的聯(lián)機(jī)交易與統(tǒng)計(jì)分析業(yè)務(wù)同時(shí)運(yùn)行,且互不干擾。
6.多租戶隔離
在應(yīng)用程序微服務(wù)化的今天,分布式數(shù)據(jù)庫(kù)存在的價(jià)值不僅在于解決單點(diǎn)數(shù)據(jù)量大的問(wèn)題,更在于它能以一種平臺(tái)化(PaaS)的形式,同時(shí)為上層大量的應(yīng)用與微服務(wù)提供數(shù)據(jù)訪問(wèn)能力。在這種情況下,在不同微服務(wù)之間實(shí)現(xiàn)底層數(shù)據(jù)的邏輯與物理隔離,是保障云環(huán)境中分布式數(shù)據(jù)庫(kù)安全、可靠和性能穩(wěn)定的前提。
在SequoiaDB中,數(shù)據(jù)域可以用于在復(fù)雜集群環(huán)境中,對(duì)資源進(jìn)行邏輯與物理的劃分隔離。例如,在交易型應(yīng)用中,核心賬務(wù)類業(yè)務(wù)與后督(事后監(jiān)督)類業(yè)務(wù)的物理資源往往需要完全隔離,以確保在任何情況下審計(jì)類業(yè)務(wù)的復(fù)雜壓力均不會(huì)影響到核心賬務(wù)系統(tǒng)的穩(wěn)定運(yùn)行。此外,不同數(shù)據(jù)域之間的數(shù)據(jù)安全性配置、硬件資源環(huán)境等往往也不盡相同。
通過(guò)數(shù)據(jù)域、聯(lián)機(jī)交易和分析混合負(fù)載、多模式接口、水平彈性擴(kuò)展等多種機(jī)制,SequoiaDB能夠保障應(yīng)用程序在云環(huán)境下的多租戶隔離。
總體來(lái)看,作為一款新一代金融級(jí)分布式數(shù)據(jù)庫(kù),SequoiaDB除了與MySQL、PostgreSQL等多種傳統(tǒng)數(shù)據(jù)庫(kù)高度兼容,還在水平擴(kuò)展、數(shù)據(jù)安全、分布式事務(wù)、多模式接口、混合負(fù)載及多租戶隔離等方面有著自身的獨(dú)特優(yōu)勢(shì)。
- Access 2007數(shù)據(jù)庫(kù)應(yīng)用上機(jī)指導(dǎo)與練習(xí)
- Libgdx Cross/platform Game Development Cookbook
- 數(shù)據(jù)庫(kù)開發(fā)實(shí)踐案例
- 數(shù)據(jù)要素五論:信息、權(quán)屬、價(jià)值、安全、交易
- Creating Dynamic UIs with Android Fragments(Second Edition)
- 數(shù)亦有道:Python數(shù)據(jù)科學(xué)指南
- Python金融數(shù)據(jù)分析(原書第2版)
- 數(shù)據(jù)科學(xué)工程實(shí)踐:用戶行為分析與建模、A/B實(shí)驗(yàn)、SQLFlow
- Hadoop大數(shù)據(jù)開發(fā)案例教程與項(xiàng)目實(shí)戰(zhàn)(在線實(shí)驗(yàn)+在線自測(cè))
- TextMate How-to
- 跨領(lǐng)域信息交換方法與技術(shù)(第二版)
- Oracle 11g+ASP.NET數(shù)據(jù)庫(kù)系統(tǒng)開發(fā)案例教程
- Python 3爬蟲、數(shù)據(jù)清洗與可視化實(shí)戰(zhàn)
- 深入理解Flink:實(shí)時(shí)大數(shù)據(jù)處理實(shí)踐
- 數(shù)據(jù)挖掘與數(shù)據(jù)化運(yùn)營(yíng)實(shí)戰(zhàn):思路、方法、技巧與應(yīng)用