a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁(yè) > 數(shù)據(jù)庫(kù) > Access > 正文

Atlas 分布式版重磅來(lái)襲

2024-09-07 19:04:29
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

   Atlas 是由 Qihoo 360公司W(wǎng)eb平臺(tái)部基礎(chǔ)架構(gòu)團(tuán)隊(duì)開(kāi)發(fā)維護(hù)的一個(gè)基于MySQL協(xié)議的數(shù)據(jù)中間層項(xiàng)目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基礎(chǔ)上,修改了大量bug,添加了很多功能特性。目前該項(xiàng)目在360公司內(nèi)部得到了廣泛應(yīng)用,很多MySQL業(yè)務(wù)已經(jīng)接入了Atlas平臺(tái),每天承載的讀寫請(qǐng)求數(shù)達(dá)幾十億條。同時(shí),有超過(guò)50家公司在生產(chǎn)環(huán)境中部署了Atlas,超過(guò)800人已加入了我們的開(kāi)發(fā)者交流群,并且這些數(shù)字還在不斷增加。

  主要功能:

  1.讀寫分離

  2.從庫(kù)負(fù)載均衡

  3.IP過(guò)濾

  4.自動(dòng)分表

  5.DBA可平滑上下線DB

  6.自動(dòng)摘除宕機(jī)的DB

  Atlas Sharding 簡(jiǎn)介

  Atlas Sharding是Atlas最近重點(diǎn)開(kāi)發(fā)的一個(gè)功能, 此功能增加了Mysql的橫向擴(kuò)展性跟容量, 可以滿足大部分企業(yè)的需求. 目前已經(jīng)在github上以Sharding分支發(fā)布.

  Sharding 的基本思想就是把一個(gè)數(shù)據(jù)表中的數(shù)據(jù)切分成多個(gè)部分, 存放到區(qū)別的主機(jī)上去(切分的策略有多種), 從而緩解單臺(tái)機(jī)器的性能跟容量的問(wèn)題. sharding是一種水平切分, 適用于單表數(shù)據(jù)龐大的情景. 目前atlas支持靜態(tài)的sharding方案, 暫時(shí)不支持?jǐn)?shù)據(jù)的自動(dòng)遷移.

  Atlas以表為單位sharding, 同一個(gè)數(shù)據(jù)庫(kù)內(nèi)可以同時(shí)共有sharding的表與不sharding的表, 不sharding的表數(shù)據(jù)存在未sharding的數(shù)據(jù)庫(kù)組中.

  目前Atlas sharding支持insert, delete, select, update語(yǔ)句, 支持不跨shard的事務(wù).

  當(dāng)然, 由于Mysql分布式的局限性, Atlas Sharding對(duì)于SQL的特性支持也是有限的, 但是應(yīng)付日常的需求, 已經(jīng)足夠了.

  和Mysql replication的不同

  MySQL主從復(fù)制就是將一個(gè)MySQL實(shí)例(Master)中的數(shù)據(jù)實(shí)時(shí)復(fù)制到另一個(gè)MySQL實(shí)例(slave)中,這個(gè)復(fù)制是一個(gè)異步復(fù)制的過(guò)程。

  數(shù)據(jù)復(fù)制有以下一些特點(diǎn):

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

  負(fù)載平衡(需要借助Atlas或者其他proxy中間件)

  備份

  高可用性(high availability)與容錯(cuò)

  復(fù)制的局限性很明顯, 當(dāng)數(shù)據(jù)庫(kù)寫入頻繁, 但讀取操作少的場(chǎng)景下, 復(fù)制就不適合了, 當(dāng)寫入過(guò)于頻繁,很難由一臺(tái)主機(jī)支撐的時(shí)候,我們還是會(huì)面臨到擴(kuò)展瓶頸。換句話說(shuō)就是復(fù)制只能擴(kuò)展讀性能, 但是對(duì)于寫性能的擴(kuò)展是無(wú)能為力的.

  數(shù)據(jù)切分(sharding): 通過(guò)某種特定的條件,將我們存放在同一個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)分散存放到多個(gè)數(shù)據(jù)庫(kù)(主機(jī))上面,以達(dá)到分散單臺(tái)設(shè)備負(fù)載的效果。這樣當(dāng)寫入的時(shí)候, IO就被各個(gè)shard所分擔(dān)了. 同時(shí), 在每一個(gè)Shard上也是可以有復(fù)制存在的, 借助Atlas還是能在Shard上做讀分離, 所以復(fù)制跟Sharding完全是互相補(bǔ)充, 不排斥的.

  Sharding 架構(gòu)

Atlas 分布式版重磅來(lái)襲

 

  Atlas是無(wú)狀態(tài)的, 對(duì)于后端的多個(gè)組, 可以配置任意多個(gè)Atlas實(shí)例, 這一點(diǎn)和MongoDB的mongos類似.

  Sharding數(shù)據(jù)庫(kù)組

  在Atlas中, 將一個(gè)組看做是數(shù)據(jù)存儲(chǔ)的單位, 一個(gè)組由一臺(tái)master, 零臺(tái)或者多臺(tái)slave組成(mysql主從同步需要由用戶自己配置). 每個(gè)組之間的數(shù)據(jù)獨(dú)立, 沒(méi)關(guān)于系, 表的數(shù)據(jù)的各個(gè)部分存儲(chǔ)在各個(gè)組中.

  組內(nèi)讀寫分離

  Atlas sharding也支持組內(nèi)的讀寫分離, 也就是說(shuō)Atlas在命中了某個(gè)組之后, 還是會(huì)對(duì)這個(gè)組內(nèi)的master與slave執(zhí)行讀寫分離(讀發(fā)送到slave, 寫發(fā)送到master).

  Sharding 數(shù)據(jù)切分策略

  shard key

  每一個(gè)shard table都有一個(gè)shard key, 其可以是主鍵, 也可以是非主鍵, 但是這個(gè)列必須是一個(gè)整數(shù). Atlas會(huì)利用這個(gè)shard key來(lái)判斷應(yīng)該把這條記錄存放到哪一個(gè)數(shù)據(jù)庫(kù)組中.

  現(xiàn)在Atlas Shardingh支持兩種類型的數(shù)據(jù)切分: Range方式與Hash方式.

  Range 方式

Atlas 分布式版重磅來(lái)襲

 

  如上圖中, shard Key范圍在0-1000的數(shù)據(jù)存放在DbGroup0中, 范圍在1000-2000的數(shù)據(jù)存放在DbGroup1中, 2000-MaxInt 的數(shù)據(jù)存放在DbGroup2 中. 這些范圍的大小不需要相同.比如id為shard key的話, sql: "select * from test where id = 1500;", Atlas會(huì)將此語(yǔ)句發(fā)往DbGroup1. 暫時(shí)Atlas的range是靜態(tài)的, 不支持動(dòng)態(tài)的增加范圍.

  優(yōu)點(diǎn):

  對(duì)于range的sql查詢?nèi)?where id > 100 or id < 1000), range方式的sharding可以精確的命中后端的數(shù)據(jù)組, 不需要將sql發(fā)到各個(gè)mysql去請(qǐng)求數(shù)據(jù), 節(jié)約了網(wǎng)絡(luò)傳輸?shù)南?

  缺點(diǎn)

  如果shard key是遞增的, 那么可能會(huì)在一段時(shí)間內(nèi)的所有sql都命中到同一個(gè)數(shù)據(jù)組, 沒(méi)有體現(xiàn)出sharding的優(yōu)勢(shì), range不適用于這種場(chǎng)景.

  適用場(chǎng)景

  range適用于對(duì)范圍查詢有大量需求, 并且shard key相對(duì)離散插入的情景

  hash 方式

Atlas 分布式版重磅來(lái)襲

 

  目前Atlas使用取模的方式實(shí)現(xiàn)Hash, 也就是說(shuō)Hash(id) = id % dbgroup_count, 如id = 10, id % 3 = 1, 所以會(huì)命中到DbGroup1中.

  優(yōu)缺點(diǎn)

  hash跟range方式是恰好相反的, hash 可以應(yīng)對(duì)數(shù)據(jù)遞增的情景, 即使是在遞增的情況下, sharding的數(shù)據(jù)也是均勻分布在各個(gè)數(shù)據(jù)組內(nèi)的, 但是其缺點(diǎn)就是對(duì)于范圍的查詢通常都需要查詢所有的dbgroup, 網(wǎng)絡(luò)的消耗比較大.

  適用場(chǎng)景

  hash 適用于shard key順序增長(zhǎng), 并對(duì)范圍查詢的需求比較小的情景

  有關(guān)支持的語(yǔ)句

  Atlas sharding只對(duì)sql語(yǔ)句提供有限的支持, 目前支持基本的Select, insert/replace, delete, update語(yǔ)句, 支持全部的Where語(yǔ)法, 但是對(duì)于以下語(yǔ)句, 如果語(yǔ)句命中了多臺(tái)dbgroup, Atlas均未做支持(如果語(yǔ)句只命中了一個(gè)dbgroup, 如select count(*) from test where id < 1000, 其中dbgroup0范圍是0 - 1000, 那么這些特性都是支持的)

  Limit Offset(支持Limit)

  Order by

  Group by

  Join

  ON

  Count, Max, Min等函數(shù)

  這些語(yǔ)句Atlas會(huì)返回"ERROR 1105 (HY000): Proxy Warning - Sharing Hit Multi Dbgroup Not Support SQL"錯(cuò)誤. 請(qǐng)不要在Sharding的表上使用這些特性, 如果對(duì)這種特性有需求請(qǐng)不要讓此表sharding.

  注意:

  子查詢?cè)赟harding中可能會(huì)返回不正確的結(jié)果, 也請(qǐng)不要使用子查詢. 請(qǐng)把語(yǔ)句拆分成多句執(zhí)行

  對(duì)于寫操作, 如果寫操作命中了多個(gè)數(shù)據(jù)庫(kù)組, 由于部分成功(某個(gè)組執(zhí)行失敗)需要回滾的問(wèn)題, 暫時(shí)不支持寫操作命中多個(gè)數(shù)據(jù)組的語(yǔ)句.請(qǐng)拆分成多個(gè)sql語(yǔ)句執(zhí)行.

  Atlas可能會(huì)在接下來(lái)的版本中對(duì)其中的一些特性中做出支持.

  有關(guān)事務(wù)支持

共2頁(yè)上一頁(yè)12下一頁(yè)
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 日本a视频| 亚洲高清视频在线 | 日韩电影免费在线 | 美女视频黄的免费 | 久久中文网 | www.日韩三级 | 欧美激情精品 | 久久精品国产99 | 在线观看国产视频 | 国产一区二区在线看 | 日韩欧美三级 | 亚洲精品久久久久久一区二区 | 国产日日干 | 成人免费视频观看视频 | 婷五月综合 | 成人在线免费 | 国产九九av | 久久久久久久国产精品 | 五月婷婷av | 欧美视频h | 91免费看| 成人激情视频在线免费观看 | 精品一区二区三区免费毛片爱 | 男女靠逼视频免费观看 | 日本xxxx网站 | 精品日韩欧美一区二区三区在线播放 | 91国内| 欧美久久成人 | 国产成人免费在线视频 | 九九热精品视频 | 最新国产在线 | 波多野结衣中文字幕在线视频 | 日韩视频一区二区 | 久久久麻豆 | 亚洲网站在线观看 | 久久久美女 | 青草成人免费视频 | 国产综合精品 | 日本中文字幕电影 | 国产免费一级片 | 日韩精品1区 |