第十一周 作业 1
导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。
导致系统不可用的原因有:
硬件故障。内存坏了,硬盘的电机坏了,整个服务器宕机。交换机故障、网络连接故障。
软件 Bug。程序开发出现 Bug,考虑场景不全面。
系统发布。配置参数缺失,数据库更新不完整;后台服务未发布完成,前台服务已经发了;运维流程不合理,运维工作失误。
并发压力。大量线程争夺资源,资源耗尽,系统崩溃。
网络攻击。删除表,删除文件。
外部灾害。光纤被挖断。
保障系统稳定高可用的方案:
高内聚、低耦合的系统开发和设计。减少不同对象、组件、系统之间的相互影响。一个小问题不会导致整个系统奔溃。通过面向对象设计、领域驱动设计、使用不同设计模式,让系统更灵活,对扩展开发、对修改关闭,降低开发新功能、维护时出问题的概率。
隔离。通过微服务方法,将大系统拆分不同的子系统。比如将电商系统拆为:买家子系统、卖家子系统,使它们之间不会相互影响,一个不能用不会影响另外一个;通过引入消息中间件,将消费者与生产者隔离,消费者和生产者之间不会相互影响。
异步。多线程编程时,一个线程问题,其他线程还能正常处理;异步网络通信,事件驱动架构保证用户当前操作快速、正确响应。
备份。通过负载均衡,当某部分机器出问题时,通过失效转移,将请求发到正常的机器,保证系统的高可用。数据库的主主、主从备份,当某个机器出问题后,保证数据不丢失。
幂等。保证服务调用一次或多次时,产生的结果相同,这样当远程服务可能会由于线程阻塞、垃圾回收或者网络抖动,而无法及时返还响应,调用者可以通过重试的方式修复单次调用故障当服务出现无响应。
熔断。当某个服务出现故障,响应延迟或者失败率增加时,继续调用这个服务会导致调用者请求阻塞,资源消耗增加,进而出现服务级联失效,这种情况下使用断路器阻断对故障服务请求的调用。
限流。访问量超过承受能力,限制部分流程,保护系统正常运行。限流算法主要有:计数器(固定窗口)算法、计数器(滑动窗口)算法、令牌桶算法、漏桶算法、自适应限流。
降级。关闭非核心功能,保护核心系统功能。
异地多活。将数据中心分布在不同地点的机房里,这些机房都可以对外提供服务,用户可以连接任何一个机房进行访问。难点是数据的一致性。
请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String userId, String password, String 密码密文),返回密码是否正确的 boolean 值,密码加密算法使用你认为合适的加密算法。
版权声明: 本文为 InfoQ 作者【Yangjing】的原创文章。
原文链接:【http://xie.infoq.cn/article/fcac0f532999000fed93e4471】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论