写点什么

【架构师训练营 - week11 -1】作业

用户头像
早睡早起
关注
发布于: 2020 年 08 月 26 日
  • 导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。

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

导致不可用的原因:

  • 硬件故障

  • 软件bug

  • 系统分布

  • 并发压力

  • 网络攻击

  • 外部灾害

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

1.分级管理

运维上将服务器进行分级管理,核心应用和服务优先使用更好的硬件,在运维响应速度上也格外迅速。

2.超时设置

3.异步调用

应用对服务的调用通过消息队列等异步方式完成,避免一个服务失败导致整个应用请求失败的情况。

4.服务降级

网站访问高峰期,服务可能因为大量的并发调用而性能下降,严重时可能会导致服务宕机。为了保证核心应用和功能的正常运行,需要对服务进行降级。降级有两种手段:拒绝服务及关闭服务。

5.异地多活

如果整个数据中心都不可用了,比如受到了一些不可抗力的影响,为了解决这个问题,可以在不同的地方配置多个数据中心。

6.限流

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



Boolean checkPW(String userName,String password,String encryption){
return encrypByMd5(password).equals(encryption);
}
public String encrypByMd5(String context) {
StringBuffer buf = new StringBuffer("");
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(context.getBytes());
byte [] encryContext = md.digest();
int i;
for (int offset = 0; offset < encryContext.length; offset++) {
i = encryContext[offset];
if (i < 0) i += 256;
if (i < 16) buf.append("0");
buf.append(Integer.toHexString(i));
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return buf.toString();
}



用户头像

早睡早起

关注

还未添加个人签名 2019.09.05 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
请添加“极客大学架构师训练营”标签,便于分类
2020 年 08 月 27 日 09:54
回复
没有更多了
【架构师训练营 - week11 -1】作业