写点什么

第十一周作业 & 总结

用户头像
胡益
关注
发布于: 2021 年 02 月 05 日

作业一:


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

导致系统不可用的原因很多,主要有如下几种:

  • 硬件故障

  • 软件 Bug

  • 系统发布

  • 并发压力

  • 网络攻击

  • 外部灾害

建设高可用系统的架构的常用方案,如下:

系统解耦,将复杂的系统分割成多个子系统或模块,降低系统的复杂性。

系统解耦常用技术:

  • 高内聚、低耦合的组件设计原则

  • 面向对象基本设计原则

  • 面向对象设计模式

  • 领域驱动设计建模

系统隔离,将子系统或模块互相隔离,防止故障或错误的扩散。

系统隔离包括如下几种方式:

  • 业务与子系统隔离

  • 微服务与中台架构

  • 生产者消费者隔离

  • 虚拟机与容器隔离

异步编程方式,包括如下个方面:

  • 多线程编程

  • 反应式编程

  • 异步通信网络编程

  • 事件驱动异步架构

备份或冗余,是可用性的主要方式,包括:

  • 集群设计

  • 数据备份

失效转移,失效转移的关键是设计无状态的服务。

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

重试,远程服务可能会由于线程阻塞、垃圾回收或者网络抖动,而无法及时返还响应,调用者 可以通过重试的方式修复单次调用的故障。

熔断,当某个服务出现故障,响应延迟或者失败率增加,继续调用这个服务会导致调用者请求 阻塞,资源消耗增加,进而出现服务级联失效,这种情况下使用断路器阻断对故障服务 的调用。

限流,限流是指对进入系统的用户请求进行流量限制,如果访问量超过了系统的最大处 理能力,就会丢弃一部分的用户请求,保证整个系统可用,保证大部分用户是可以访问 系统的。

降级,是指在高并发的情况下,关闭非核心的功能,保证核心功能的可用性。

异地多活,异地多活的难点是多个数据中心的数据的一致性。


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

			public final static String SALT = "ty_fzpb_MD5";
Boolean checkPW(String UserId, String original, String encrypted){ String pwdMD5 = MD5(original,SALT); if(pwdMD5.equals(encrypted)){ return Boolean.TRUE; } return Boolean.FALSE; }

public static String MD5(String original, String salt){ String result = null; try { MessageDigest messageDigest = MessageDigest.getInstance("MD5"); String str = original + salt; byte[] bytes = messageDigest.digest(str.getBytes(StandardCharsets.UTF_8)); result = new String(bytes); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return result; }
复制代码


作业二:

  • 根据当周学习情况,完成一篇学习总结


用户头像

胡益

关注

还未添加个人签名 2020.11.06 加入

还未添加个人简介

评论

发布
暂无评论
第十一周作业&总结