• 微服务可用性之隔离限流降级


    可用性之服务隔离

    服务隔离的目的

    在系统发生故障时限制其影响范围
    隔离在保障整个服务的可用性上具有重要作用

    隔离维度

    线程级别的隔离:不同的任务给不同的线程执行
    进程级别的隔离:将系统业务拆分成多个微服务,部署到不同的机器上
    进程间的通信方式:不同机器经过远程调用,相同机器通过内存,管道(内存中的一种特殊的文件),消息来通信
    快慢隔离:避免队列阻塞。视频审核优先处理小视频;error日志和非error日志分开采集
    热点隔离:有静态和动态热点数据。实现动态发现热点的功能。提前预热缓存;隔离,使用单独的服务来处理
    业务核心程度隔离:按照服务的核心程度,将服务分级。重要程度高的服务单独部署,并提供冗余资源提高容灾能力
    动静分离之表设计:视频基本信息和播放量等频繁变更的数据分离
    动静分离之CDN:静态资源通过CDN加速

    可用性之服务限流

    在一段时间内,可以处理多少个请求。应对突发流量,防止某个用户将系统资源耗尽影响其他用户使用。控制成本,在有限资源下能稳定提供服务
    在哪些地方要限流:请求入口处,使用nginx的配置限流 。业务服务入口处,api网关等中间件

    分布式限流

    令牌桶和漏桶只能针对单个节点,分布式限流是整个应用全局的流量。分布式限流一般用Redis实现
    如何确定流量的阈值:全链路压测。使用消息中间件存储请求数据,然后在压测平台回放流量
    基于响应时间的动态限流:首先我们记录每次调用后端请求的响应时间,然后在一个时间区间内(比如5秒)计算这段时间的P90或P99,如果P90或P99大于我们设定的阈值我们就自动限流
    基于系统资源的动态限流:通过系统资源使用率动态限流,统计一段时间的系统资源(CPU、内存)达到某个百分点就限流

    可用性之服务降级

    通过降低回复调用方的质量来减少系统的工作量。例如推荐系统出问题,直接返回预设的默认商品展示。双十一暂时关闭一些功能也是降级的一种
    通过熔断避免服务雪崩:局部故障引发全局故障就是雪崩。核心服务调用的其他服务资源不足导致核心服务被阻塞,这种情况可以通过熔断降级来解决。失败达到指定次数,服务开启熔断,关闭达到指定时间,服务半开,成功达到指定次数,服务全开
    哪些情况需要降级:依赖服务不可用,响应时间过长
    降级的实现方式:对服务定级,让非核心服务先降级。降低返回结果的精确度。请求短路,不走DB,返回缓存。简化流程,放弃部分操作。延迟执行

  • 相关阅读:
    常见数学名词
    Vue 中为什么要有nextTick?
    ORA-17002 IP hostname timeout DISTRIBUTED_LOCK_TIMEOUT
    PHP与Java生成时间戳的区别
    MogDB 3.0.0 新特性——发布订阅
    jolt语法
    4061 Magic Multiplication,思维,枚举,优化
    java中的IO流之转换流(编码转换)
    calcite 校验层总结
    Mellanox cx4 驱动总结
  • 原文地址:https://www.cnblogs.com/csgopher/p/17264924.html