成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Atlas 分布式版重磅來襲!

數據庫 MySQL 數據庫運維 分布式
Atlas 是由 Qihoo 360公司Web平臺部基礎架構團隊開發維護的一個基于MySQL協議的數據中間層項目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基礎上,修改了大量bug,添加了很多功能特性。目前該項目在360公司內部得到了廣泛應用,很多MySQL業務已經接入了Atlas平臺,每天承載的讀寫請求數達幾十億條。

Atlas 是由 Qihoo 360公司Web平臺部基礎架構團隊開發維護的一個基于MySQL協議的數據中間層項目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基礎上,修改了大量bug,添加了很多功能特性。目前該項目在360公司內部得到了廣泛應用,很多MySQL業務已經接入了Atlas平臺,每天承載的讀寫請求數達幾十億條。同時,有超過50家公司在生產環境中部署了Atlas,超過800人已加入了我們的開發者交流群,并且這些數字還在不斷增加。

主要功能:

1.讀寫分離

2.從庫負載均衡

3.IP過濾

4.自動分表

5.DBA可平滑上下線DB

6.自動摘除宕機的DB

Atlas Sharding 簡介

Atlas Sharding是Atlas最近重點開發的一個功能, 此功能增加了Mysql的橫向擴展性跟容量, 可以滿足大部分企業的需求. 目前已經在github上以Sharding分支發布.

Sharding 的基本思想就是把一個數據表中的數據切分成多個部分, 存放到不同的主機上去(切分的策略有多種), 從而緩解單臺機器的性能跟容量的問題. sharding是一種水平切分, 適用于單表數據龐大的情景. 目前atlas支持靜態的sharding方案, 暫時不支持數據的自動遷移.

Atlas以表為單位sharding, 同一個數據庫內可以同時共有sharding的表和不sharding的表, 不sharding的表數據存在未sharding的數據庫組中.

目前Atlas sharding支持insert, delete, select, update語句, 支持不跨shard的事務.

當然, 由于Mysql分布式的局限性, Atlas Sharding對于SQL的特性支持也是有限的, 但是應付日常的需求, 已經足夠了.

與Mysql replication的區別

MySQL主從復制就是將一個MySQL實例(Master)中的數據實時復制到另一個MySQL實例(slave)中,這個復制是一個異步復制的過程。

數據復制有以下一些特點:

  • 數據分布
  • 負載平衡(需要借助Atlas或者其他proxy中間件)
  • 備份
  • 高可用性(high availability)和容錯

復制的局限性很明顯, 當數據庫寫入頻繁, 但讀取操作少的場景下, 復制就不適合了, 當寫入過于頻繁,很難由一臺主機支撐的時候,我們還是會面臨到擴展瓶頸。換句話說就是復制只能擴展讀性能, 但是對于寫性能的擴展是無能為力的.

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

Sharding 架構

Atlas是無狀態的, 對于后端的多個組, 可以配置任意多個Atlas實例, 這一點與MongoDB的mongos類似.

Sharding數據庫組

在Atlas中, 將一個組看做是數據存儲的單位, 一個組由一臺master, 零臺或者多臺slave組成(mysql主從同步需要由用戶自己配置). 每個組之間的數據獨立, 沒有關系, 表的數據的各個部分存儲在各個組中.

組內讀寫分離

Atlas sharding也支持組內的讀寫分離, 也就是說Atlas在命中了某個組之后, 還是會對這個組內的master和slave執行讀寫分離(讀發送到slave, 寫發送到master).

Sharding 數據切分策略

shard key

每一個shard table都有一個shard key, 其可以是主鍵, 也可以是非主鍵, 但是這個列必須是一個整數. Atlas會利用這個shard key來判斷應該把這條記錄存放到哪一個數據庫組中.

現在Atlas Shardingh支持兩種類型的數據切分: Range方式和Hash方式.

#p#

Range 方式

 

如上圖中, shard Key范圍在0-1000的數據存放在DbGroup0中, 范圍在1000-2000的數據存放在DbGroup1中, 2000-MaxInt 的數據存放在DbGroup2 中. 這些范圍的大小不需要相同.比如id為shard key的話, sql: "select * from test where id = 1500;", Atlas會將此語句發往DbGroup1. 暫時Atlas的range是靜態的, 不支持動態的增加范圍.

優點:

對于range的sql查詢如(where id > 100 or id < 1000), range方式的sharding可以精確的命中后端的數據組, 不需要將sql發到各個mysql去請求數據, 節約了網絡傳輸的消耗.

缺點

如果shard key是遞增的, 那么可能會在一段時間內的所有sql都命中到同一個數據組, 沒有體現出sharding的優勢, range不適用于這種場景.

適用場景

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

hash 方式

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

優缺點

hash跟range方式是恰好相反的, hash 可以應對數據遞增的情景, 即使是在遞增的情況下, sharding的數據也是均勻分布在各個數據組內的, 但是其缺點就是對于范圍的查詢通常都需要查詢所有的dbgroup, 網絡的消耗比較大.

適用場景

hash 適用于shard key順序增長, 并對范圍查詢的需求比較小的情景

關于支持的語句

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

  • Limit Offset(支持Limit)
  • Order by
  • Group by
  • Join
  • ON
  • Count, Max, Min等函數

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

注意:

  • 子查詢在Sharding中可能會返回不正確的結果, 也請不要使用子查詢. 請把語句拆分成多句執行
  • 對于寫操作, 如果寫操作命中了多個數據庫組, 由于部分成功(某個組執行失敗)需要回滾的問題, 暫時不支持寫操作命中多個數據組的語句.請拆分成多個sql語句執行.
  • Atlas可能會在接下來的版本中對其中的一些特性中做出支持.

關于事務支持

事務在Atlas的非sharding的表是完全支持的, 但是對于sharding的表, Atlas只能提供部分的支持(不支持跨dbgroup的事務). Atlas只支持事務中涉及單個dbgroup的語句, 例如有兩個dbgroup0, dbgroup1, 其切分方式是range, 規則是dbgroup0: 0 - 999, dbgroup1: 1000 - 2000,

  1. mysql> begin; 
  2. Query OK, 0 rows affected (0.00 sec) 
  3. mysql> insert into sharding_test(id, name, age) values(1'test'0); 
  4. Query OK, 1 row affected (0.00 sec) 
  5. mysql> insert into sharding_test(id, name, age) values(1500'test'0); 
  6. ERROR 1179 (sqlst): Proxy Warning - sharding dbgroup is in trans, transaction will not work across multi dbgroup 
  7. mysql> /*master*/select * from sharding_test where id < 1000
  8. +----+------+------+----------+----------+ 
  9. | id | name | age | birthday | nickname | 
  10. +----+------+------+----------+----------+ 
  11. 1 | test | 0 | NULL | NULL | 
  12. +----+------+------+----------+----------+ 
  13. 1 row in set (0.00 sec) 
  14. mysql> /*master*/select * from sharding_test; 
  15. ERROR 1179 (sqlst): Proxy Warning - sharding dbgroup is in trans, transaction will not work across multi dbgroup 
  16. mysql> commit; 
  17. Query OK, 0 rows affected (0.00 sec) 
  18. mysql> /*master*/select * from sharding_test; 
  19. +----+------+------+----------+----------+ 
  20. | id | name | age | birthday | nickname | 
  21. +----+------+------+----------+----------+ 
  22. 1 | test | 0 | NULL | NULL | 
  23. +----+------+------+----------+----------+ 
  24. 1 row in set (0.00 sec) 

請注意第二條語句, 由于之前將insert與dbgroup0綁定了, 所以從此之后Atlas在此事務中只接受涉及dbgroup0的語句, 其他語句將會執行失敗. "/*master*/select * from sharding_test;" 執行失敗是因為, 這個語句會命中所有的dbgroup, 也是同理, 不支持這種語句. 在commit之后, sharding dbgroup不再處于事務狀態, 就可以執行跨shard的操作了

換句話說, 如果是hash方式sharding的表, 基本上事務是無法支持的, 因為hash的表, 大部分操作都是會涉及多個dbgroup的.

增加節點

注意: 暫時只支持range方式的節點擴展, hash方式由于需要數據遷移, 暫時未做支持.

擴展節點在保證原來節點的范圍不改變的情況下, 如已有dbgroup0為范圍0 - 999, dbgroup1為范圍 1000 - 1999, 這個時候可以增加范圍>2000的節點. 如增加一個節點為2000 - 2999, 修改配置文件, 重啟Atlas即可.


 

 

責任編輯:Ophira 來源: 運維幫
相關推薦

2019-01-11 18:22:07

阿里巴巴技術開源

2019-04-24 15:42:52

DCache開源數據庫

2019-10-10 09:16:34

Zookeeper架構分布式

2017-09-01 05:35:58

分布式計算存儲

2019-06-19 15:40:06

分布式鎖RedisJava

2023-05-29 14:07:00

Zuul網關系統

2017-10-27 08:40:44

分布式存儲剪枝系統

2023-10-26 18:10:43

分布式并行技術系統

2024-03-01 09:53:34

2018-07-17 08:14:22

分布式分布式鎖方位

2023-05-12 08:23:03

分布式系統網絡

2022-06-27 08:21:05

Seata分布式事務微服務

2011-03-28 13:39:45

nagios分布式

2023-02-11 00:04:17

分布式系統安全

2022-06-21 08:27:22

Seata分布式事務

2017-07-26 15:08:05

大數據分布式事務

2022-10-25 14:05:47

共識算法系統

2021-11-08 10:52:02

數據庫分布式技術

2024-01-10 08:02:03

分布式技術令牌,

2022-03-29 23:17:52

PostgreSQL集群Citus
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品一区二区三区在线播放 | 手机av在线 | 成人国产精品久久久 | 亚洲视频免费在线观看 | 一区二区日韩 | 在线观看视频91 | 精品久| 成人综合久久 | 欧美色综合一区二区三区 | 日韩中文字幕第一页 | 国产一级淫片免费视频 | 一区二区三区四区在线视频 | www.国产| 麻豆国产一区二区三区四区 | 成人做爰69片免费观看 | 老牛嫩草一区二区三区av | 亚洲欧美日韩精品久久亚洲区 | 美女在线视频一区二区三区 | 91在线电影| 久草在线在线精品观看 | 日本不卡在线观看 | 99久久免费精品国产免费高清 | 日日夜夜av| 91国产精品 | 国产精品久久久亚洲 | 毛片久久久 | 日韩免费av | 亚洲综合无码一区二区 | 欧美国产日韩在线观看成人 | 亚洲黄色国产 | 日韩精品一区二区三区中文字幕 | 日韩精品一区二区三区中文字幕 | 蜜桃在线一区二区三区 | 久久精品国产免费 | 欧美日韩精品久久久免费观看 | 国产精品久久国产精品久久 | 中文字幕一二三 | 中文字幕不卡在线88 | 在线一区视频 | 69av片| 日韩最新网址 |