Atlas 是由 Qihoo 360公司W(wǎng)eb平臺(tái)部基礎(chǔ)架構(gòu)團(tuán)隊(duì)開發(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),每天承載的讀寫請求數(shù)達(dá)幾十億條。同時(shí),有超過50家公司在生產(chǎn)環(huán)境中部署了Atlas,超過800人已加入了我們的開發(fā)者交流群,并且這些數(shù)字還在不斷增加。
主要功能:
1.讀寫分離
2.從庫負(fù)載均衡
3.IP過濾
4.自動(dòng)分表
5.DBA可平滑上下線DB
6.自動(dòng)摘除宕機(jī)的DB
Atlas Sharding 簡介
Atlas Sharding是Atlas最近重點(diǎn)開發(fā)的一個(gè)功能, 此功能增加了Mysql的橫向擴(kuò)展性跟容量, 可以滿足大部分企業(yè)的需求. 目前已經(jīng)在github上以Sharding分支發(fā)布.
Sharding 的基本思想就是把一個(gè)數(shù)據(jù)表中的數(shù)據(jù)切分成多個(gè)部分, 存放到不同的主機(jī)上去(切分的策略有多種), 從而緩解單臺(tái)機(jī)器的性能跟容量的問題. sharding是一種水平切分, 適用于單表數(shù)據(jù)龐大的情景. 目前atlas支持靜態(tài)的sharding方案, 暫時(shí)不支持?jǐn)?shù)據(jù)的自動(dòng)遷移.
Atlas以表為單位sharding, 同一個(gè)數(shù)據(jù)庫內(nèi)可以同時(shí)共有sharding的表和不sharding的表, 不sharding的表數(shù)據(jù)存在未sharding的數(shù)據(jù)庫組中.
目前Atlas sharding支持insert, delete, select, update語句, 支持不跨shard的事務(wù).
當(dāng)然, 由于Mysql分布式的局限性, Atlas Sharding對于SQL的特性支持也是有限的, 但是應(yīng)付日常的需求, 已經(jīng)足夠了.
與Mysql replication的區(qū)別
MySQL主從復(fù)制就是將一個(gè)MySQL實(shí)例(Master)中的數(shù)據(jù)實(shí)時(shí)復(fù)制
數(shù)據(jù)復(fù)制有以下一些特點(diǎn):
數(shù)據(jù)分布
負(fù)載平衡(需要借助Atlas或者其他proxy中間件)
備份
高可用性(high availability)和容錯(cuò)
復(fù)制的局限性很明顯, 當(dāng)數(shù)據(jù)庫寫入頻繁, 但讀取操作少的場景下, 復(fù)制就不適合了, 當(dāng)寫入過于頻繁,很難由一臺(tái)主機(jī)支撐的時(shí)候,我們還是會(huì)面臨到擴(kuò)展瓶頸。換句話說就是復(fù)制只能擴(kuò)展讀性能, 但是對于寫性能的擴(kuò)展是無能為力的.
數(shù)據(jù)切分(sharding): 通過某種特定的條件,將我們存放在同一個(gè)數(shù)據(jù)庫中的數(shù)據(jù)分散存放到多個(gè)數(shù)據(jù)庫(主機(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是無狀態(tài)的, 對于后端的多個(gè)組, 可以配置任意多個(gè)Atlas實(shí)例, 這一點(diǎn)與MongoDB的mongos類似.
Sharding數(shù)據(jù)庫組
在Atlas中, 將一個(gè)組看做是數(shù)據(jù)存儲(chǔ)的單位, 一個(gè)組由一臺(tái)master, 零臺(tái)或者多臺(tái)slave組成(mysql主從同步需要由用戶自己配置). 每個(gè)組之間的數(shù)據(jù)獨(dú)立, 沒有關(guān)系, 表的數(shù)據(jù)的各個(gè)部分存儲(chǔ)在各個(gè)組中.
組內(nèi)讀寫分離
Atlas sharding也支持組內(nèi)的讀寫分離, 也就是說Atlas在命中了某個(gè)組之后, 還是會(huì)對這個(gè)組內(nèi)的master和slave執(zhí)行讀寫分離(讀發(fā)送到slave, 寫發(fā)送到master).
Sharding 數(shù)據(jù)切分策略
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注