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方式.

  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,

  mysql> begin; Query OK, 0 rows affected (0.00 sec) mysql> insert into sharding_test(id, name, age) values(1, 'test', 0); Query OK, 1 row affected (0.00 sec) mysql> insert into sharding_test(id, name, age) values(1500, 'test', 0); ERROR 1179 (sqlst): Proxy Warning - sharding dbgroup is in trans, transaction will not work across multi dbgroup mysql> /*master*/select * from sharding_test where id < 1000; +----+------+------+----------+----------+ | id | name | age | birthday | nickname | +----+------+------+----------+----------+ | 1 | test | 0 | NULL | NULL | +----+------+------+----------+----------+ 1 row in set (0.00 sec) mysql> /*master*/select * from sharding_test; ERROR 1179 (sqlst): Proxy Warning - sharding dbgroup is in trans, transaction will not work across multi dbgroup mysql> commit; Query OK, 0 rows affected (0.00 sec) mysql> /*master*/select * from sharding_test; +----+------+------+----------+----------+ | id | name | age | birthday | nickname | +----+------+------+----------+----------+ | 1 | test | 0 | NULL | NULL | +----+------+------+----------+----------+ 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即可.

时间: 2024-12-05 00:24:16

Atlas 分布式版重磅来袭的相关文章

百度移动转站大赛火热开幕 转站神器重磅来袭

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 金秋十月,火热激情.为了顺应移动互联浪潮来袭,推动移动互联行业快速发展, 9月24日-10月31日,百度举办"云端绽放"Site App移动转站大赛,仅需4步,轻松实现WebApp在线效果定制及生成,为手机终端WebApp提供更具优势的内容可用性.浏览和交互操作的易用性,进而帮助参赛者获得更多的移动流量及用户引入,提升网站

我欲封天 修仙版今日重磅来袭

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;       [科技讯]7月29日信息,盛大游戏3721.html">2014年回合力作<我欲封天>修仙版将在今日17:00重磅开启,服务器[五色至尊]等待你加入我们的幸福修仙队伍.修仙版在传统回合玩法的基础上有了诸多创新,新增玩法与原著高度契合,装备成长在公平免费的基础上以更加酷炫的方式呈现.超多妹子等你加入,来<我欲封天>一

云数据库HBase版重磅商业化上线

随着近些年互联网行业的飞速发展,很多业务的数据量都在急剧的增大,传统的RDBMS数据库逐渐撑不住,逐渐出现读写分离策略.分库分表策略.从数据结构上看,非结构化数据的量在不断剧增.总之,从架构搭建.程序调用到后期运维上,数据库的复杂度变的越来越高,且很多中小型的公司,数据规模都达到了数TB.数PB的级别,对数据的吞吐要求也达到了百万QPS,甚至是千万级别. HBase的起源 在这样的大背景下,HBase出现了,它是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Goog

“红包风暴”重磅来袭下的网络狂欢

中介交易 SEO诊断 淘宝客 云主机 技术大厅 在2014年新年初始,"抢红包"成为网友网络生活的重要构成部分.据 @让红包飞 官方微博数据:活动8小时内送出红包超2400万个,平均每分钟送出5万多个,红包总价值高达500万元,创社会化媒体活动新纪录.至1月9日,发出的红包超过2亿个,上线仅3天,发出红包数就超过2013年活动发出红包的总数,连 @让红包飞 微博小编也感慨"幸福来得总是如此突然啊!" 翻看2014年"让红包飞"活动,相比于2013

360手机助手最IN潮流榜第二期 “不得姐”重磅来袭

今日,中国最大的移动应用开放平台--360手机助手发布<移动应用最IN潮流榜>第二期."百思不得姐"在一片呼喊声中飙至榜首,"啪啪"."美图贴贴"等 众多"小而美"的休闲应用受到用户追捧.游戏方面,因元旦节前,一系列的热门游戏争相发新版.贺新年," 捕鱼达人2新年版"."神仙道"等一系列热门游戏的新版本得到众多玩家的青睐. 360手机助手最IN潮流榜将每周一期,秉承"

乐视“看球”客户端安卓版重磅出击欧冠中超一网打尽

图一欧冠.亚冠.中网.中超--多场震撼赛事接连袭来,还在守着电视看比赛吗?继iOS版发布之后, 乐视网重磅推出"看球"移动客户端Android版,让你随时随地看球不慌张!9月28日安卓市场震撼首发,为你打造最激情的饕餮体育盛宴."看球"客户端看球赛,到底有哪些不一样?----小编为你来揭晓:·视频直播,集锦回顾,精彩内容尽收揽使用乐视"看球"客户端,你除了可以尽享视频直播,还可以观看赛事点播.热点新闻.集锦回顾等精彩视频,回味进球瞬间,告别文字直

大波U2促销热潮重磅来袭

IUNI U2极光绿如约而至,U2的抢购热潮也在炎炎夏日再度升温.从7月7日开始,为了回馈一直以来用户对IUNI U2的关注,IUNI携手京东商城开展"单手机皇,璀璨耀世"礼包大放送活动.这是继U2极光绿面世之后,IUNI抛出的又一枚"重磅炸弹". 最值得用户期待的是,在这场由IUNI和京东共同掀起的购机风暴中,IUNI U2"限量发行"将成为历史.U2全线产品从此进入放量销售时代.相信这对于每一位渴望拥有一台IUNI U2的网友来说都是个令人无

谷歌Nexus 7重磅来袭 谁之幸?

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 谷歌在I/O开发者大会上推出的这款平板,是首款自主品牌的Nexus平板电脑,售价只需199美元.但是有关人士认为,鉴于之前谷歌靠着拙劣的Android跃到平板电脑行列的行为,有人并不希望Nexus的出现打破平板电脑的局面. 几天前,我们首次看到了Nexus 7平板电脑的细节,也就在昨天下午,华硕高管向路透社证实了平板电脑的存在.就像Nexus

《陌陌劲舞团》重磅来袭打造你身边的舞台

经过了四个月的内测,由移动社交应用陌陌联合久游网推出的3D音舞类手机游戏<陌陌劲舞团>在12月11日正式上线,iOS和Android平台同时发布.<陌陌劲舞团>是一款集音乐.社交.养成于一体的3D音舞类休闲游戏.玩家不仅能体验到丰富多彩的音舞游戏乐趣,更有海量服饰随意搭配,打造时尚游戏造型.而找好友.组队伍.拍照分享.排行竞技等新颖的社交养成玩法,为玩家提供了多维度的社交方式.无论是竞技还是好友雇佣,都能使玩家领略到社交娱乐的乐趣,让音乐游戏不再孤独与单调.此次久游网为陌陌量身打造