写点什么

架构师训练营第 1 期 第 11 周作业

发布于: 2020 年 12 月 08 日

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

def register(id, pass)
salt = Digest::SHA1.hexdigest([Time.now, rand].join)
secret = encrypt_password(pass, salt)
user = User.create({id:id, secret: secret, salt: salt})
end
def encrypt_password(password, salt)
Digest::SHA1.hexdigest(password + salt)
end
def checkPW(userid, pass, secret)
user = User.where(id: userid).first
secret = encrypt_password(pass, user.salt)
return secret == user.secret
end



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



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

  1. 硬件故障

  2. 软件bug

  3. 系统发布

  4. 并发压力

  5. 网络攻击

  6. 外部灾害



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

  1. 解耦:软件设计要应用面向对象设计、领域驱动设计,做出高内聚低耦合的组件,减少bug出现的几率

  2. 隔离:业务与子系统隔离、微服务与中台架构隔离、虚拟机与容器隔离、生产者与消费者隔离,隔离故障的影响范围

  3. 异步:多线式编程、反应式编程、异步通信网络编程、事件驱动异步架构,加大系统的并发能力

  4. 备份:集群设计,由多个服务器同时提供服务,当一个服务器不能工作时,还有其他服务器可正常工作

  5. 失效转移:数据库主主失效转移,负载均衡失效转移

  6. 幂等:重复调用时,必须保证服务重复调用和调用一次产生的结果相同

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

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

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

  10. 限流:在高并发场景下,如果系统的访问量超过了系统的承受能力,可以通过限流对系统进行保护。限流是指对进入系统的用户请求进行流量限制,如果访问量超过了系统的最大处理能力,就会丢弃一部分的用户请求,保证整个系统可用。

  11. 降级:在系统高并发的时候,将非核心的功能关闭,将宝贵的系统资源留下来给主要业务

  12. 异地多活:如果整个数据中心都不可用,比如说数据中心所在城市遭遇了地震,为了解决这个问题,同时也为了提高系统的处理能力和改善用户体验,很多大型互联网应用都采用了异地多活的多机房架构策略,也就是说将数据中心分布在多个不同地点的机房里



用户头像

还未添加个人签名 2018.05.23 加入

还未添加个人简介

评论

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