写点什么

第十一周 作业 1

用户头像
Yangjing
关注
发布于: 2020 年 12 月 13 日

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

导致系统不可用的原因有:

  • 硬件故障。内存坏了,硬盘的电机坏了,整个服务器宕机。交换机故障、网络连接故障。

  • 软件 Bug。程序开发出现 Bug,考虑场景不全面。

  • 系统发布。配置参数缺失,数据库更新不完整;后台服务未发布完成,前台服务已经发了;运维流程不合理,运维工作失误。

  • 并发压力。大量线程争夺资源,资源耗尽,系统崩溃。

  • 网络攻击。删除表,删除文件。

  • 外部灾害。光纤被挖断。

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

  • 高内聚、低耦合的系统开发和设计。减少不同对象、组件、系统之间的相互影响。一个小问题不会导致整个系统奔溃。通过面向对象设计、领域驱动设计、使用不同设计模式,让系统更灵活,对扩展开发、对修改关闭,降低开发新功能、维护时出问题的概率。

  • 隔离。通过微服务方法,将大系统拆分不同的子系统。比如将电商系统拆为:买家子系统、卖家子系统,使它们之间不会相互影响,一个不能用不会影响另外一个;通过引入消息中间件,将消费者与生产者隔离,消费者和生产者之间不会相互影响。

  • 异步。多线程编程时,一个线程问题,其他线程还能正常处理;异步网络通信,事件驱动架构保证用户当前操作快速、正确响应。

  • 备份。通过负载均衡,当某部分机器出问题时,通过失效转移,将请求发到正常的机器,保证系统的高可用。数据库的主主、主从备份,当某个机器出问题后,保证数据不丢失。

  • 幂等。保证服务调用一次或多次时,产生的结果相同,这样当远程服务可能会由于线程阻塞、垃圾回收或者网络抖动,而无法及时返还响应,调用者可以通过重试的方式修复单次调用故障当服务出现无响应。

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

  • 限流。访问量超过承受能力,限制部分流程,保护系统正常运行。限流算法主要有:计数器(固定窗口)算法、计数器(滑动窗口)算法、令牌桶算法、漏桶算法、自适应限流。

  • 降级。关闭非核心功能,保护核心系统功能。

  • 异地多活。将数据中心分布在不同地点的机房里,这些机房都可以对外提供服务,用户可以连接任何一个机房进行访问。难点是数据的一致性。

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


function checkPW($userId, $plainPassword, $cipherPassword) {    $salt = config('password_salt');    return sha1($plain_password+$salt+$userId) == $cipherPassword;}
复制代码


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

Yangjing

关注

还未添加个人签名 2017.11.09 加入

还未添加个人简介

评论

发布
暂无评论
第十一周 作业1