架构师训练营第 1 期 week11

用户头像
张建亮
关注
发布于: 2020 年 12 月 06 日

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

导致不可用的原因可能如下:

a、遭受web攻击,如XSS、sql注入、CSRF攻击等等;

防止XSS解决方案:对某些HTMl危险字符转义,如>转义为&gt,<转义为&lt

防止sql注入解决方案:通过正则对可能的语句进行判定、sql预编译

防止CSRF攻击解决方案:表单随机token,提交时验证token的合法性、增加验证码校验

b、硬件故障

解决方案:备份,将数据进行多个副本备份;

失效转移,当某个设备故障后,能快速的切换到别的设备

c、软件bug

解决方案:隔离,将业务与子系统隔离,微服务与中台架构,生产者消费者隔离等等;

完善的测试流程;

幂等,在微服务中重复调用与一次调用会产生不同结果的情况下,需要对操作的有效性进行验证;

事务补偿,在微服务的某些场景下,当需要调用多个服务时,其中一个服务调用失败时,需要将其他服务的操作进行回滚;

d、并发压力

解决方案:重试,当远程服务无法及时响应时,调用者可以通过重试的方式修复单次调用故障;

熔断,当某个服务出现故障,响应延迟或者失败率增加时,阻断对故障服务器的调用;

限流,如果系统的访问量超过系统的承受能力,可以将部分请求丢弃,保证大部分用户的访问是可用的;

降级,有一些系统功能是非核心的,在一些特殊情况下,可以停止这些服务,保证核心的功能可用;

e、外部灾害

解决方案:异地多活,在多个地方部署服务中心,需要解决数据如何同步的问题

f、系统发布

解决方案:代码版本控制;

自动化发布;

灰度发布;

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

package com.baomidou.mybatisplus.toolkit;

import org.springframework.util.DigestUtils;

public class Md5Util {
public static Boolean checkPW(String userid,String password,String encryptPassword){
String md5Str = DigestUtils.md5DigestAsHex((userid+"@#$"+password).getBytes());
return md5Str.equals(encryptPassword);
}

public static void main(String[] args) {
System.out.println("zhangsan:zs123456:"+checkPW("zhangsan","zs123456","9b3069ca1a20262f190fe87e36f462b9"));
System.out.println("zhangsan:zs111111:"+checkPW("zhangsan","zs111111","9b3069ca1a20262f190fe87e36f462b9"));
}
}


测试结果(密文为zs123456的加密密文):

zhangsan:zs123456:true

zhangsan:zs111111:false



用户头像

张建亮

关注

还未添加个人签名 2020.07.29 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 1 期 week11