第十一周命题作业
导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。
导致系统不可用的原因有:硬件故障、软件bug、系统发布、并发压力、网络攻击、外部灾害。
保障系统稳定高可用的方案:
1、(代码层面)解耦:高内聚、低耦合的设计原则;面向对象基本设计原则;面向对象设计模式;领域驱动设计建模。总结为好好写代码。
2、(物理层面)隔离:业务与子系统隔离、微服务与中台架构、生产者消费者隔离、虚拟机与容器隔离。
3、异步:多线程编程、反应式编程、异步通信网络编程、事件驱动异步架构。
4、备份:集群设计、数据库复制。
5、失效转移:数据库主主失效转移、负载均衡失效转移。
6、幂等:服务重复调用有时候无法避免,要求服务具有幂等性。
7、事务补偿:通过执行业务逻辑逆操作,使事务回滚到事务前状态。
8、重试:调用者可以通过重试的方式修复单次调用的故障。
9、熔断:服务出现故障,使用断路器阻断对故障服务的调用。
10、限流:系统访问量超过了系统的承载能力,通过限流对系统进行保护。
11、降级:在系统高并发的时候,将非核心功能关闭。
12、异地多活:将数据中心分布在多个不同地点的机房里。
请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文)返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。
我觉得MD5+盐就满足常规使用了;作为工具类使用,传用户ID还得去数据库查一遍。因为用户id、密码密文一般都在用户表中,盐值可能在用户表中。
参数用明文、密文、盐值。
public Boolean checkPW(String password, String ciphetext, String salt){
String md5Password = MD5.getSaltMD5(password, salt);//明文+盐值进行MD5
if(ciphetext.equals(md5Password)){//对比密文
return true;
}else{
return false;
}
}
评论 (1 条评论)