生活服务多机房方案
做多机房部署的目的在于提升业务可用性,结合智能DNS,GSLB使用户可以就近访问提升体验,并避免DNS劫持.
生活服务数据情况分析
数据使用情况
- 运营配置数据保存在mysql使用redis缓存
- VirtualType等保存在mysql的枚举数据,本地缓存并使用MetaQ进行广播同步
- 订单回调数据,实时写入mysql,客户端用户重新可以查看数据,要求实时性较高
- 活动状态数据(奖品库存数量,用户中奖信息等等)
- 用户提交的意见反馈,活动中奖后提交的地址等联系方式信息
- 团购,电影等同步CP的数据,由定时任务进行更新,低实时性,一致性要求
- yard配置数据.
- 分布式SESSION,记录登陆用户数据
数据特性
- 订单数据基本是读写均衡的
- yard,运营配置枚举,用户意见反馈,地址联系方式等数据明显是读多写少,可以接受一定延迟.
- 活动状态数据必须保障强一致性才能防止奖品超发
- 团购和电影数据通过定时任务跟CP保持同步
基础设施的跨机房同步方案及问题分析
MySQL
支持跨机房的主从同步.在网络层面支持专线和公网VPN切换,对上层应用程序透明.
专线可用时,同步延迟基本和同机房一致,切换为公网VPN延迟会略提示.
只支持主机房单边写入.
当南沙机房(主机房)不可用时,可以让DBA手动将其他机房的mysql实例设置为主,程序的Datasource可以自动切换写入节点,保证写入.(切换过程还是有中断时间)
MetaQ
MetaQ主题支持跨机房订阅/发布.根据设计和网络情况可能有延时,和消息重复情况.以南沙机房为主节点,不保障跨机