casestudy -- 4




200x200


 事故总结记一次重大事故 -- 非线程安全框架引发的意外数据共享记一次线上事故 -- lvs 宕机引起的血案一次前端页面展示问题的排查与解决高并发场景下线程池配置不合理造成的超时过长在 f

#技术帖    #casestudy    #线上事故    #技术专题   
事件还原经反馈,本应在点击“下单”按钮后提示错误信息“只限手机端购买”,可是页面只是一刷新,并没有弹出提示信息用户点击下单按钮发现页面刷新,没有提示,也没有进入下单页面,所以觉得很奇怪,也并不知道要到手机端购买,所以问题还是比较严重的 提示信息展示逻辑测试环境中测试,问题没有复现,错误信息提示正常,可是到线上环境,提示信息无论如何都显示不出来这是什么原因呢?首先需要了解提示信息的展示逻辑Action 中判断如果是限制手机购买的项目,则会向 cookie 中存入错误提示信息,并主动进行 302 跳转,回到当前页面当前页面展示时,读取 cookie,取出提示信息,然后将提示信息展示到页面上 问题分析反复排查,发现 Action 中使用的 302 跳转目标地址是 http://www.xxx.com/xxx/{id},在线上环境中,实际跳转结果是 http://www.xxx.com/xxx/{id}.html,事实上,从 http://www.xxx.com/xxx/{id} 到 http://www.xxx.com/xxx/{id}.html 进行了一次 301 跳转,这次跳转中,没有带
#技术帖    #html    #技术分享    #前端   
美团存储架构PHP -> mgw(美团基础架构组对 lvs 的封装)-> atlas(数据库中间件) -> DB 事故描述mgw 机器 2月1日 11:30 突然宕机,导致 PHP 端大量读超时(10 秒),加锁的语句没有解锁,导致其他语句无法获取锁造成死锁 然而,由于 rabbitmq 1.6.1 心跳设置的是 2 秒,两次(4 秒)检测不到心跳就会将消息重新发送给另一个 worker,所以在 PHP 读超时前,相同消息被 rabbitmq 转发到了另一个 worker,造成了雪崩效应 大量重复 SQL 被提交 DB 执行,select for update 语句造成死锁,因此要求 DBA kill 掉死锁连接,结果 DBA kill 掉了所有连接,造成订单丢失,mysql insert  操作即使没有显式开启事务,执行
#技术帖    #php    #mysql    #技术分享   
事故描述2015-09-21 15:43:34 到 2015-09-21 16:13:45 之间用户通过客户端 APP 查看“我的订单”列表会查看到同时登陆的其他用户订单2015-09-21 16:13:45 到 2015-09-21 16:36:17 之间用户无法查看客户端 APP 查看“我的订单”列表页面 事故原因分析spring 框架的 bean 默认以单例模式(这里并不是指 GOF 设计模式中的单例模式,而是在 spring 的 IOC 容器中只会存在一个该 bean 创建的对象)启动,这个类对象的成员数据共享,因此用户的请求数据被共享,后到的 request 覆盖了已经存在的 request 数据,等待的用户返回了后到的用户查询到的结果 关于测试测试过程中可以避免这个问题的发生吗?测试没有模拟并发的问题,这个问题是无法出现的,这也是事故发生后一个多小时无法定位到的主要原因 -- 不能在测试环境中复现然而,小流量上线显然是可以触发的,然而,在小流量上
#技术帖    #php    #技术分享    #work   



京ICP备2021035038号