写点什么

极客时间架构师训练营 - week11 - 作业 1

用户头像
jjn0703
关注
发布于: 2020 年 08 月 26 日

导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。

答:导致系统不可用的原因包括:

  • 硬件故障

  • 软件缺陷

  • 系统更新与发布

  • 并发压力

  • 网络攻击

  • 外部灾害等

保障系统稳定高可用的方案有:

  • 冗余备份。数据库主从复制,即便一台服务器宕机, 也不影响整个系统对外提供服务。

  • 负载均衡。后台微服务部署多份,在服务更新的时候,让部分服务先下线,再进行升级,在恢复服务,再接入使用。

  • 失败隔离。将后台服务均部署多份,定期检测心跳,下线出问题的服务。

  • 限流降级。在秒杀等高并发场景下,如果系统的访问量超过了系统的承受能力,可以通过限流对系统进行保护。

  • 完善安全防护。采用必要的安全措施,或者采用三方的成熟的安全防护产品。

  • 异地多活。说将数据中心分布在多个不同地点的机房里,每个机房均可以独立对外提供服务,即使某一个机房不可使用,系统也不会宕机,依然保持可用。


请用你熟悉的编程语言写一个用户密码验证函数,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);
}
}



发布于: 2020 年 08 月 26 日阅读数: 48
用户头像

jjn0703

关注

Java工程师/终身学习者 2018.03.26 加入

USTC硕士/健身健美爱好者/Java工程师.

评论

发布
暂无评论
极客时间架构师训练营 - week11 - 作业 1