1. 系统集群式部署
单点系统,一旦出故障整个系统都瘫痪,非常酸爽,所以在大型系统中都采用集群部署,某台实例出现了问题直接踢掉负载就好了,不必担心系统是单点这种尴尬场景。尤其是在电商系统中大促的场景下,都会有一些备份机器,担心机器不够用那么直接扩容吧。
2. 减少系统间依赖
在系统里尽量的避免外部依赖、第三方依赖等,毕竟命运掌握在自己手里才是最有把握的。试想一种场景,如果因为你依赖的外部服务挂了导致自己的服务大面积出错,那真正尴尬的才是你自己啊。
3. 重试策略
大型系统中通过网络进行rpc、http调用难免会出现网络抖动,没准重试一下就好了呢。
4. 保证服务的幂等性
试想你在电商系统中你下单之后因为网络抖动导致重复扣款,那你就会很气啊,为什么要我多付这么多钱,那我必须要投诉你啊。
5. 限流
在双十一这种"流量巨兽"面前丝毫看不起漏桶算法、令牌桶算法,那么你的系统不出问题谁的系统出问题呢。
6. 熔断机制
系统的出落率达到一定阈值之后进行熔断,难不成还要一直错下去哇。当然这个熔断时机根据业务场景来定。
7. 服务降级方案
很不幸,你的服务出现了你不想看到挂了,那么为了保证整个业务正常继续流转,总要给业务方一个可以接受的结果,事后再慢慢复盘和解决问题。
8. 设置超时
连接超时、读超时,如果不设置一个阈值来中断这种异常情况,那么只能说好家伙,你的服务不被拖垮谁的系统被拖垮呢。
9. 热数据缓存
秒杀系统中某一个sku卖的特别好,如果每次都去DB中拿数据,试问你的DB可以撑得住吗。
10. 代码异步调用
现在的机器配置都多高啊,那么多cpu空着也是浪费啊,用起来啊
11. 避免循环网络IO
不是不可用,但是用之前一定要评估一下循环次数,否则打挂了下游服务也是常有的事。
12. 灰度和回滚方案
这可能是互联网中最常用的保证服务稳定性的手断了,新开发的功能总要经历灰度上线验证之后开会全流量开放,配合回滚方案简直不要太爽。
13. 监控预警
一般稍具规模的公司,监控和预警都不会少,哪里省钱这里都不能省钱啊,监控和预警是最能至关反应系统健康状况的手断了。
14. 线上压测
上线可不能这么佛系,对待每一次上线都要有敬畏之心。至少做到对系统qps、qts、pv、uv等常见数据都心中有数,那么这些也都来自压测指标。一般的大公司在上线之前都会有一套完整的全链路压测工具,根本不是事,如果没有的话jemeter压一下也好啊。