架构师训练营 1 期第 11 周:安全稳定 - 作业
1. 题目1:导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。
1.1 引起系统不可用的原因
包括但不限于:
硬件故障,电源烧坏,内存条松动,网络线路故障等;
软件故障;
运维方面问题,如系统中的部分或整体处于维护升级状态且没有备用系统时;
并发压力导致的系统资源耗尽或服务等待;
网络攻击,带宽被耗尽或比如DDOS攻击,SOCKET句柄被耗尽。
1.2 保证系统稳定高可用的方案
包括但不限于:
解耦,降低系统之间的耦合,可以提高系统的可用性。解耦的具体方案包括:高内聚,低耦合的设计原则,面向对象基本设计原则,面向对象设计模式,领域驱动建模等;
隔离,隔离可以降低系统之间的影响。常见的隔离方法包括:业务隔离,子系统隔离。微服务架构,中台架构。生产者与消费者隔离。容器隔离,虚拟机隔离;
备份,包括电源、网络及服务备份。当主服务器宕机后,从服务器可以替代主服务器,提高系统可用性;
失效转移,使用备份方案是,重要的是怎样做好失效转移。可以借助zookeeper或者keepalive这样的框架来实现失效转移。
幂等,也是高可用架构需要考虑的问题,有些服务是天生幂等的,比如修改数据库操作。有些则需要考虑幂等,比如转账操作,可以在消息中加入事务ID,确保一个事务只被处理一次;
事务补偿。对于分布式系统中,对于失败的事务,可以执行相应的补偿。具体做法是记录每次事务日志,如果事务不成功,则对之前的操作进行逆操作;
重试,对于服务调用失败,可以适当尝试重试。重试需要确保上游服务超时时间>下游超时时间之和;
熔断,是微服务中的一种架构策略。可以避免服务级联失效;
限流,对服务进行保护,防止系统奔溃。限流的策略有很多种,计数器(固定窗口,滑动窗口),令牌桶,漏桶,自适应限流等;
降级,在系统处于高并发访问时,禁止某些非核心服务;
异地多活。当一个数据中心不可用时,请求会发给其它数据中心。其难点是数据一致;
运维也会影响系统的可用性,从运维的角度,保证系统高可用可以做如下努力:
自动化测试可以极大的降低回归测试的人力成本,自动化测试适合比较稳定的系统。
自动化部署,对于较小的团队,自动化部署反而有优势,可以带来比较好的效果。
为了更好的验证线上产品的正确性,可以创建一个预发布环境,预发布服务器不对外提供服务,却与生产环境配置一样。在系统正式发布之前,先把产品发布到预发布服务器,待验证通过后,在把预发布服务器的代码更新到正式环境。
代码版本管控,有两种代码版本管控的方式。在主干分支上开发,然后创建分支进行发布。或者从主干创建分支分支,开发结束后合并到主干分支,只对主干分支进行发布。一般互联网公司都倾向使用第二种方式,但是也有一个缺点,就是当一个分支开发周期比较长时,会与主干分支有很大区别,解决方案是不断从主干分支拉取最新代码,确保开发分支的代码最新。
灰度发布是每次发布时,只在部分服务器上发布新版本,降低系统升级失败带来的风险。
另外需要对网站性能进行监控,实时获取系统运行状态,尽早发现系统问题。
版权声明: 本文为 InfoQ 作者【灵霄】的原创文章。
原文链接:【http://xie.infoq.cn/article/ea26e776f20fb3580ba3b2a3d】。未经作者许可,禁止转载。
评论