1. 必备条件
高并发,高性能分布式ID
高并发过滤组件 Bloom FIlter
2. 数据库
(1)不要让mysql干不擅长的工作,例如全文搜索,而是采用对应的nosql来处理;对于擅长的存取数据则能很好胜任;
(2)master/slave 主从架构(1主三从)来分散读压力;
(3)双中心提高可用性(专线可以让两个机房的数据同步延迟在1毫秒内),并且通过路由进一步分散读压力;
(4)分库分表解决数据量压力:十几亿的数据分成1000多张表(每张表的数据在几十万的级别)。
3. 数据平滑迁移
全量同步、增量同步、实时流量灰度切换。
(1)首先,在一个夜黑风高的深夜,流量最小的时候,完成SQL Server到MySQL数据库的全量数据同步。
(2)然受,为了保证数据的无缝切换,采用实时双写的方案。如果写失败,重试三次,如果依然失败,则记日志,然后人工排查原因,解决后,继续双写。
(3)通过A/B平台逐步灰度流量,刚开始100%的流量读取SQL Server数据库,然后逐步切流量读取MySQL数据库,先1%,如果没有问题,再逐步放流量,最终100%的流量都走MySQL数据库。
1)在一次查询请求里,通过异步线程,比较SQL Server和MySQL的查询结果是否一致,如果不一致,记日志,再人工检查不一致的原因,直到彻底解决不一致的问题后,再逐步灰度流量。
2)日志监控,看双写是否有问题,看数据比对是否一致等等。
4. ES的双机房方案
5. Redis双中心多集群
更新缓存数据时,双写,只有两个机房的Redis集群都写成功了,才返回成功。查询缓存数据时,机房内就近查询,降低延时。