写点什么

第十一周命题作业

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

导致系统不可用的原因有:硬件故障、软件bug、系统发布、并发压力、网络攻击、外部灾害。

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

1、(代码层面)解耦:高内聚、低耦合的设计原则;面向对象基本设计原则;面向对象设计模式;领域驱动设计建模。总结为好好写代码。

2、(物理层面)隔离:业务与子系统隔离、微服务与中台架构、生产者消费者隔离、虚拟机与容器隔离。

3、异步:多线程编程、反应式编程、异步通信网络编程、事件驱动异步架构。

4、备份:集群设计、数据库复制。

5、失效转移:数据库主主失效转移、负载均衡失效转移。

6、幂等:服务重复调用有时候无法避免,要求服务具有幂等性。

7、事务补偿:通过执行业务逻辑逆操作,使事务回滚到事务前状态。

8、重试:调用者可以通过重试的方式修复单次调用的故障。

9、熔断:服务出现故障,使用断路器阻断对故障服务的调用。

10、限流:系统访问量超过了系统的承载能力,通过限流对系统进行保护。

11、降级:在系统高并发的时候,将非核心功能关闭。

12、异地多活:将数据中心分布在多个不同地点的机房里。



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

我觉得MD5+盐就满足常规使用了;作为工具类使用,传用户ID还得去数据库查一遍。因为用户id、密码密文一般都在用户表中,盐值可能在用户表中。

参数用明文、密文、盐值。

public Boolean checkPW(String password, String ciphetext, String salt){

String md5Password = MD5.getSaltMD5(password, salt);//明文+盐值进行MD5

if(ciphetext.equals(md5Password)){//对比密文

return true;

}else{

return false;

}

}



用户头像

菲尼克斯

关注

还未添加个人签名 2018.05.14 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
请添加“极客大学架构师训练营”标签,便于分类
2020 年 08 月 27 日 09:50
回复
没有更多了
第十一周命题作业