写点什么

架构师训练营第 11 周课后练习

用户头像
叶纪想
关注
发布于: 2020 年 12 月 04 日

题目

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

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

解答

1.服务器每个节点都可能因为硬件故障导致系统不可用,为了保证高可用,一定要用多节点集群,数据库要有主从复制备份。

软件bug也可能导致系统不可用,这个问题主要靠测试和code review避免。

系统发布也可能导致系统不可用,比如发布了一个错误或者有缺陷的版本,发布过程服务不可用。发布之前的版本一定要备份,方便快速回滚。发布要分批进行,可以做到用户无感知。最好有预发布节点,可以提前验证版本的可用性。

并发压力也可能导致系统不可用,重点功能要做好性能压测,不满足性能要求的要做性能优化,异步架构是解决性能问题的有效手段。网络攻击也可能导致系统并发压力过大,要用限流的手段限制请求数。

外部灾害也可能导致系统不可用,比如机房断电、光纤中断。异地多活架构是解决该问题的终极方案,异地多活是指将数据中心发布在不同地点的机房中,每个数据中心都有完整的数据集,可以对外提供完整的服务。异地多活的难度是多个数据中心的一致性。

2.

/**
* 验证密码是否正确,采用sha256加密算法,userId做为盐值拼接到头部参与加密
*
* @param userId 用户ID
* @param pwd 密码明文
* @param encryptedPwd 密码密文
* @return true:正确,false:错误
*/
public boolean checkPW(String userId, String pwd, String encryptedPwd) {
return Objects.equals(DigestUtils.sha256Hex(userId + pwd), encryptedPwd);
}



用户头像

叶纪想

关注

还未添加个人签名 2018.05.23 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 11 周课后练习