架构师 0 期 Week11 作业 1
导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。
导致系统不可用的原因有物理设备问题,如硬件损坏,外部灾害;软件问题,如软件 bug,新版发布时兼容问题;访问压力,如短时高并发;外部攻击等。
要做到高可用架构要从事前防范和事后快速恢复两方面入手。
关于事前防范,需要解决设备问题、自身问题、访问压力和安全四方面问题。对于物理设备问题,要形成服务集群,做到失效转移,实现异地多活,即在不同地点配置数据中心。
对于软件问题,可从架构和管理两方面入手,架构方面做到模块解耦隔离,使各模块职责清晰,易于维护。管理方面做到自动化测试、自动化部署、自动化发布,做好运维监控,及时发现问题。让产品开发迭代带来的影响降至最低。
对于访问压力,首先要实现异步访问来扩大并发能力,在流量过大时要做到服务降级--关停次要服务,限流--把访问放到队列之中,缓解流量对服务器可能造成的损害。
对于物理设备问题要做到面对外部攻击需要做好安全防范,如识别 DDOS 攻击,设置 token 或验证码,阻止 CSRF 攻击,审查用户输入,消除 XSS 和数据库注入攻击等。
关于事后快速恢复,首先要引入重试机制,在服务不可用时自动重试连接,做到服务转移/恢复后第一时间接入,降低对客户的影响。其次是熔断机制,做到及时判断服务失效,做到失效转移,在发现服务失效时将访问转移到未受影响的服务器上。转移后要做到幂等来杜绝重复操作的影响,事务补偿实现业务可回滚。
请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文)返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。
评论