背景
领导通知过两天要搞秒杀活动,流量会暴涨,MySQL 可不能拖后腿啊,让我提供个方案。
大流量下需要了解的事
- 用户希望 APP 不要出现卡顿,点击一个功能马上就能有响应并反馈,不然用户可能就去用别家的了
- 数据库响应慢意味着用户、领导会觉得你的能力不行
- 哪怕几秒钟的停机时间也意味着巨大的损失,可能会流失用户
活动前
- 做好监控,如果对 MySQL 内部一无所知,如何知道是否有效果?
- 对应用程序进行负载测试,测试在正常负载和峰值负载下的扩容。在活动开始之前找出瓶颈是最佳时机,活动开始才发现系统的瓶颈,时间仓促,且容易引发更大的问题。
- 测试灾备切换所需的时间及是否有效
- 停止发布新的代码及配置文件
- 针对 checklist 仔细检查,不要假设。大部分故障是容易被忽视的问题引起
- 检查备份是否有效
活动期间
- 灾备切换是最后的选择。不到万不得已,不要做。
- 提前安排好 owner,每个人负责具体的事项,对该事项进行监控、调整和故障修复。
- 出现问题优先恢复业务,而不是留着故障等待开发排查
- 别让问题变得更严重,某些操作可能会让 MySQL 变慢,在更改前评估影响
- 收集好日志及其他数据用于事后分析,预防之后不能重现
活动后
- 分析并了解流量和使用情况,用于下次活动。
- 不要因为活动结束了就忘记活动期间出现的问题,问题不会自己消失。
- 从错误中吸取教训,预防下次
- 将系统升级到最新版和漏洞修复,
- 不要自满,技术每年都在变化,也许今年的经验明年就不好使了,必须定期分析、规划和审查