一次网关事故的总结

本文是记录2015年的一次线上事故,引发的对系统架构和性能的思考,以及如果考虑系统容灾和降级的问题。在大流量高并发下的互联网环境下,如何做到系统稳定,不被异常流量击垮,是我等软件人需要思考和不断优化改造的目标。

问题来了

记得是一个周六的早上,手机就开始不停的震动,拿起一开,是洪水般的报警短信,大概印象记录如下:

  • 网关系统报出性能报警,各种接口超时
  • 网关系统报出方法可用率报警,统计网关调用量峰值 190w+/min
  • Jimdb(redis)出现 failover 主从切换报警,而且相当频繁
  • Jimdb 出现 Connection Lost 报警
  • 联系 dba 对 Jimidb 进行扩容,并调大连接数
  • Jimdb 恢复
  • 网关系统 CPU 使用率飙升,服务器出现宕机
  • 对 Jstack 进行分析,发现 youngGc 异常频繁
  • 通过对 Jmap 进行分析,发现有 sql 会对 mysql 进行全表扫库
  • ...

网关系统是对外提供 API 服务调用的系统,对使用资源进行监控发现:

  • 网关日志 JMQ 积压 8亿+
  • 网关日志 ES 容量 2T

This chapter requires login to view full content. You are viewing a preview.

Login to View Full Content

Course Curriculum

3

框架与 I/O:Spring、Netty 与 Web 容器

理解 Spring Boot 自动装配、AOP 与事务原理,掌握 Netty Reactor 模型及 Tomcat 连接处理机制,构建高内聚、易扩展的应用服务层。
4

高性能中间件:消息、缓存与存储

熟练运用 MySQL 索引/事务、Redis 缓存策略、Kafka/RocketMQ 消息可靠性,以及 ZooKeeper 分布式协调,搭建稳定、解耦的分布式数据底座。
6

云原生:容器化、可观测性与工程效能

通过 Docker/K8s 实现弹性部署,集成 Metrics/Logs/Traces 构建可观测体系,推动 DevOps 与自动化,让架构在云上持续交付与进化。