week11- 作业一
一、导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。
1、系统不可用的原因
1.1、硬件故障;
内存、磁盘、服务器掉电、交换机、网络、光纤、
1.2、软件 bug;
1.3、系统发布;
配置没有执行
1.4、并发压力;
资料竞争
1.5、网络攻击;
删除表
1.6、外部灾害;
挖断光纤
2、稳定高可用的方案
2.1、解耦
高内聚、低耦合的组件设计原则;
面向对象基本设计原则;
面向对象设计模式;
领域驱动设计建模;
2.2、隔离
业务与子系统隔离
微服务与中台架构
生产者消费者隔离
虚拟机与容器隔离
2.3、异步
多线程编程;
反应式编程;
异步通信网络编程;
事件驱动异步架构;
2.4、备份
集群设计;
数据库复制,CAP 原理;
2.5、失效转移
数据库主主失效转移;
负载均衡失效转移;
2.6、幂等;
2.7、事务补偿;
传统事务的 ACID;
分布式事务的 BASE;
事务补偿;
2.8、重试;上游调用者超时时间要大于下游调用者超时时间之和;
2.9、熔断;
2.10、限流;
令牌桶算法;
漏桶算法;
2.11、自适用限流;
2.12、降级;
2.13、异地多活;
3、运维方案
3.1、发布;
3.2、自动化测试;
3.3、持续部署;
4、监控方案
4.1、日志收集与分析;
4.2、自动控制;
二、请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文),返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。
public static Boolean checkPW(String uid,String plaintext ,String ciphertext) throws NoSuchAlgorithmException {
return SHAEncrypt(plaintext).equals( ciphertext);
}
public static String SHAEncrypt(String plaintext) throws NoSuchAlgorithmException {
String encrypted = null;
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] bytes = md.digest(plaintext.getBytes());
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < bytes.length; i++) {
String hex = Integer.toHexString(0xff & bytes[i]);
if (hex.length() == 1) {
hexString.append('0');
} else {
hexString.append(hex);
}
encrypted = hexString.toString();
}
return encrypted;
}
评论