写点什么

架构第十一周作业

用户头像
Nick~毓
关注
发布于: 2020 年 12 月 02 日

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


导致系统不可用的原因

  • 硬件故障:cpu、硬盘、内存等硬件故障

  • 软件 bug:内存泄漏导致内存耗尽,程序死锁

  • 系统发布:发布新版本需要关闭原有应用

  • 并发压力:高并发导致资源占用率高,系统崩溃

  • 网络攻击:DDos 攻击等

  • 外部灾害:自然灾害,地震,火灾,光纤断路



保证系统高可用的方案

  • 解耦

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

  • 面向对象基本设计原则

  • 面对对象设计模式

  • 领域驱动设计建模

  • 隔离

  • 业务与子系统隔离

  • 微服务与中台架构

  • 生产者消费者隔离

  • 虚拟机与容器隔离

  • 异步

  • 多线程编程

  • 反应式编程

  • 异步通信网络编程

  • 时间驱动异步架构

  • 备份

  • 集群设计

  • 数据库复制

  • 失效转移

  • 数据库主主失效转移

  • 负载均衡失效转移

  • 幂等

  • 服务重复调用有时候是无法避免的,必须保证服务重复调用和调用一次产生的结果相同,即服务具有幂等性

  • 对于交易等操作,需要通过交易编号等信息进行服务调用有效性校验,只有有效的操作才继续执行

  • 事务补偿

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

  • 重试

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

  • 上游调用者超时时间要大于下游调用者超时时间之和

  • 熔断

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

  • 限流

  • 限流是指对进入系统的用户请求进行流量限制,如果访问量超过了系统的最大处理能力,就会丢弃一部分的用户请求,保证整个系统可用,保证大部分用户是可以访问系统的,虽有一部分用户请求被丢弃,产生不可用,但还是好过整个系统崩溃,所有用户都不可用要好

  • 降级

  • 在高并发情况下,关闭低价值的操作,把系统资源留给高价值的操作

  • 异地多活

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


用户头像

Nick~毓

关注

还未添加个人签名 2018.05.09 加入

还未添加个人简介

评论

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