精品国产亚洲一区二区三区|亚洲国产精彩中文乱码AV|久久久久亚洲AV综合波多野结衣|漂亮少妇各种调教玩弄在线

<blockquote id="ixlwe"><option id="ixlwe"></option></blockquote>
  • <span id="ixlwe"></span>

  • <abbr id="ixlwe"></abbr>

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    1. 簡介

    RadonDB是一款基于MySQL研發(fā)的新一代分布式關系型數(shù)據(jù)庫(MyNewSQL)。

    向用戶提供具備?融級高可用、強一致、超大容量的數(shù)據(jù)庫服務,高度兼容MySQL語法,自動?平分表,智能化擴容。

    2. RadonDB 的 優(yōu) 勢

    (1):自動?平分表,一鍵即可開啟智能化擴容,擴容過程業(yè)務不中斷。

    (2)數(shù)據(jù)多副本并可跨數(shù)據(jù)中?部署,率先使用GTID并行復制+Raft一致性協(xié)議確保副本間數(shù)據(jù)強一致、零丟失主副本故障自動秒級切換,實現(xiàn)自動化運維,無需??干預。

    (3)存儲副本使用MySQL(5.7.19)存儲,穩(wěn)定可靠的存儲能力與強大的計算能力并存。

    (4)提供分布式事務能力,保證跨節(jié)點操作的數(shù)據(jù)一致性。

    (5)同時支持OLTP(高并發(fā)事務需求)和OLAP(復雜分析需求)。

    (6)高度兼容MySQL語法,數(shù)據(jù)可快速導?、導出,簡單易用。

    3. 架構

    RadonDB由SQL節(jié)點(Distributed SQL Nodes)和存儲節(jié)點(Storage Nodes)以及計算節(jié)點(Compute Nodes)三大部分組成。

    整體架構如下:

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    3.1 SQL節(jié)點

    SQL節(jié)點主要負責:

    (1)生成分布式執(zhí)行計劃(Distributed Plan)

    (2)生成分布式執(zhí)行器(Distributed Executor)且并行式執(zhí)行

    (3)協(xié)調分布式事務

    對于用戶的每一個query,到達一個SQL節(jié)點后,處理流程如下:

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    SQL節(jié)點是無狀態(tài)的,但是為了保證事務的Snapshot Isolation隔離性,目前是一寫多讀模式。

    3.2 存儲節(jié)點

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    RadonDB整個存儲層由多個存儲節(jié)點組成。

    每個存儲節(jié)點默認是由一主兩從(三副本)的高可用MySQL集群組成,負責分區(qū)數(shù)據(jù)的存儲與計算。

    3.2.1 副本基MySQL存儲

    為什么選擇MySQL進行副本存儲呢?

    我們的考量是:

    (1): MySQL穩(wěn)定可靠、多索引寫原子保證

    (2):儲存可以異構化,InnoDB/TokuDB多引擎可選

    (3): 盡量把計算下推給MySQL,充分發(fā)揮數(shù)據(jù)就近(Data Locality)優(yōu)勢,以減少存儲層與SQL層數(shù)據(jù)傳輸

    (4):MySQL 8.0即將推出,功能更加強大

    3.2.2副本,強

    為了保證節(jié)點內副本的高可用,我們把MySQL GTID并行復制技術與分布式一致性協(xié)議Raft完美結合,在主副本故障后自動秒級切換并瞬間可用,并確保切換后數(shù)據(jù)零丟失。

    在RadonDB里,我們把GTID(Global Transaction Identifier)作為Raft協(xié)議的log index,結合MySQL的Multi-Threaded Slave (MTS),可以做到log entry的并行復制、并行回放,log重放時間異常短暫,故障切換后即刻對外服務。

    同時,RadonDB使用強Semi-Sync-Replication技術確保至少一個從副本與主副本在數(shù)據(jù)上是完全同步的,當主副本故障后,數(shù)據(jù)完全同步的從副本將被選為新的主副本,這樣就確保了數(shù)據(jù)零丟失,并實現(xiàn)了高可用。

    比如,某個存儲節(jié)點的三副本狀態(tài)為:

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    這樣當Master(主副本)不可服務的時候,Slave1(從副本)將被選為新主,Slave2自動’CHANGE MASTER TO’到新主Slave1并根據(jù)GTID(4和5)進行數(shù)據(jù)同步,切換后狀態(tài)為:

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    當某個副本不可用被判定為損壞時,RadonDB則開啟流式重建(streaming-rebuildme)機制,對該副本進行快速重建,以保證足夠多的副本可用。

    3.3 數(shù)據(jù)分布

    RadonDB對數(shù)據(jù)的劃分最小單元是一個“小表”。

    劃分策略為(默認):

    (1):整張表共 4096 slots

    (2):每個小表 128 slots

    這里的4096和128均可配置,默認可支持單表最大4PB的容量(假設物理盤最大1TB)。

    如果我們在RadonDB里創(chuàng)建一個表t1,數(shù)據(jù)分布情況為:

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    可以看到,表t1被劃分成32個小表,它們均勻的分散在多個存儲節(jié)點上。

    每個小表都有一個自?的哈希區(qū)間,用于標識自?所能存儲的HASH范圍。

    3.4 動態(tài)擴容

    為了減少擴容數(shù)據(jù)遷移量,RadonDB優(yōu)先以?表為單位進行遷移。

    RadonDB定期的采集存儲節(jié)點資源使用情況(CPU/Disk/表熱度等),在擴容的時候會優(yōu)先選擇這些空間緊張且熱度較高的?表為遷移對象,使得整體資源分配達到最優(yōu)。

    擴容時,?先進行全量遷移(并發(fā)式),然后根據(jù)全量時的位點進行增量同步,如果業(yè)務寫?較大,數(shù)據(jù)差異量一直呈加大趨勢,RadonDB會啟動動態(tài)限流機制以加快增量遷移。

    遷移完畢,RadonDB會對表數(shù)據(jù)并發(fā)式做Checksum校驗,嚴格保證遷移前后數(shù)據(jù)的正確性,根據(jù)我們的測試(RDB虛機環(huán)境),Checksum速率可以達到300MB/s,所以對這些小表來說還是非??斓?。

    添加新存儲節(jié)點后數(shù)據(jù)分布情況:

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    3.5 分布式事務

    為什么需要分布式事務能力呢?

    我們通過一個例子來說明分布式事務的重要性,比如用戶執(zhí)行了一個區(qū)間update操作:

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    Distributed Executor在不同存儲節(jié)點執(zhí)行情況為:

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    這里,node2的執(zhí)行器執(zhí)行失敗,其他2個執(zhí)行成功,如果沒有分布式事務保證,整個表其實是處于一種不一致、甚?數(shù)據(jù)不可用狀態(tài)。

    RadonDB提供了分布式事務能力,node1和node3的操作將被回滾(ROLLBACK),這樣就保證了跨節(jié)點操作原子性,使數(shù)據(jù)庫處于一個一致性狀態(tài)。

    3.6數(shù)據(jù)致性

    那么,RadonDB支持什么級別的一致性呢?

    我們先來看一個場景,對于2個不同的client操作,一個為區(qū)間讀,一個為區(qū)間更新,比如:

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    假設表t1.a初始值全部為0,如果沒有分布式事務保證, client1的查詢結果集可能是:

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    因為client1的查詢讀到了client2的更新數(shù)據(jù)(部分)。

    在RadonDB里,這種情況是不存在的,client1的返回結果集有2種。

    全 部 為1

    這種情況發(fā)生在client2-update完成后client1-select再執(zhí)行:

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    全 部 為0

    client1-select的開始(START)在client2-update完成(COMMIT)之前:

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    RadonDB在一致性上做到了SI(Snapshot Isolation)級別,只要某個分布式事務沒有commit,或部分區(qū)已經commit,那么它的操作對其他事務都是不可見的。

    我們使用go-jepsen進行SI測試,經過100多億次操作并檢測,并在檢測期間隨機kill存儲節(jié)點主副本,均未發(fā)現(xiàn)問題。

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    go-jepsen是一個驗證SI隔離級別的工具,它的原理比較容易理解:

    1個線程不停的更新(update)整張表,16個讀線程不停的掃表(scan),然后對讀到的數(shù)據(jù)進行等值校驗,如果這批數(shù)據(jù)有差異,說明讀到了update的臟數(shù)據(jù),是不滿足SI的。

    4. 復雜查詢

    對于跨節(jié)點join等復雜查詢(偏OLAP查詢),如果放到SQL層實現(xiàn),這樣的問題有:

    (1):SQL層與存儲層網(wǎng)絡傳輸較大,因為數(shù)據(jù)要在SQL層進行計算和過濾,導致性能低下或不可用復雜查詢會搶占OLTP資源,互相干擾而造成抖動

    (2):出于以上考慮,RadonDB對于復雜的OLAP類查詢,SQL層會自動路由到單獨的計算節(jié)點進行計算并返回,OLAP和OLTP資源完全隔離,互不影響,用戶在使用時無感知。

    這樣的缺點是數(shù)據(jù)需要2份,目前通過高壓縮解決。

    5. 性能

    5.1 硬件環(huán)境:

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    5.2 測試模型

    sysbench: 16表, 512線程,隨機寫,5000萬條數(shù)據(jù)

    5.3 測試結果

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    可以看到RadonDB的延遲是單機MySQL的1/3,但性能幾乎是單機的3倍,這要得益于RadonDB對大表進行切分后,用戶的寫操作在這些?表上可并發(fā)式執(zhí)行。

    6.數(shù)據(jù)導?和導出

    RadonDB目前只支持go-mydumper?式的數(shù)據(jù)導?和導出。

    XeLabs/go-mydumper使用go語?開發(fā),與maxbube/mydumper格式完全兼容,但是對并行進行了優(yōu)化,性能更加卓越。

    導?數(shù)據(jù)到RadonDB,go-mydumper會批量并行式導?,???旖?。

    從RadonDB導出數(shù)據(jù)時,go-mydumper會批量并行流式導出,資源占用率較低。

    6.1 安 裝go-mydumper

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    6.2.如何導?數(shù)據(jù)到RadonDB

    6.2.1 從數(shù)據(jù)源導出數(shù)據(jù)

    ?先使用mydumper從別的MySQL數(shù)據(jù)源導出數(shù)據(jù),比如:

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    6.2.2 修改schema

    在導出目錄(比如sbtest.sql)里找到*-schema.sql(比如sbtest.benchyou0-scehma.sql):

    對原語句最后增加’PARTITION BY HASH(分區(qū)鍵)’的語法:

    sbtest.benchyou0-schema.sql:

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    修改為(這里是以id為分區(qū)鍵):

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    6.2.3?數(shù)據(jù)到RadonDB

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    6.4如何導RadonDB數(shù)據(jù)

    可以使用mydumper導出RadonDB數(shù)據(jù),此過程是流式獲取(select語句加’/*backup*/’ hint)并導出,基本不占用系統(tǒng)內存。

    RadonDB:新一代的分布式關系型數(shù)據(jù)庫

    7. 總結

    RadonDB是一個基于MySQL而實現(xiàn)的高可用、強一致的分布式數(shù)據(jù)庫。

    RadonDB具備雙層計算能力,SQL節(jié)點提供基本的計算能力(結果集的?次運算),而存儲層由于使用MySQL則具備強大的存儲計算能力。

    對于用戶的每一個query,RadonDB都盡可能的把計算下推,讓存儲層MySQL過濾掉更多的數(shù)據(jù),以減少SQL層和存儲層之間的網(wǎng)絡傳輸,充分利用data locality優(yōu)勢,發(fā)揮最佳性能。

    我們認為基于MySQL的分布式數(shù)據(jù)庫(MyNewSQL)遠未到頭,RadonDB只是一個開始。

    免責聲明:本網(wǎng)站內容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網(wǎng)站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內容可能涉嫌侵犯其知識產權或存在不實內容時,應及時向本網(wǎng)站提出書面權利通知或不實情況說明,并提供身份證明、權屬證明及詳細侵權或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關文章源頭核實,溝通刪除相關內容或斷開相關鏈接。

    2018-05-11
    RadonDB:新一代的分布式關系型數(shù)據(jù)庫
    1. 簡介RadonDB是一款基于MySQL研發(fā)的新一代分布式關系型數(shù)據(jù)庫(MyNewSQL)。

    長按掃碼 閱讀全文