架构师训练营第十一周作业

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

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

1.导致系统不可用的原因

硬件故障

软件bug

系统发布

并发压力

网络攻击

外部攻击

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

解耦

(1)高可用、低耦合的组件设计原则

(2)面向对象基本设计原则

(3)面向对象设计模式

(4)领域驱动设计建模

隔离

(1)业务与子系统隔离

(2)微服务与中台架构

(3)生产者消费者隔离

(4)虚拟机与容器隔离

异步

(1)多线程编程

(2)反应式编程

(3)异步通信网络编程

(4)事件驱动异步架构

备份

(1)集群设计

(2)数据库复制(CAP原理)

Failover(失效转移)

数据库主主失效转移

负载均衡失效转移

需要设计无状态的服务

幂等

服务重复调用和一次调用的结果是相同的,即服务的幂等性。

事务补偿

(1)传统事务的ACID

原子性、一致性、隔离性、持久性

(2)分布式事务的BASE

基本可用、软状态、最终一致性

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

重试

上游调用者超时时间要大于下游调用者超时时间之和。

熔断

使用断路器阻断对故障服务的调用。

断路器状态:关闭、开启、半开

限流

限流的算法:

(1)计数器算法(固定窗口、滑动窗口)

(2)令牌桶算法

(3)漏桶算法

自适应限流

实时自动评估QPS

业务流量的不确定性与技术方案的自适应性天生一对

降级

当有高并发时,可以适当的将一些非核心的功能关闭。

异地多活

异地多活的难点是数据一致性



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

boolean checkPW(String userId, String password, String passwordEncode) throws NoSuchAlgorithmException, UnsupportedEncodingException {
MessageDigest md5 = MessageDigest.getInstance("MD5");
BASE64Encoder base64Encoder = new BASE64Encoder();
String pwEncode = base64Encoder.encode(md5.digest(password.getBytes("utf-8")));
return pwEncode.equals(passwordEncode) ? true : false;
}



发布于: 2020 年 12 月 06 日阅读数: 14
用户头像

月殇

关注

还未添加个人签名 2019.04.15 加入

还未添加个人简介

评论

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