架构师训练营 - 第十一周 - 作业一

用户头像
行者
关注
发布于: 2020 年 12 月 06 日

题目一

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

导致系统不可用的因素

硬件故障

一般出现比较多的是存储设备故障,存储设备出现故障导致数据丢失。

软件bug

软件漏洞会引发系统异常。

系统发布

新旧程序交替过程中也容易出现各种问题。

并发压力

并发压力会导致资源不足,引发系统不稳定。

网络攻击

传统的DDOS攻击等网络攻击,耗尽系统带宽,导致系统不可用。

外部灾害

极端灾害情况下,需要考虑断网、断电等各种情况。

如何保障系统高可用

解耦

基于高内聚、低耦合的原则设计组件,对象。

隔离

不同服务之间相互隔离,避免雪崩。

异步

通过异步减少服务压力。

备份

对数据进行备份,避免硬件问题导致数据丢失。

失效转移

当服务宕机时,及时切换负载,避免系统不可用。

熔断

当个别服务故障时,及时切换请求到其他服务。

限流

高并发下避免系统超载。

异地多活

部署多个机房,避免极端情况。

题目二

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

基于题目分析,只需要检测密码是否正确,所以系统不需要存储密码原文,只需要存储md5摘要信息;同时为了防止用户密码过于简单导致破解,添加用户id作为盐,来提升破解难度。

代码如下:

import cn.hutool.crypto.SecureUtil;
import org.apache.commons.lang.StringUtils;
public class Pass {
public static Boolean checkPW(String userId, String password, String cipherText) {
if (StringUtils.isBlank(userId) || StringUtils.isBlank(password) || StringUtils.isBlank(cipherText)) {
return false;
}
String md5Pass = SecureUtil.md5(userId + password);
if (cipherText.equals(md5Pass)) {
return true;
}
return false;
}
}



用户头像

行者

关注

还未添加个人签名 2018.03.09 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 - 第十一周 - 作业一