饿了么MySQL多IDC架构设计

关于饿了么MySQL多IDC架构外面材料比较多,而且目前属于上线运行,运行比较好的业务,这里做一个记录。

分区依据: 把数据库首先分Zone,然后依赖于地区ID分布到不同Zone中,同一个Zone依赖于商户ID分布到不同分版中(shard)。每个Zone在不同IDC中进行互备。

底层数据同步依赖于自研的DRC进行数据同步。

使用上面的结构的好处就是两个IDC基本可以做到同时对外提供服务,不好的地方是,基本是原来的数据量直接翻倍的容量。

根据数据使用上不同,把Zone拆分为: 全局数据GlobalZone(单IDC写入,多IDC可读),多活架构(真正多活)。

全局数据GlobalZone

这种架构相于对简单,单节点写入, 容易控制数据的一致性。

多活架构(shardingZone):

数据分维度治理,每个单元的业务,都在自已的IDC中完成,不依赖于别的IDC。读和写都在本地IDC中完成, 正常情况下本地业务只需要本地机房的数据,对其它机房的数据无依赖,跨IDC数据延迟时无影响。

每个机房有独立一块区间的自增区间, 这块估计也是使用的自增的,1,3,5,… or 2,4,6,… 这种样子。 在业务设计上尽量让单个IDC接入的业务在单位IDC中完成,不依赖于其它IDC。 如果发生更新冲突,依赖于表里的DRC字段,判断谁是最新的数据,用最新数据覆盖旧数据。相当于主从复制处理中的1062错误(这块实现感觉并不严格),也是全程无锁设计,对于润秒时,可能有问题。

对于自增这块的,这块设计上,可以考虑用snowflake类似的算法,生成ID,可以让每个Zone保持某个特殊的数开头,这样会更清晰一点,但也要考虑顺序在里面,这也许是饿了么直接采用主建的原因。

饿了么在MySQL多IDC设计中遵循:

  1. 业务内聚,一个订单位的处理过程在一个机房中完成,减少可能的延迟。
  2. 可用性优先,优先保证系统可用,让用户可以下单吃饭,容忍暂时的数据不一致,事后修复。
  3. 保证正确性, 在确保可用的情况下,需要对数据做保护以避免错误
  4. 业务可感,业务团队修改逻辑,能够识别出业务单元的边界,只处理本单元的数据,打造强大的业务状态机,能发现和纠正错误。(这点我觉的才是核心,任何多idc,永远可用的业务,不能做到业务没感知,如果要求业务没感知的DB跨IDC设计都是扯蛋。)

 

如果你有其它感兴趣的内容,可以入群联系我。一同交流。

作者:吴炳锡 来源:http://wubx.net/ 联系方式: wubingxi#163.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究.

滴滴MySQL架构及自动化运维工作

在上周4.14 北京3306π活动中,看到朱进桌分享了滴滴的MySQL架构及一些自动化工作,一方面感吧,滴滴同学面对的DB压力也比较大,另一方面也赞叹滴滴的DBA同学牛。

在这里小记一下:

滴滴的MySQL架构

 

这个结构算是一个数据库四层结构和美团,小米的数据库架构都有点类似,整体结合如下:

  • 第一层是基于LVS的一个FNAT接入, 对后面的dbproxy做负载均衡
  • 第二层是DBproxy ,在滴滴的dbproxy中好象没有分库分表功能,可以理解为是ProxySQL的基于port的分组或是读写分离(细节不多)
  • 第三层 基于MHA做的主从高可用切换。 看样子滴滴的数据库还没升级到GTID :),估计也是数据量太大,不好升级。 不过,还是值得考虑升级到MySQL 5.7.
  • 第四层 MySQL主从这块采用,双主结构,后面接两个从库。这个结构GTID环境中非常好运维。有点失误忘了问作者,他们是不是使用的GTID复制。

 

滴滴数据库平台中主要模块

从上面的主要模块来看,大多是基于开源来构建,来的快。 也正所谓作者讲的,平台小的时僮做自动化不划算,平台做大,再来做自动化,推动实在太难。 采用开源的东西,小做改造就可以快速的实用起来。

滴滴DB自动化整体架构介绍

从整体结构上看, 在自动化平台中实现了: 自动化备份恢复, 自动化表结构变更, SQL审计,SQL统计等在线辅助系统。在自动化这块大量依赖于saltstack实现。

在大规模自动化平台saltstack目前在国内许多公司得到验证都是可行的。 而且效果不错,当年飞信的自动化运维也是大量的使用saltstack封装。

滴滴自动化平台技术栈

看了这个图也深深的感受到现在做个MySQL DBA不容易啊。 除了MySQL需要搞定外, 还需要一堆的周边工具待你发现,同时还要会一门语言能把这些串起来,现在运维及云平台语言,基于是Python和Golang的天下。 作者讲解的东西比较多,整体上觉的滴滴还属于中规中矩,踏实做事。

如果想了解更多3306π是滴滴自动化 PPT信息可以关注 3306pai公众号,回复“bj”获取 3306π北京的PPT打包下载。

作者:吴炳锡 来源:http://wubx.net/ 联系方式: wubingxi#163.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究.

新一代MySQL高可用:MySQL Plus

在基于MySQL传统复制的时代(MySQL版本低于5.5)MHA在MySQL高可用中可以说是独领风骚。在MySQL 5.6及GTID的出现后,MHA在这方面就显的不给力,和MHA作者交流,作者基本放弃该软件的维护,MHA作者现就职在Facebook,也没在使用MHA,他也认为在GTID环境下MHA存在的价值不大,不过你如果你还在使用传统复制,还是可以考虑使用MHA做主从的高可用(太老了,建议升级)。

下面我们围绕以下几点来讨论一下:

  1. 在MySQL 5.7 后为什么不需要MHA
  2. MySQL Plus 是什么,能解决什么问题
  3. MySQL Plus看他们如何搞定金融支持

MySQL 5.7后为什么不需要MHA

基于MySQL 5.7 GTID复制已经成熟,另外基于MySQL5.7的增强半同步性进一步提升: 所以在使用MySQL 5.7的复制可以使用: MySQL 5.7+GTID+增强半步, 在该结构中, 不存在会丢数据的问题。 所以MHA在这个结构基本失去了存在的意义。

但使用: MySQL 5.7+GTID+增强半步,也意为着新的知识,可能需要DBA同学们也要更新一下知识。而且在MySQL 5.7中引入binlog group commit, 又是对复制的一个加速。 所以说MySQL5.7 在复制完整性及性能上都有较大的提升,建议没升级的同学尽快升级了。

官方对MySQL 5.7的测试传送门: https://www.mysql.com/why-mysql/benchmarks/

MySQL Plus是什么,能解决什么问题

在3306π北京活动中 青云的蒙哲分享了青云RDS中高可用组件: MySQL Plus。 MySQL Plus是基于一套Raft构建的MySQL中自动选主及维护主从的套件,整体结构如下:

在该结构中Xenon之间会进行通信,在该结构中推荐三个节点的MySQL构建复制,听作者讲也支持两个节点的MySQL构建集群。

在MySQL Plus主要解决:

  1.  集群切换的强一致性(从上面架构看,更多的依赖于MySQL增强半同步,MySQL Plus在控制切换时,会做复制完成校验,从而且保证数据一致)
  2. 主从秒级别切换
  3. 无中心化自动选主

MySQL Plus看他们如何搞定金融环境

MySQL Plus 可以简单的理解是一个MySQL 5.7 GTID增强半同步复制的高可用管理组件。 在MySQL半同步配置方面,为了支持金融业务,青云给的配置如下:

  • rpl_semi_sync_master_wait_no_slave=ON
  • rpl_semi_sync_master_timeout=1000000000000000000
  • rpl_semi_sync_master_wait_point=AFTER_SYNC

看到这个配置我才想明白为什么他们建议是三个节点,在rpl_semi_sync_master_timeout配置上可以说不允许退化到异步复制, 另外RadonDB负责人交流,在MySQL Plus架构中主节点上至少要求一个Slave给半同步应答。 所以2个节点对架构的稳定性也是一个保证。 另外在金融环境中,作者推荐所有请求都在主库上完成, 免的存在复制延迟造成交易数据异常。

在金融架构中,青云也提供一套基于MySQL Plus之上构建建的分库分表机制, 基于MySQL的事务强一致性约,在该平台支持OLTP和OLAP更感觉有点NewSQL的感觉。

下面是官方给的一个总结:

重大消息

如果想了解更多3306π是青云MySQL Plus PPT信息可以关注 3306pai公众号,回复“bj”获取 3306π北京的PPT打包下载。

MySQL Plus 官方要开源了,希望通过MySQL Plus给MySQL 5.7 GTID复制提供一个新的高可用方案。

更重大消息: QingCloud RDS : RadonDB也要开源了,大家期待一下吧。 如果感兴趣提前体验或是更多的关注 RadonDB发展,也可以加到QQ群:748415432  和群主及 RadonDB负责人直接对喊话。   技术在于相互沟通,你的建议也需是将来一个非常不错的功能。

作者:吴炳锡 来源:http://wubx.net/ 联系方式: wubingxi#163.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究.

招商银行为什么使用MySQL

      对于金融行业使用MySQL可以说也比较早,例如腾讯的财富通从开始到现都是基于MySQL构建,但对于传统银行企业使用MySQL我也是一直存在好奇的想法。 这次在3306π北京站有幸听了招商银行王龙的分享也解决了我几个疑问,特Mark一下。

  1. 招商银行在走向开源的道路为什么选择了MySQL,而不是其它数据库?
  2. 招商银行在使用MySQL大概的规模及情况是什么?
  3. 招商银行是如何管理他们的MySQL?
  4. 他们成功的心得是什么?

招商银行为什么选择了MySQL?

在这一点上,听作者讲他们内部也做了大量的调研,例如PostgreSQL,TiDB,MySQL等。 最终选择了MySQL,不是说MySQL最优秀,也不是其它DB不优秀, 更重要的MySQL可以对他们的业务模型的支撑上更方便一点,同时团队的更加容易上手。具体的原因如下:
  1. 明确业务模型,不为可能需要的功能买单. MySQL足以支持现有的业务, 而且基准测试性能不弱。
  2. 本着简单的原则,不选复杂。 更多的人熟悉,更利于团队开发。
  3. 组建分布式DB,更方便快速扩容。
  4. 通过主从复制,读写分离等技术,更方便的实现多地多活技术。
  5. 选择MySQL更利用云服务化和DevOPS开发。

招商银行在MySQL使用上大概的规模

目前招商银行在使用MySQL将近两年, 目前作者讲有单业务集群分片在上百规模。 按这个分片来推算可以说是我听过最大的MySQL分布式系统。 该集群主要用于银行帐单查询相关业务。

招商银行如何管理他们的MySQL

这个直接引入原文中的PPT吧。 真的不能小看招商银行两年时间在MySQL云化平台做的相当出色。
上面可以看出来他们在资源申请上分三个类型,对于资源对齐方面确实做的不错。 想做MySQL平台的同学,仔细看看上面的两个图片。

招商银行在MySQL大规模使用上成功的心得

在这点招商银行总结金融架构13条(请阅读PPT),也很赞。 这里限于篇幅不在逻列。 我更多的关注对方在MySQL上的使用,这里看一个他们的分库分表决策: 分库常见几个基本问题: 在分库分表中作者见解也比较独到。也可以说是经过实际项目磨练出来的经验。 PPT已经发布在3306π的公众号上,关注3306pai公众号,回复“bj” 获取全部PPT。 作者:吴炳锡 来源:http://wubx.net/ 联系方式: wubingxi#163.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究.

2017.4.6发车 |《MySQL 5.7高可用新玩法》

写在开始之前:

这次技术分享,在选择上面监很多犹豫。 原因如下: 最近在做企业服务过程中发现很多朋友对于MySQL知识还在停留在MySQL 5.1 或是 MySQL 5.5的状态。很多公司的开发规范也是针对5.5或是5.1编写。 而MySQL 5.7可以说是一个变化比较大的版本。 这次分享可以讲的话题有很多,如:

如果选择复制: MySQL 5.7 为止复制结构差不多组合出来有7-9种结构,对于每一种业务场景或是运维场景都有灵活的选择。

但最终定位在MySQL 5.7的高可用。从实际观查这个对于生产帮助更大。  希在本次分享中能对大家有帮助。

1、主题

《MySQL 5.7高可用新玩法》

2、嘉宾介绍

吴炳锡 知数堂培训联合创始人,前新媒传信首席DBA,吴炳锡老师具有多年MySQL及系统架构设计及培训教学经验,擅长MySQL大规模运维管理优化、高可用方案、多IDC架构设计,以及企业应用数据库设计等经验。

3、课程简介

MySQL 5.7版本中新增了真正意义上的多线程复制、多源复制、增强半同步复制,以及Group Replication,众多新特性让人眼前一亮。随着这些新特性的日益成熟,在MySQL 5.7上的高可用架构也可以有了新玩法。

在本次分享中,先介绍Group Replicaiton的实现原理,重点介绍MySQL 5.7下利用多源复制实现的高可用架构方案。

内容大纲:

1、MySQL 5.7在复制方面的几个新特性;

2、MySQL 5.7 Group Replication实现原理;

3、利用多源复制,实现新的高可用架构;

4、基于多源复制及Group Replication限制。

分享方

分享时间:2017.4.6(周四) 晚上20:30 – 21:30

分享方式:通过YY语音同步直播,以及在QQ&微信群发送PPT等图文内容

YY频道:53695719(需提前安装YY客户端,支持windows/ios/andriod多平台)

请提前加入知数堂技术交流QQ群:579036588,或扫描识别下面二维码加入。(已经在知数堂一群、二群的无需再加入三群,分享时三群联动)

关于知数堂

“知数堂培训”是由资深MySQL专家叶金荣、吴炳锡联合推出专业优质在线培训课程,主要有MySQL DBA实战优化、Python运维开发和 SQL开发优化三个课程,是业内最有良心、最有品质的培训品牌。

目前MySQL DBA实战优化班以及Python运维开发班均在招生中。学员已超600多人,众多优秀学员在腾讯、淘宝、支付宝、百度、网易、京东、乐视、去哪儿、滴滴、猎豹、58、微博、金山云、聚美、顺丰、德邦、韵达、苏宁、恩墨、沃趣、爱可生、37玩、宝存、人人贷、美的、新东方、平安金融等众多知名公司担任DBA等职位,在获得更好的职业发展机遇同时薪资也得到了大幅提升。

有兴趣的同学请关注 知数堂 官方公众号”izhishuedu” 后发送 “开班”、“招生”、“大纲” 等关键字即可获得课程详细信息。