写点什么

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

用户头像
吕浩
关注
发布于: 2020 年 08 月 26 日

作业一:

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

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



问题一:

导致系统不可用的原因包括:

硬件故障、软件bug、系统发布、并发压力、网络攻击、外部灾害



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

1,高可用架构设计

解耦:采用高内聚、低耦合的组件设计原则

隔离:业务与子系统隔离,采用为符合和中台架构,生产者和消费者隔离,虚拟机和容器隔离

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

备份:采用集群设计,每个功能最少有两台服务器。数据库复制。

失效转移:访问转移到可用系统上

幂等:一个操作执行多次,结果是相同的。可以采用事务补偿的方式

重试:上游调用者超时时间应大于下游超时时间之和

熔断:对故障或压力过大部分系统采用部分熔断或者全部熔断的处理,减轻压力

限流:丢弃一部分用户的请求,保证大部分用户可以访问。

降级:关闭部分非核心功能保证核心功能。

异地多活

2,高可用运维

自动化测试、部署。

预发布验证

系统监控



问题二:

使用spring提供的MD5工具包,将密码原文和作为salt的userID拼接之后MD5,和加密密文ciphertext比较。

public Boolean checkPW(String userID,String pwtext,String ciphertext){
if(ciphertext.equals(DigestUtils.md5DigestAsHex(pwtext + userID))
return true;
else
return false;
}



用户头像

吕浩

关注

还未添加个人签名 2018.04.27 加入

还未添加个人简介

评论

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