偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

基礎(chǔ)普及之什么是分布式SQL

譯文
運(yùn)維 數(shù)據(jù)庫運(yùn)維 分布式
本文向您介紹分布式SQL的基本概念,其對(duì)應(yīng)的數(shù)據(jù)庫架構(gòu),以及對(duì)于業(yè)務(wù)應(yīng)用的各種優(yōu)勢。

【51CTO.com快譯】在過去的近40年中,SQL已經(jīng)成為了關(guān)系型數(shù)據(jù)庫(又稱為RDBMS)的通用語言。這也就是為什么關(guān)系型數(shù)據(jù)庫經(jīng)常被簡單稱為SQL數(shù)據(jù)庫的原因。從架構(gòu)而言,以O(shè)racle、PostgreSQL和MySQL為首的傳統(tǒng)SQL數(shù)據(jù)庫,是單體式(monolithic)的。也就是說,它們無法在多個(gè)實(shí)例之間自動(dòng)地分配數(shù)據(jù)和查詢。而NewSQL數(shù)據(jù)庫的出現(xiàn)使得SQL具有了可擴(kuò)展性和高性能。當(dāng)然,此類數(shù)據(jù)庫仍然具有與生俱來的局限性。

2015年,Docker容器和Kubernetes編排的出現(xiàn),讓我們能夠以靈活、可組合的基礎(chǔ)架構(gòu)方式,來創(chuàng)建各種基于微服務(wù)的應(yīng)用。其中,內(nèi)置的可擴(kuò)容性、靈活性、以及地理分布特性,是此類云原生架構(gòu)的核心特點(diǎn)。這也就是人們常說的“分布式SQL”--這一新型的數(shù)據(jù)庫。在應(yīng)用方面,此類分布式SQL數(shù)據(jù)庫的一個(gè)顯著特征是:無論其中有多少個(gè)節(jié)點(diǎn),整個(gè)數(shù)據(jù)庫集群對(duì)于應(yīng)用程序而言,都被其視為一個(gè)邏輯的SQL數(shù)據(jù)庫。

數(shù)據(jù)庫的架構(gòu)

分布式SQL數(shù)據(jù)庫通常具有如下三層體系結(jié)構(gòu)。

基礎(chǔ)普及之什么是分布式SQL

1. SQL API

顧名思義,分布式SQL數(shù)據(jù)庫仍然必須提供SQL API服務(wù),以便應(yīng)用程序可以對(duì)關(guān)系型數(shù)據(jù)進(jìn)行建模,并執(zhí)行涉及到各種關(guān)系信息的查詢操作。它保留了SQL數(shù)據(jù)庫典型的數(shù)據(jù)建模結(jié)構(gòu),包括:索引、外鍵約束、JOIN查詢、以及多行ACID事務(wù)(譯者注:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability))。

2.分布式查詢執(zhí)行

由于分布式SQL的查詢能夠被自動(dòng)地分配到目標(biāo)群集的多個(gè)節(jié)點(diǎn)上,因此,此舉有效地避免了單個(gè)節(jié)點(diǎn)成為查詢處理中的瓶頸問題。具體的查詢流程為:目標(biāo)群集中的任一節(jié)點(diǎn)都可以接受傳入的某個(gè)查詢。通過在網(wǎng)絡(luò)中的各節(jié)點(diǎn)之間傳輸數(shù)據(jù)、協(xié)同工作,該節(jié)點(diǎn)能夠以最小化處理等待時(shí)間的方式,僅分擔(dān)查詢請求中的一部分任務(wù)。而由其他節(jié)點(diǎn)協(xié)助完成剩余的部分。最后,該接受請求的原始節(jié)點(diǎn),將匯總所有的查詢結(jié)果,并發(fā)回給客戶端應(yīng)用程序。

3.分布式數(shù)據(jù)存儲(chǔ)

那些包含有索引信息的數(shù)據(jù)會(huì)被自動(dòng)分布(也稱為分片,sharded)到群集的多個(gè)節(jié)點(diǎn)處。此舉確保了單個(gè)節(jié)點(diǎn)都不會(huì)成為高性能和高可用性的瓶頸。此外,數(shù)據(jù)庫集群能夠支持高一致性的復(fù)制、以及多行(也稱為分布式)ACID事務(wù),進(jìn)而保留了單個(gè)邏輯數(shù)據(jù)庫的基本概念。

高度一致性的復(fù)制

在數(shù)據(jù)庫的管理概念中,所謂支持強(qiáng)大的SQL API層,其本質(zhì)上就是要求處于底層的存儲(chǔ)層,能夠在跨數(shù)據(jù)庫的群集節(jié)點(diǎn)上建立強(qiáng)一致性的復(fù)制。這就意味著:對(duì)于數(shù)據(jù)庫的寫入操作,將會(huì)在多個(gè)節(jié)點(diǎn)上被同步提交,以保證出現(xiàn)故障時(shí)的數(shù)據(jù)可用性。而讀取操作則是基于最后一次被提交的寫入數(shù)據(jù),或是出錯(cuò)之前的數(shù)據(jù)。該屬性通常被稱為線性一致性(Linearizability,http://www.bailis.org/blog/linearizability-versus-serializability/)。根據(jù)著名的CAP原則(https://towardsdatascience.com/cap-theorem-and-distributed-database-management-systems-5c2be977950e,譯者注:一致性(Consistency)、可用性(Availability)、分區(qū)容錯(cuò)性(Partition tolerance)),分布式SQL數(shù)據(jù)庫具有一致性和分區(qū)容錯(cuò)性。

分布式的ACID事務(wù)

為了能夠支持分布式的ACID事務(wù),分布式數(shù)據(jù)庫的存儲(chǔ)層需要在多個(gè)節(jié)點(diǎn)的多個(gè)數(shù)據(jù)行中進(jìn)行事務(wù)性的協(xié)調(diào)任務(wù)。此處,它們正好用到了兩階段提交(2 Phase Commit,2PC)協(xié)議。參照ACID中I(隔離性)的要求,為了能夠?qū)Σl(fā)式的數(shù)據(jù)訪問實(shí)現(xiàn)嚴(yán)格的隔離,分布式SQL數(shù)據(jù)庫將可序列化性(Serializability,http://www.bailis.org/blog/linearizability-versus-serializability/)作為最嚴(yán)格的隔離級(jí)別,并且通過快照(Snapshot)之類的其他方式來支持較弱的隔離級(jí)別。

業(yè)務(wù)應(yīng)用的優(yōu)勢

分布式SQL的四個(gè)關(guān)鍵優(yōu)勢,如下圖所示。

1.讓SQL和事務(wù)類的開發(fā)更具敏捷性

如今,由于SQL仍然是一種輕松實(shí)現(xiàn)建模關(guān)系和多行操作的數(shù)據(jù)建模語言,因此為了滿足應(yīng)用開發(fā)人員持續(xù)對(duì)于SQL數(shù)據(jù)庫的操作習(xí)慣與需求,即便是Amazon DynamoDB、MongoDB和FaunaDB之類的NoSQL數(shù)據(jù)庫,也開始具備了事務(wù)性的操作能力。例如:SQL通過顯式(使用BEGIN和END TRANSACTION的語法)和隱式(使用外鍵和JOIN查詢之類的二級(jí)索引),來允許多行事務(wù),這比傳統(tǒng)的鍵-值(key-value)型NoSQL要方便得多。

此外,開發(fā)人員往往喜歡通過一次性輕松地使用SQL,來對(duì)數(shù)據(jù)(和存儲(chǔ))進(jìn)行建模。而在業(yè)務(wù)需求發(fā)生變化時(shí),他們只需修改JOIN,便可反映到查詢之中。

2.具有本地故障轉(zhuǎn)移與修復(fù)的超強(qiáng)彈性

在分布式SQL數(shù)據(jù)庫中,我們使用基于分片(per-shard)的分布式共識(shí)復(fù)制(consensus replication)等技術(shù),來確保每個(gè)分片(而不是每個(gè)實(shí)例)在出現(xiàn)故障時(shí),仍可保持高可用性。

如此,基礎(chǔ)架構(gòu)一旦出現(xiàn)故障,它始終只會(huì)影響到目標(biāo)數(shù)據(jù)的某個(gè)子集(也就是那些被leader分割開的碎片),而不會(huì)影響到整個(gè)集群。并且,由于剩余的分片副本能夠在幾秒鐘之內(nèi)自動(dòng)地選出新的leader,因此,集群會(huì)在出現(xiàn)故障時(shí)表現(xiàn)出一定的自我修復(fù)能力。

此外,這些發(fā)生在后臺(tái)群集配置上的更改對(duì)于應(yīng)用程序來說是完全透明的,它們可以照常運(yùn)行,而不會(huì)出現(xiàn)任何中斷或是性能的驟降。

3.具有按需進(jìn)行水平寫入的可擴(kuò)展性

《如何在分布式SQL數(shù)據(jù)庫中進(jìn)行數(shù)據(jù)分片》一文(https://dzone.com/articles/how-data-sharding-works-in-a-distributed-sql-datab),說明了開發(fā)人員通常是如何在分布式SQL數(shù)據(jù)庫中實(shí)現(xiàn)自動(dòng)化數(shù)據(jù)分片的。無論有新節(jié)點(diǎn)的加入,還是現(xiàn)有節(jié)點(diǎn)的刪除,分片都將會(huì)在所有可用節(jié)點(diǎn)之間保持自動(dòng)的平衡狀態(tài)。

目前,那些需要處理事務(wù)的應(yīng)用程序都具有可擴(kuò)展能力的微服務(wù)。它們在不需要新增基礎(chǔ)架構(gòu)的基礎(chǔ)上,完全可以直接依賴于內(nèi)存中的緩存(無需從數(shù)據(jù)庫中讀取請求,而保留對(duì)于寫入請求的處理)或NoSQL數(shù)據(jù)庫(雖然能夠擴(kuò)展寫入操作,但是無法保證ACID)。

4.針對(duì)地域分布式數(shù)據(jù)的低延遲性

正如《構(gòu)建具有低延遲的云原生、以及地域分布式SQL應(yīng)用的9種技術(shù)》一文(https://dzone.com/articles/9-techniques-to-build-cloud-native-geo-distributed)所強(qiáng)調(diào)的那樣:分布式SQL數(shù)據(jù)庫可以提供多種技術(shù),來構(gòu)建地域分布式的應(yīng)用程序。這些技術(shù)不僅有助于對(duì)于區(qū)域性故障實(shí)現(xiàn)自動(dòng)化容災(zāi),而且還能夠在一定程度上通過讓數(shù)據(jù)更接近來自本區(qū)域的最終用戶,以實(shí)現(xiàn)更低的數(shù)據(jù)延遲性。

原文標(biāo)題:What Is Distributed SQL? ,作者:Sid Choudhury

【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】

 

責(zé)任編輯:龐桂玉 來源: 51CTO
相關(guān)推薦

2020-12-14 14:24:07

CAP分布式數(shù)據(jù)一致性

2010-07-05 16:53:38

SQL Server

2018-01-30 11:17:56

集群分布式SOA?

2015-08-03 15:48:42

Hadoop大數(shù)據(jù)

2022-03-29 23:17:52

PostgreSQL集群Citus

2018-10-29 08:44:29

分布式兩階段提交事務(wù)

2018-07-17 08:14:22

分布式分布式鎖方位

2009-09-18 15:10:13

分布式事務(wù)LINQ TO SQL

2024-03-01 09:53:34

2016-10-08 21:12:36

CopyleftCopyright開源

2020-02-12 15:02:39

KVM架構(gòu)圖分布式

2009-06-12 11:42:28

EJB分布式

2017-04-14 09:48:25

分布式存儲(chǔ)系統(tǒng)

2025-06-13 07:30:51

2010-09-10 08:54:02

2022-03-06 21:43:05

Citus架構(gòu)PostgreSQL

2019-09-26 15:43:52

Hadoop集群防火墻

2019-02-13 13:41:07

MemCache分布式HashMap

2021-07-07 07:14:48

分布式ID分布式系統(tǒng)

2020-08-14 09:04:34

分布式事務(wù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)