分布式数据库


1、先抛出两个问题

问题一、当mysql单表数据量爆炸时,你怎么办? 
问题二、当你的数据库无法承受高强度io时你怎么办?


MHA

4.3.2 MMM


5、 应用案例

5.1 记录一次mongo迁移mysql的过程(分库分表使用jproxy)

mongo怎么了?跟分片无关的部分简单说。

? mongo很好,只是业界并没有成熟的MongoDB运维经验,jd too。 
像高并发的系统 订单和库存 商品 还是拿nosql把,高并发的写,也不会打挂他,比如hbase,顶多GC频繁点,但是也是可用的。 
一致性完全可以CAS搞定,而不是mysql的排他锁。

  • 迁移数据库的一个方案 
    1) 中心化(统一入口) 
    2) 双写(先同步写mysql如果发生异常改异步,尽量避免服务不可用) 
    3) 倒库(jproxy支持通过游标形式全量遍历库-逐个表操作,可以利用其异步同步数据) 
    4) 数据校验 
    5) 切库提供服务

图 qianku

去mongo+优化方案(此处引入了分片的概念)

图 mongo-before
图 mongo-after

压测与性能

图 yace1
图 yace2
图 yace3
图 ump1
图 ump2

去mongo任务线

类型任务备注影线系统风险
design 海关迁移方案设计评审
design 分库分表技术选型 jproxy
apply 申请迁移相关应用(辅助系统) 跑批任务
apply 申请mysql集群 dbs系统
apply 申请jproxy集群 直接找接口人
apply 申请es集群 esm杰斯
coding trace表服务中心化 soa center
coding 涉及trace业务逻辑梳理,全部切换中心接口 接口完全适配 platform
verify 回归测试,并线上走单验证一段时间 先预发后正式
coding 实现mysql版本共2个表sql映射文件 基于自主研发的generator center
verify mysql版本sql映射文件单元测试 基于自主研发的generator center
coding trace表实现基于jproxy的分库分表 128个库(主) 1主3从 center
coding es分别按照商家id分片,保税区id分片,异步写,读开放jsf 2套集群4套索引 es
coding 中心接口加入代理层,可利用开关切换读mongo/mysql/es center
coding 异步补偿mongo,mysql,es功能开发 基于jmq platform
coding 代理层实现mongo和mysql版本互为主被双写(mongo主),异步写es 双11后mysql主 center
verify 线上开双写(包括es) 两套es集群
coding 倒库功能开发,数据校验功能开发 reactor config
verify 倒库,并进行数据校验 校验规则(特殊字段不校验)
verify 对中心接口进行压测 线上,压测环境隔离(jsf别名)
coding 优化配置(mysql调整最大连接数,es使用filterCache)
verify 对中心接口进行压测
verify 升级后架构正式上线
verify 监控切换mysql之后的接口性能
verify 监控切换mysql之后对相关依赖系统的影响
todo 停mongo写
todo 继续迁移海关mongo中其他表(以上均为trace表)
todo 彻底下线mongo数据库服务器,只保留mysql服务器

5.2 记录一次异构具有复杂分片规则数据库的过程

5.2.1 难点

? 交易库存复杂的分片规则,数据量大,更新频繁,一致性保证。

回到本源,缓存+队列

相关