写点什么

架构师训练营 - 命题作业 第 11 周

用户头像
水边
关注
发布于: 2020 年 08 月 27 日

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

1、硬件故障:如宕机、网线断、交换机路由器故障等等,这种一般建议跨机房分布式部署;

2、DNS劫持:这个一般没有太好的办法,可以在内网部署自有的DNS服务器,并指定可信的上级DNS服务器。

3、高并发访问:做好系统架构设计,支持横向扩容,然后可以用Docker进行动态扩容或缩容。

4、DDoS攻击:没太好的办法,一般要在最前端入口处进行流量过滤。



高可用方案:

1、异地多活

2、主备、读写分离,且至少2个以上的读库

3、自动化测试,避免线上问题

4、灰度发布,小流量或部分用户验证通过后才上线

5、滚动发布,无缝无感发布。

6、完善的监控体系和度量数据采集。



二、请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文)返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。

代码如下:

Boolean checkPW(String userID, String password, String encryPwd) {
String encryPwdNew = stringToMD5(password + userID + "-Salt");
return password.equalsIgnoreCase(encryPwdNew);
}
static String stringToMD5(String plainText) {
byte[] secretBytes = null;
try {
secretBytes = MessageDigest.getInstance("md5").digest(
plainText.getBytes());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("没有这个md5算法!");
}
String md5code = new BigInteger(1, secretBytes).toString(16);
for (int i = 0; i < 32 - md5code.length(); i++) {
md5code = "0" + md5code;
}
return md5code;
}



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

水边

关注

还未添加个人签名 2019.04.14 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 - 命题作业 第 11 周