MySQL 高可用架构在业务层面的分析研究

  • 时间:
  • 浏览:1
  • 来源:大发5分排列5_极速5分排列3

–a根据拆分维度,做mod进行数据表拆分,大部分全是取模的拆分机制,比如hash的16模原则等。

水平拆分原则:

机会这不到 历史数据还在online库上边机会online表上边,不到 就会影响online的性能,全都对于三种,可不前要把数据迁移到新的历史数据库上,三种历史数据库可不前就让我mysql也可不前就让我nosql,也可不前就让我数据仓库甚至hbase大数据等。

当然这里会用到3台数据库服务器,也许会增加采购压力,但会 我们歌词 都我们歌词 都我们歌词 都 歌词 可不前要提供更好的对外数据服务的能力和途径,实际中尽机会两者兼顾。

– 按照用户维度进行拆分成6另有5个分库,102另有5个分表

(3)读多写少MMSS-游戏

相对于传统行业的相对服务时间9x9x6机会9x12x5,机会互联网电子商务以及互联网游戏的实时性,全都服务要求7*24小时,业务架构不管是 应用还是数据库,都前要容灾互备,在mysql的体系中,最好通过在最开始英文阶段的数据库架构阶段来实现容灾系统。全都这里从业务宏观厚度阐述下mysql 架构的方方面面。

user_id%1024 拆分到1024张分表中

(1)读多写少

(5)历史数据迁移

M(R)仅仅是另有5个备库,不到M(WR)挂了不到 ,才会切换到M(R)上,三种不到 M(R)就变成了读写库。比如游戏系统,有全都Salve会挂载上边另有5个M(R)上边。

虚线表示跨机房部署,比如电子商务系统,另有5个Master既有读全是些写,对读数据一致性前要比较重要的,读要装下 Master上边。

6.2.5 案例说明

u 操作1:采用Configure DB

– 拆分不到 的查询操作,另有5个Data Engine  Service,三种DES上边配置了所有数据库实例的映射关系,前要在APP应用端安装另有5个Agent,是同步逻辑,在JDBC层实现,DES可不前要实现读写分离,原理可不前要参考TDDL的实现。

前言:

原文链接: http://blog.jobbole.com/8307/

二:MySQL派发—常见架构

u 操作2:采用Proxy

6.2.2 单库多表拆分

–a跨事务操作:分布式事务,通过预写日志的辦法 来间接地实现。

主要全是处理容量问题报告 ,就让我处理性能问题报告 而扩展的,加入当前实例只另有5个DB,另有5个大表,另有5个大表就把整个实例占满了,三种不到 就不到拆分db 了,机会只另有5个单表,三种不到 我们歌词 都我们歌词 都我们歌词 都 歌词 就不到拆表了,拆表的辦法 主就让我处理性能问题报告 ,机会单个表越大,对于mysql来说遍历表的树形底部形态遍历数据会消耗更 多的资源,有不到 另有5个简单的查询就机会会引起整个db的全都叶子节点全是变动。表的insert、update、delete操作全是引起几乎所有节点的 变更,此时操作量会非常大,操作的不到 读写性能全是很低,三种不到 我们歌词 都我们歌词 都我们歌词 都 歌词 就可不前要考虑把大表拆分成多个小表,工作经历中是按照hash取模打散成16个小表, 全是按照id主键/30  取模打散到30个小表当中,下图实例是打散成另有5个小表。

A,但会 对于全是严格的实时性的统计,mysql有个很好的机制是binlog,我们歌词 都我们歌词 都我们歌词 都 歌词 可不前要通过binlog进行解析Parser,解易挥发来写入统计 表进行统计机会发消息给应用端多多线程 来进行统计。三种是准实时的统计操作,有一定的短暂的可接受的统计延迟问题报告 ,机会要30%实时性统计不到查询M1主库 了。

–b根据数据容量,划分数据库拆分

(6.2) 水平拆分

机会是游戏行业励志的话 ,读非常多蛮明显的,会出先一般另有5个Master全是挂上10个以上的Slave的情况,全都三种不到 ,可不前要把一部分Slave 挂载新的M(R)上边。至少会减少全都压力,不到 至少服务器挂掉的不到 ,不想对所有的slave有影响,还有一部分在M(R)上的slave在继续,不想 对所有的slave  受到影响,见图3,

比如usern库中,a、b、c表全是强关联的,全是完整篇 的业务逻辑指在,这里不到用户(供应商)纬度是不到 关联的,那三种不到 就可不前要把数据以用户的纬度来进行拆分。

可不前要横向拆分,可不前要纵向拆分,可不前要横向纵向拆分,还可不前要按照业务拆分。

三种异地容灾是非常重要的,但会 机会是单机的,单边的业务,万一idc机房故障了,一般就会影响在线业务的,三种   造成业务2小时无法应用,对于在线电子商务交易来说,影响是蛮大的,全都为了最大限度的保证7*24小时,前要要做到异地容灾,MM要跨idc机房。着实 对资源有全前要求,但会 对HA来说是不可缺少的,一定要有三种MM机制。

对读一致性的权衡,机会是对读写实时性要求非常高励志的话 ,就将读写都装下 M1上边,M2就让我作为standby,就让我采取和上边的一(4)的读少写多的一样的架构模式。

做切换的不到 ,把所有的读写从M1直接切换到M2上就可不前要了。

6.2.3 多库多表拆分

取模的不到 ,可不前要用id的最后4位数据机会3位数字来取模就可不前要了。

比如,订单处理流程,不到 对读前要强一致性,实时写实时读,类事三种涉及交易的机会动态实时报表统计的全是采用三种架构模式

6.2.1 实时数据历史数据的拆分

– c. 尽量处理跨库查询。

和历史数据迁移是一样的逻辑,就让我要将online库的数据迁移到listory的数据库上边,对于实时的读写来说,数据是装下 online   db库上边,对于时间较远的数据来说,是装下 历史History DB记录库上边的,这里的历史库可不前就让我mysql也可不前就让我别的nosql库等。

(1)强一致性

6.1.1横向拆分

在单库多表的基础上,机会单库空间资源机会指在问题以提供业务支撑励志的话 ,可不前要考虑多库多表的辦法 来做,处理了空间问题报告 和性能问题报告 ,不过会另有5个问题报告 就让我跨库查询操作,查询就会有另外的策略,比如说加另有5个logic  db层来实现跨库跨实例自动查询,简单如下图所示:

B,还有三种offline统计业务,比如月份报表年报表统计等,三种完整篇 可不前要把数据装下 数据仓库上边机会第三方Nosql上边进行统计。

–b跨库查询:数据汇总or消息服务

数据操作

实现途径是通过 slave库查询出所有的数据,但会 根据业务规则比如时间、某另有5个纬度等过滤筛选出数据,装下 历史数据库(History   Databases)上边。迁移完了,再回到主库M1上,删除掉那些历史数据。不到 在业务层面,查询就要兼顾现在实时数据和历史数据,可不前要在filter   上边根据迁移规则把online查询和history查询对接起来。比如说另有5个月之内的在online库查询另有5个月不到 的在history库查询,可不前要把 三种规则装下 DB的迁移filter层和应用查询业务模块层。机会可不前要励志的话 ,还可不前要配置更细化,通过应用查询业务模块层来影响DB的迁移filter层, 比如不到 查询分为另有5个月为基准,现在查询业务变化了,以1五天为基准,不到 应用查询业务模块层变化会自动让DB的filter层也变化,实现半个自动化, 更加智能全都。

6.3 集群管理

Mysql的sharding全是其局限性,sharding不到 的数据查询访问以及统计全是有很大的问题报告 ,mysql的sharding是处理share  nothing的存储的三种分布式的辦法 ,大体上分为垂直拆分和水平拆分。

(2)读多写少MMS-电商

就让我用户1和用户5其他人 全是一套完整篇 的业务逻辑,但会 彼此之间不关联,全都就可不前要把用户1和用户2数据拆分到不同的数据库实例上边。目前全都互联网公司机会游戏公司有全都业务全是以用户纬度进行拆分的,比如qunaer、sohu  game、sina等。

(4)读少写多

– a. 尽量均匀的拆分维度。

Mysql库上边的横向拆分是指,每另有5个数据库实例上边全是全都个db库,每另有5个db库上边全是A表B表,比如db1库有A表B表,db2库里全是 A表和B表,不到 我们歌词 都我们歌词 都我们歌词 都 歌词 把db1、db2库的A表B表拆分出来,把另有5个库分成另有5个,就拆分成db1、db2、db3、db4,其中db1库和db2库放A表 数据,db3库和  db4库放B表的数据,db1、db2库上边不到A表数据,db3、db4库上边不到B表的数据。

u 案例:

机会既全是很强的一致性又全是很弱的一致性,不到 我们歌词 都我们歌词 都我们歌词 都 歌词 就采取上边的策略,就让我在同机房再部署另有5个S1(R),作为备库,提供读取服务,减少M1(WR)的压力,而另外另有5个idc机房的M2只做standby容灾辦法 的用途。

– 拆分不到 的查询操作,做另有5个Configure   DB,三种DB存放的是所有实例的库表的映射关系,当我APP发来另有5个请求查询user1的数据,不到 三种user1的数据是存装下 上千个实例中的哪一 个库表呢?三种关联信息就在Configure  DB上边,APP先去Configure   DB上边取得user1的关联系信息(比如是存装下 d_01库上的t_0016表上边),但会 APP根据关联信息直接去查询对应的d_01实例的   t_0016表上边取得数据。

(2)弱一致性

跟水平拆分不为社 类事,但会 有不同的地方。比如另有5个供应商,机会整个网站上有10个供应商,另有5个网站上边每另有5个供应商全是一定的量,但会 供应商之间的数据量规模都差太大的规模,不到 三种不到 就可不前要使用供应商的纬度来做拆分。

机会是电子商务类型的,三种读多写少的,一般是另有5个master拖上4到6个slave,所有slave挂载在另有5个master也足够了。

切换的不到 ,把M1的读写业务切换到M2上边,但会 把所有M1上的slave挂到M2上边去,如下所示:

水平拆分相对要简单全都,但会 难度偏大,会原应分布式的情况、跨数据的情况、跨事务的情况可不前要分为至少三类,1是历史数据和实时数据拆分,2是单库多表拆分,3是多库多表拆分。

PS:三种拆分主要针对于不同的业务对表的影响不大,表之间的业务关联很弱机会基本上不到 业务关联。拆分的好处是不相关的数据表拆分到不同的实例上边,对数据库的容量扩展和性能提高的均衡来说,全是蛮有好处的。

6.1.3 横向纵向拆分

– b. 尽量处理跨库事务。

目前三种share disk的辦法 ,除了oracle的业务逻辑层做的非常完善之外全都的处理方案都还全是很完美。

(4)统计业务

把同另有5个实例上的不同的db库拆分出来,装下 单独的不同实例中。三种拆分的适应场景和要求是db1和db2是不到 几个业务联系的,类事6.1.2里 面的A表和B表那样。机会你用到了跨库业务共同使用db1和db2励志的话 ,买车人建议要重新考虑下业务,重新梳理下尽量把另有5个模块的表装下 另有5个库上边,何必 垮 库操作。

6.1.2纵向拆分

读和写差太大,但会 读不到影响写的能力,把读写装下 M1(WR)上,但会 把一部分读也装下 M2(R)上边,当然M1和M2也是跨机房部署的。

–  拆分不到 的查询操作,做另有5个Proxy,APP访问Proxy,Proxy根据访问规则就可不前要直接路由到具体的db实例,生成新的sql去操作对应的db实例,但会 通过Proxy协议进行操作把操作结果返回给APP。

数据库上做大查询的统计是非常消耗资源的。统计分为实时的统计和非实时的统计,机会mysql主从是逻辑sql的模式,全都不到达到30%的实 时,机会是online  要严格的非常实时的统计比如像火车票以及金融异地结算等的统计,mysql这块全是它的强项,就不到查询M1主库来实现了。

设计:

(3)上边一致性

全都刚起步的,开始英文为了快速出产品,就把全都的库所有的表都装下 另有5个实例上,等业务发展后,就面临着数据拆分,这里就会把横向纵向拆分结合起来,共同实现,如下图所示:

(6.1)垂直拆分

像oracle三种基于rac基于共享存储的辦法 ,不前要sharding只前要扩从rac存储就能实现了。但会 三种代价相对会比较高全都,共享存储一般都比较贵,随着业务的扩展数据的爆炸式增长,让我不停累计你的成本,甚至达到另有5个天文数字。

通过 binlog的辦法 实现统计,在互联网行业,尤其是电商和游戏这块,差太大可不前要处理90%以上的统计业务。有不到 机会用户机会客户提出要实时read- time了,我们歌词 都我们歌词 都我们歌词 都 歌词 可不前要沟通一下为那些前要实时,了解具体的业务场景,全都机会真的不前要实时统计,前要有所权衡,前要跟用户和客户多次有效沟通,做出比较 适合业务的统计架构模型。

一,MySQL派发—业务分析

本文转自 msj0905 51CTO博客,原文链接:http://blog.51cto.com/sky66/1691730

三种库纵向拆分上边,单独的库db1,表A和表B是强关联的。如下图所示:

6.1.4 业务拆分

横向扩容:比较错综复杂,在纵向扩容成另有5个库的基础之上,再一次对库的表进行扩容,全都前要及时通知Configure  DB和DES更细库和表的路由连接信息。

每个分库中存放1024/64张分表

(5)读写平分秋色

打个比方,作为电商来说,每个库上边全是日志表和订单表,就让我A表是日志表log表,B表是订单表Order表,一般说来写日志和写订单不到 强关联 性,我们歌词 都我们歌词 都我们歌词 都 歌词 可不前要讲A表日志表和B表订单表拆分出来。不到 三种不到 就做了一次横向的拆分工作,将A表日志表和B表订单表拆分开来装下 不同的库,当然A表和B表 所在的数据库名也可不前要保持一致(PS:在不同的实例上边),如下图所示:

纵向扩容:另有5个实例拆分成多个实例,纵向拆分比较简单,修改的东西比较少,拆分的不到 要通知到Configure  DB机会DES,以免拆分不到 查询不到数据机会数据录入不到新的db上边,如下图所示:

机会是弱一致性励志的话 ,可不前要通过在M2上边分担全都读压力和流量,比如全都报表的读取以及静态配置数据的读取模块都可不前要装下 M2上边。比如月统计报表,比如首页推荐商品业务实时性要求全是很高,完整篇 可不前要采用三种弱一致性的设计架构模式。

– 优势是Proxy和db实例是在另有5个网段,不到 Proxy与db实例的操作的时间是非常短的。

历史数据迁移,前要尽量不影响现在线上的业务,尽量不影响现在线上的查询写入操作,为那些要做历史数据迁移?机会全都业务的数据是有时效性的,比如 电商中的机会完成的历史订单等,不想再有更新操作了,不到很简单的查询操作,但会 查询就让我会很频繁,甚至机会一天全是会查询一次。

比如PV、UV操作、页数的统计、流量的统计、数据的汇总等等,都可不前要划归为统计类型的业务。

6.2.4水平拆分小结

原应读何必 会影响写的数率单位,全都读写都可不前要装下 另有5个M1(WR),而另外另有5个不提供读就让我提供写,只提供standby冗余异地容灾。

(6)MySQL Sharding

PS:看过全都使用mysql的人,突然 把全都不到 业务关联性的表装下 另有5个库上边,机会突然 把全都个的db库装下 同另有5个实例上边,就像使用 oracle那样就另有5个   instance的概念而已。Mysql的使用一大原则就让我简单,尽量单一,简单的去使用mysql,库要严格的分开;表不到 关系的,要严格拆分成库。这 样励志的话 扩展我们歌词 都我们歌词 都我们歌词 都 歌词 的业务就非常方便简单了,只前要把业务模块所在的db拆分出来,装下 新的数据库服务器上即可。

u 操作3:采用Data Engine

切换的不到 ,把一部分读和完整篇 写从M1切换到M2上就可不前要了。