前因:最近上线的一个微信公众号,粉丝在60w+,每次客户推送公众号文章时,数据库必爆炸
硬件:服务器webapp 4实例
数据库p4
排查:最初服务器是双实例s2->升级到4实例s3->服务器ok,没有挂掉,但是数据库爆炸
数据库升级到p6->不行->临时升级到p11,ok->高峰期过后,降回p6,最终数据库定为p6
定位:因为公众号有2个菜单需要验证用户是否绑定,每次推送会有大量引流,导致验证绑定查询数据库次数过多,响应速度低于微信要求的5s,导致需要验证绑定的菜单全部崩溃
解决:1、给会员表查询字段openId和mobile增加聚合索引
2、优化查询代码,减少查询次数
3、新增redis存储会员数据,定时任务每天00:30同步所有会员数据到redis中,验证会员绑定时,先查询redis数据,当redis超过最大连接数之后,在把流量压给数据库
总结:1、会员表中本来可以把查询条件之一的openid作为主键的,但是由于某些原因并未将openId作为主键