LEN

2017年3月18日 合服工作问题及解决方案 总结
合服时间 2017-03-16 03 开服1台服务器被请求打穿 node脚本将更新数据队列取出后 批量请求 更...
扫描右侧二维码阅读全文
20
2017/03

2017年3月18日 合服工作问题及解决方案 总结

合服时间 2017-03-16 03

  1. 开服1台服务器被请求打穿
    node脚本将更新数据队列取出后 批量请求 更新数据接口 每秒 1k cpu 上升 150% 请求失败 node 重新写入请求队列,重新入库造成死循环. 停服5小时入队列并未停止,造成5小时中本应分批处理的任务,同步进行.直接打穿服务器,并写入脏数据 (无法停服情况下,杀死溢出node脚本, 生扛了本次攻击)
  2. 缓存中写入大量脏数据, 造成DB 和缓存 数据不一致问题,部分功能无法准确实现. (所有写操作前,必须先删缓存)
  3. 项目代码因为不同用户分库不同, 交易时直接使用 事务, 跨库事务是无效的.失败后生成的脏数据回滚无效. (计划改用分布式事务 MQ)
  4. 缓存集群及RPC提供连接数太少, 晚8点后访问量增加,造成大量请求连接失败. (后期计划建立连接池,并将部分接口使用varnish)
  5. 合服后刷新商城刷新太慢2s刷出, 因合服后所有数据合并造成商品池数据剧增, 使用递归方式从3.5W件商品中 找出100件商品. (建立N个 100件商品为集合的 缓存, 每次用户对上架商品进行操作时,修改对应上本集合, 用户刷新商城时采用随机方式获取, 使用空间换时间 )

上面的问题都是本次合服我看到的问题. 虽然本次合服一点忙也没帮上,但我觉得也是一次不错的经历. 了解了这么多场景的产生及解决方案. 这对我的职业生涯很有帮助.

第一次连续加班3天时间, 周四14点上班周六20点下班, 纪念一下这一时刻,以后肯定会更加疯狂, 但我相信所有的付出都将会有回报的!

追述:
问题4. 今天查看代码找到原因了, 实际犯了一个非常低级的问题, 缓存连接并不是单例, 一次请求产生多个实例连接, 修改创建实例基类后降低请求连接数.

最后修改:2019 年 11 月 04 日 11 : 44 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论