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

可用性之服务隔离

服务隔离的目的

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

隔离维度

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

可用性之服务限流

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

分布式限流

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

可用性之服务降级

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

posted @ 2023-03-28 14:00  csgopher  阅读(297)  评论(1编辑  收藏  举报