Github 花了一年多的时间,将他们的 1200 台 MySQL 集群从 v5.6 升级到了 v8.0,过程中需要遵循服务的 SLO 和 SLA,做了非常多的工作,值得借鉴阅读。 过去几年,随着业务规模的增长,实践了多次数据库的运维和变更,首先从 MySQL v5.6 迁移到 OceanBase-MySQL,在早期版本的 OB 中挣扎了一年多,建设大量的监控和应急措施来应对执行计划淘汰不及时和处理一些兼容性的问题;后来随着业务的增长,数据库体量增加,数据规模超过了 2Tb,又经历了一次数据库的扩容和版本升级,这个阶段数据的各种问题都暴露出来了,例如主从流量分配不均、单表超过一亿性能异常、热点库 CPU 暴涨、业务扩容带来的连接池不够等等,解决问题的同时,也在规范团队对数据库的使用,趣味性比较强;再后来随着业务的继续增长,又开始建设异地灾备,实现数据的异地同步和容灾切换,学到了不少。 但相比 Github 这个规模,解决的问题,还是小巫见大巫,它的 QPS 达到了 550w,极其恐怖。Github 采用的是分库分表的设计,在数据库调用这一层上,做的相对比较复杂,架构的复杂自然也带来了工具和工程的复杂度,从而增加了大量的运维成本,这篇文章提到了一些对抗软件复杂度的方法和细节,包括回滚机制的设计、混合版本提供服务等,比较有意思。只不过对细节的描述偏少,估计是不方便对外。

2023-12-11 21:57:51