架构师训练营—第十一周作业
导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。
导致系统不可用的原因:
硬件和网络故障
应用系统的配置错误
大并发请求造成应用系统过载
系统 BUG 造成存储层的响应变慢(慢 SQL, 缓存中存在大的 Value 对象, Java 应用的内存泄露造成频繁的 FGC等)
系统中适用的中间件故障(网关, MQ 等中间件不可用)
系统漏洞被黑客攻击, 比如 SQL 注入后删除了关键业务表或者数据库, XSS 攻击造成系统的页面执行恶意的脚本
系统超过容量
不可抗拒的自然灾害, 如数据中心被破坏, 到数据中心的网络光纤被挖掘机挖断
保证系统高可用的方案有:
硬件冗余, 避免系统应用集群的单点故障问题
在一组服务集群中引入负载均衡器, 在版本升级的过程中引入预发环境发现和避免验证系统配置问题
引入监控系统, 监控系统的关键参数: 应用服务宿主机的负载, 内存, CPU, 硬盘, Linux 服务的 INode 信息; 应用服务的堆栈信息, 线程池信息, Java 进程的 GC 状况, 接口的异常信息, 接口服务的调用链路节点耗时信息, 中间件和数据存储的关键参数等
在新系统上线的时候做系统性能测试, 得到系统容量的瓶颈, 在监控系统中设置合理的关键参数的预警阈值
引入应用安全策略, 防止系统被攻击, 比如在网关中引入 Web 应用防火墙, 在 Java 应用数据库访问层适用 PrepareStatement 防止 SQL 注入
建立多数据中心, 在一个数据中心发生故障时能够切换到另外的数据中心
在系统过载的时候引入服务的限流和降级的机制防止系统过载
评论