架构师第一期作业(第 11 周)

用户头像
Cheer
关注
发布于: 2020 年 11 月 30 日

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



导致系统不可用常见的原因有

  • 软件自身的Bug

  • 硬件故障,如硬盘或内存损坏、服务器断电等

  • 遭到网络攻击

  • 并发过大,系统资源耗尽

  • 系统发布过程中,配置参数或数据库更新不匹配等

  • 外部灾害,如光纤被挖断导致网络不可用



高可用方案

  • 解耦:高内聚、低耦合,提升代码质量是根本

  • 隔离:业务与子系统隔离、微服务与中台架构、生产者消费者隔离(消息队列)、虚拟机与容器隔离

  • 异步:多线程编程、反应式编程、异步通信网络编程、事件驱动异步架构

  • 备份:集群设计、数据库复制

  • 失效转移:数据库主主失效转移、负载均衡失效转移,注意服务幂等性

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

  • 重试:调用者可以通过重试的方式修复单次调用的故障

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

  • 限流:在高并发场景下,如果系统的访问量超过了系统的承受能力,就会丢弃一部分的用户请求,保证整个系统可用,保证大部分用户是可以访问系统的。

  • 降级:在系统高并发的时候,将非核心的功能关闭,确保核心功能可用

  • 异地多活:将数据中心分布在多个不同地点的机房里,这些机房都可以对外提供服务,用户可以连接任何一个机房进行访问,这样每个机房都可以提供完整的系统服务,即使某一个机房不可使用,系统也不会宕机,依然保持可用。



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

# 密码加密方法
def makePW userid, password
Digest::MD5.hexdigest(userid + password)
end
# 对应密码验证算法
def checkPW userid, password, password_encrypted
Digest::MD5.hexdigest(userid + password) == password_encrypted
end



发布于: 2020 年 11 月 30 日阅读数: 18
用户头像

Cheer

关注

还未添加个人签名 2018.11.25 加入

还未添加个人简介

评论

发布
暂无评论
架构师第一期作业(第 11 周)