导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。
答:导致系统不可用的原因包括:
- 硬件故障
- 软件缺陷
- 系统更新与发布
- 并发压力
- 网络攻击
- 外部灾害等
保障系统稳定高可用的方案有:
- 冗余备份。数据库主从复制,即便一台服务器宕机, 也不影响整个系统对外提供服务。
- 负载均衡。后台微服务部署多份,在服务更新的时候,让部分服务先下线,再进行升级,在恢复服务,再接入使用。
- 失败隔离。将后台服务均部署多份,定期检测心跳,下线出问题的服务。
- 限流降级。在秒杀等高并发场景下,如果系统的访问量超过了系统的承受能力,可以通过限流对系统进行保护。
- 完善安全防护。采用必要的安全措施,或者采用三方的成熟的安全防护产品。
- 异地多活。说将数据中心分布在多个不同地点的机房里,每个机房均可以独立对外提供服务,即使某一个机房不可使用,系统也不会宕机,依然保持可用。
请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文)返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。
导入两个 Jar 依赖
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.4.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.11</version> </dependency>
package com.example.demo; import cn.hutool.crypto.SecureUtil; import org.apache.commons.lang3.StringUtils; /** * @author Jiang Jining * @date 2020/8/26 22:55 */ public class PasswordUtil { private static final String SALT = "salt"; /** * Check password of user. * * @param userId userId * @param password password * @param input input * @return boolean */ public static boolean checkPassword(String userId, String password, String input) { if (StringUtils.isBlank(userId) || StringUtils.isBlank(input)) { return false; } return StringUtils.equals(generateMd5ForDatabase(userId, input), password); } public static String generateMd5ForDatabase(String userId, String originalPassword) { return SecureUtil.md5(userId + SALT + "@" + originalPassword); } }