当前位置:龙图IT服务 > 数据库 >

Atlas 分布式版重磅来袭来自360的MySQL中间层

作者:IT服务外包 发布时间:2015-06-25 阅读: 转至微博:

  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最近重点开发的一个功能, 此功能增加了Mysql的横向扩展性跟容量, 可以满足大部分企业的需求. 目前已经在github上以Sharding分支发布.

  Sharding的基本思想就是把一个数据表中的数据切分成多个部分, 存放到不同的主机上去(切分的策略有多种), 从而缓解单台机器的性能跟容量的问题. sharding是一种水平切分, 适用于单表数据庞大的情景. 目前atlas支持静态的sharding方案, 暂时不支持数据的自动迁移.

  Atlas以表为单位sharding, 同一个数据库内可以同时共有sharding的表和不sharding的表, 不sharding的表数据存在未sharding的数据库组中.

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

  当然, 由于Mysql分布式的局限性, Atlas Sharding对于SQL的特性支持也是有限的, 但是应付日常的需求, 已经足够了.

  复制的局限性很明显, 当数据库写入频繁, 但读取操作少的场景下, 复制就不适合了, 当写入过于频繁,很难由一台主机支撑的时候,我们还是会面临到扩展瓶颈。换句话说就是复制只能扩展读性能, 但是对于写性能的扩展是为力的.

  数据切分(sharding): 通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机),以达到分散单台设备负载的效果。这样当写入的时候, IO就被各个shard所分担了. 同时, 在每一个Shard上也是可以有复制存在的, 借助Atlas还是能在Shard上做读分离, 所以复制跟Sharding完全是互相补充, 不的.

  在Atlas中, 将一个组看做是数据存储的单位, 一个组由一台master, 零台或者多台slave组成(mysql主从同步需要由用户自己配置). 每个组之间的数据, 没有关系, 表的数据的各个部分存储在各个组中.

  每一个shard table都有一个shard key, 其可以是主键, 也可以主键, 但是这个列必须是一个整数. Atlas会利用这个shard key来判断应该把这条记录存放到哪一个数据库组中.

  现在Atlas Shardingh支持两种类型的数据切分: Range方式和Hash方式.

  hash跟range方式是恰好相反的, hash 可以应对数据递增的情景, 即使是在递增的情况下, sharding的数据也是均匀分布在各个数据组内的, 但是其缺点就是对于范围的查询通常都需要查询所有的dbgroup, 网络的消耗比较大.

  注意: 暂时只支持range方式的节点扩展, hash方式由于需要数据迁移, 暂时未做支持.

  扩展节点在原来节点的范围不改变的情况下, 如已有dbgroup0为范围0 - 999, dbgroup1为范围 1000 - 1999, 这个时候可以增加范围2000的节点. 如增加一个节点为2000 - 2999, 修改配置文件, 重启Atlas即可.

  稿源:运维帮

  本站文章除注明转载外,均为本站原创或编译

  欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区

  转载请注明:文章转载自:开源中国社区[

关键词: mysql语句