架构师训练营第 1 期 week11
1、导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述
导致不可用的原因可能如下:
a、遭受web攻击,如XSS、sql注入、CSRF攻击等等;
防止XSS解决方案:对某些HTMl危险字符转义,如>转义为>,<转义为<
防止sql注入解决方案:通过正则对可能的语句进行判定、sql预编译
防止CSRF攻击解决方案:表单随机token,提交时验证token的合法性、增加验证码校验
b、硬件故障
解决方案:备份,将数据进行多个副本备份;
失效转移,当某个设备故障后,能快速的切换到别的设备
c、软件bug
解决方案:隔离,将业务与子系统隔离,微服务与中台架构,生产者消费者隔离等等;
完善的测试流程;
幂等,在微服务中重复调用与一次调用会产生不同结果的情况下,需要对操作的有效性进行验证;
事务补偿,在微服务的某些场景下,当需要调用多个服务时,其中一个服务调用失败时,需要将其他服务的操作进行回滚;
d、并发压力
解决方案:重试,当远程服务无法及时响应时,调用者可以通过重试的方式修复单次调用故障;
熔断,当某个服务出现故障,响应延迟或者失败率增加时,阻断对故障服务器的调用;
限流,如果系统的访问量超过系统的承受能力,可以将部分请求丢弃,保证大部分用户的访问是可用的;
降级,有一些系统功能是非核心的,在一些特殊情况下,可以停止这些服务,保证核心的功能可用;
e、外部灾害
解决方案:异地多活,在多个地方部署服务中心,需要解决数据如何同步的问题
f、系统发布
解决方案:代码版本控制;
自动化发布;
灰度发布;
2、请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文),返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。
测试结果(密文为zs123456的加密密文):
zhangsan:zs123456:true
zhangsan:zs111111:false
评论