写点什么

架构师训练营第二期 Week 11 作业

用户头像
bigxiang
关注
发布于: 2021 年 01 月 03 日
  1. 导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。

导致系统不可用的原因有很多,例如:

  • 硬件故障:服务器,交换机之类的设备损坏。

  • 软件 bug:代码缺陷导致的错误等。

  • 系统发布:发布过程中导致的服务重启。

  • 并发压力:高并发导致的系统资源耗尽等。

  • 网络攻击:攻击导致的系统崩溃或网络带宽耗尽。

  • 外部灾害:机房火灾,光缆被挖断等不可抗力。

我们有很多手段保障系统的高可用性,例如:

  • 解耦:在软件设计和代码实现的级别上使代码高内聚,低耦合,使代码更容易维护,不容易出错,同时更容易模块化分开发布,增强可用性。

  • 隔离:有各种层面的隔离,例如业务和子系统隔离,微服务与中台隔离,生产者消费者隔离,虚拟机与容器隔离。主要思想是将非内聚的部分分离,错误就不会相互影响,就算有的地方出错了,其他的部分仍然可以正常运行。

  • 异步:可以采用多种异步编程方式,比如多线程编程,反应式编程,异步通信网络编程,事件驱动架构等。通过异步进一步减少系统逻辑之间的耦合度。

  • 备份:系统部署时任何子系统或者业务模块都不只部署一个节点,都采用集群的方式,数据库采用复制等技术。

  • 失效转移:在集群中,如果某个节点失效,可以采用数据库主主失效转移,负载均衡失效转移,同时服务要设计成无状态的,避免节点失效后服务状态丢失。

  • 幂等:服务要设计成无论几次调用,相同的参数会返回相同的结果,避免多次调用造成的状态错误。

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

  • 重试:服务有时会因为网络错误等各种原因没有响应或者返回不正确,调用者可以通过重试的方式修复。

  • 熔断:当某个服务出现故障,断路器发现后续请求阻塞,系统资源消耗增加达到阀值时对服务进行断路处理。

  • 限流:在高并发场景下,系统访问超过承受能力,对系统请求进行限制数量的处理,多余的请求被丢弃。

  • 降级:在高并发场景下,关闭部分非核心功能,将系统资源留给核心功能使用。

  • 异地多活:多数据中心同时提供服务,任何一个数据中心不可用也不会影响系统。


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



require 'digest'
def check_pw(user_id, password, encrypted_password) generate_pw(user_id, password) == encrypted_passwordend
def generate_pw(user_id, password) Digest::MD5.hexdigest("#{user_id}#{password}")end
user_id = 'user1'password = 'password'encrypted_password = generate_pw(user_id, password)
# trueputs check_pw(user_id, password, encrypted_password)
# falseputs check_pw(user_id, password+'1', encrypted_password)
# falseputs check_pw(user_id, '1'+password, encrypted_password)
复制代码


用户头像

bigxiang

关注

还未添加个人签名 2018.03.21 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第二期 Week 11 作业