架构师训练营第二期 Week 11 作业
导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。
导致系统不可用的原因有很多,例如:
硬件故障:服务器,交换机之类的设备损坏。
软件 bug:代码缺陷导致的错误等。
系统发布:发布过程中导致的服务重启。
并发压力:高并发导致的系统资源耗尽等。
网络攻击:攻击导致的系统崩溃或网络带宽耗尽。
外部灾害:机房火灾,光缆被挖断等不可抗力。
我们有很多手段保障系统的高可用性,例如:
解耦:在软件设计和代码实现的级别上使代码高内聚,低耦合,使代码更容易维护,不容易出错,同时更容易模块化分开发布,增强可用性。
隔离:有各种层面的隔离,例如业务和子系统隔离,微服务与中台隔离,生产者消费者隔离,虚拟机与容器隔离。主要思想是将非内聚的部分分离,错误就不会相互影响,就算有的地方出错了,其他的部分仍然可以正常运行。
异步:可以采用多种异步编程方式,比如多线程编程,反应式编程,异步通信网络编程,事件驱动架构等。通过异步进一步减少系统逻辑之间的耦合度。
备份:系统部署时任何子系统或者业务模块都不只部署一个节点,都采用集群的方式,数据库采用复制等技术。
失效转移:在集群中,如果某个节点失效,可以采用数据库主主失效转移,负载均衡失效转移,同时服务要设计成无状态的,避免节点失效后服务状态丢失。
幂等:服务要设计成无论几次调用,相同的参数会返回相同的结果,避免多次调用造成的状态错误。
事务补偿:通过执行业务逻辑逆操作,使事务回滚到事务前的状态。
重试:服务有时会因为网络错误等各种原因没有响应或者返回不正确,调用者可以通过重试的方式修复。
熔断:当某个服务出现故障,断路器发现后续请求阻塞,系统资源消耗增加达到阀值时对服务进行断路处理。
限流:在高并发场景下,系统访问超过承受能力,对系统请求进行限制数量的处理,多余的请求被丢弃。
降级:在高并发场景下,关闭部分非核心功能,将系统资源留给核心功能使用。
异地多活:多数据中心同时提供服务,任何一个数据中心不可用也不会影响系统。
请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文),返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。
评论