1.导致系统不可用的原因有哪些?保障系统稳定高可 用的方案有哪些?请分别列举并简述。
导致系统不可用的原因主要有:
1)硬件故障 2)软件 Bug 3)系统发布造成问题 4)系统并发压力 5)外部安全问题:网络攻击 6)外部灾害
保障系统高可用的方案主要有:
解耦:需要对不同系统、不同功能职责进行功能分解,互相不影响
隔离:为了不相互影响,将子系统、模块、功能进行不同程度的隔离
冗余:同一系统、功能进行多服务器部署,防止单点。服务上称之为集群,数据上称之为备份
失效转移:单台服务出现故障时,可以自动转移到其他服务器
无状态:业务之间是无状态的,便于进行集群、分布式部署
可重试、幂等:相同的请求在服务出现问题的情况下,重复调用不会出现问题
事务补偿:数据最终实现一致性
限流熔断:高峰或业务出现问题时,可以进行流量控制或者阻断服务等方案
实时监控保障:系统要有实时监控,以便当问题出现时可以及时解决处理
2.请用你熟悉的编程语言写一个用户密码验证函数, Boolean checkPW(String 用户 ID,String 密码 明文,String 密码密文) 返回密码是否正确 boolean 值,密码加密算法使用 你认为合适的加密算法。
public class LoginService {
public boolean checkPwd(String userId, String password, String encPassword) {
String passwordMd5 = encrypt(password, getSalt(userId));
return encPassword.equals(passwordMd5);
}
//根据useId经过一定的业务逻辑处理转换成响应salt值
private String getSalt(String userId) { // 根据userId 获取 salt
// 转换验证相关代码处理
return userIdSalt;
}
private String encrypt(String password, String salt) {
String passwordMd5 = null;
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] bytes = md5.digest((password + salt).getBytes(StandardCharsets.UTF_8));
passwordMd5 = new String(bytes);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return passwordMd5;
}
}
复制代码
评论