服务的高可用——智能流控设计

魏小言 魏小言     2022-11-28     366

关键词:

目录

智能流控

背景

动态阈值及流量控制

动态阈值

流量控制

优势及不足

附录


智能流控

智能流控,听起来是流量的拆分控制。不错,就这回事,下面以广告业务为例来讲解,如何设计搭建一智能流控机制。

背景

当 A 模块从上游模块拿到倒排、召回后的广告投放计划后,会以并发的方式请求 各家 dsp 获取各自广告的出价、尺寸,等广告信息。在并发请求时,响应时间由最后返回的 dsp 决定。最坏情况是 dsp 超时无反馈,响应时间由默认配置的最大超时时间决定,此时会拖慢整个 A 服务,同时广告链路各微服务之间产生连级反应,整条链路被影响。由于 上游对 dsp 服务的承载能力及容灾等情况不可控,故需要对其做流控策略。

动态阈值及流量控制

在智能流控策略中,依赖的组件有  memcache\\redis\\prometheus。架构模型是挂载式,通过挂载核心动态阈值脚本,阈值数据的共享,触发流量控制策略。下面依次讲解,动态阈值脚本 及 流量控制策略。

动态阈值

在动态阈值脚本中,我们达到智能、动态的前提是,有个阈值的基准。这个一般是由 dsp 接入时,有双方技术判定的服务承载健康值。比如,QPS 支撑 5000……

基于这个基准,我们做升降权机制。当流量溢出 dsp 承载力时,将做降权调整,以10%的幅度调整阈值;反之,做升权调整,以 2% 的步长增长至初始阈值。那么如何做出流量与 dsp 承载力之间的关系判断呢/?

这个时候,我们依赖流处理组件 prometheus,我们以 30s 粒度去轮询  dsp 最近 2min 的失败率及超时率,通过设定阈值的方式,做出流量与 dsp 承载力之间的关系决策。比如,超时率 > 20% 或 平均耗时 > 100ms,甚至是 超时率 > 10% && 平均耗时 > 80ms…

流量控制

在流量控制策略中,我们是持有了两份流量阈值数据,一份是 memache(动态值),一份是 redis (初始值)。两份优先级是 memache > redis 。拿到有效的阈值后,服务会读取最近 2m 的 QPS/120 依据当前机器的权重计算总 QPS 与 阈值做对比,做出是否调控的判定。判定后,将产生 0~总QPS的 随机数,命中 0~阈值的部分流量正常请求,反之进行留存数据后抛弃。比如,当前有 5 个节点,平均 20 的 QPS,此时阈值为 80。则单台计算如下,20 * 5 = 100 > 80 ,20 * 80/100 = 16 ,将保持 16 的 QPS 进行请求。

优势及不足

挂载式的架构模型,最大程度的进行策略解耦,灵活。

动态阈值脚本 配合 流量调控策略 两部分独立并协作构成一智能流控系统,将文首的问题进行了消除。在升降权机制中,可任意配置化控制平滑过度的粒度大小。

不足点,也十分明显,依赖外部脚本及第三方组件,当依赖部分出现故障,整体的流控功能将丧失。【一般会搭建对应的实时监控,以告警方式进行触达】

附录

相关智能流控架构流图,可私信或者关注公众号获取。

浅谈服务接口的高可用设计

作者:京东零售王磊前言作为一个后端研发人员,开发服务接口是我正常不过的工作了,这些接口不管是面向前端HTTP或者是供其他服务RPC远程调用的,都绕不开一个共同的话题就是“高可用”,接口开发往往看似简单,但保证... 查看详情

浅谈服务接口的高可用设计(代码片段)

作为一个后端研发人员,开发服务接口是我正常不过的工作了,这些接口不管是面向前端HTTP或者是供其他服务RPC远程调用的,都绕不开一个共同的话题就是“高可用”,接口开发往往看似简单,但保证高可用这块实现起来却不... 查看详情

redis的高可用详解:redis哨兵复制集群的设计原理,以及区别

谈到Redis服务器的高可用,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制。 哨兵(Sentinel):可以管理多个Redis服务器,它提供了监控,提醒以及自动的故障转移的功能。 复制(Replication):则是负... 查看详情

亚马逊aws在线系列讲座——基于aws云平台的高可用应用设计

...设计挑战的时候,也给带来了很多新的设计理念和可用的服务。怎样在设计应用的时候充分利用云平台的各种特点是基于云计算设计的一个重要条件。在这个在线讲座中。我们将以亚马逊AWS云平台为例,讨论怎样设计一个高可用... 查看详情

广告业务系统之智能保险丝——“智能流控”

...量调控数据源计算智能流控功能挂载阈值存储架构长短板服务构建及部署广告业务系统之智能保险丝——“智能流控”除了在AB环节设计了出色的重试机制——“双发”外,在ADX系统的核心终端也存在着另一个“智能流控”... 查看详情

如何快速构建服务发现的高可用能力(代码片段)

文章目录如何快速构建服务发现的高可用能力背景一个真实的案例面向失败的设计服务发现过程中的高可用原理解析动手实践前提条件准备工作应用场景后续附录关注code杂坛一线大厂“互联网时讯、各技术栈、产品、开源社区... 查看详情

如何利用“集群流控”保障微服务的稳定性?

简介:应用高可用服务AHAS(ApplicationHighAvailabilityService)是经阿里巴巴内部多年高可用体系沉淀下来的云产品,以流量与容错为切入点,从流量控制、不稳定调用隔离、熔断降级、热点流量防护、系统自适应保护、集群... 查看详情

如何利用“集群流控”保障微服务的稳定性?

简介:应用高可用服务AHAS(ApplicationHighAvailabilityService)是经阿里巴巴内部多年高可用体系沉淀下来的云产品,以流量与容错为切入点,从流量控制、不稳定调用隔离、熔断降级、热点流量防护、系统自适应保护、集群... 查看详情

工作十年,谈谈我的高可用架构和系统设计经验

本文从研发规范层面、应用服务层面、存储层面、产品层面、运维部署层面、异常应急层面这六大层面去剖析一个高可用的系统需要有哪些关键的设计和考虑一、高可用架构和系统设计思想可用性和高可用概念可用性是一个可以... 查看详情

网关流控利器:结合ahas实现ingress/nginx流量控制(代码片段)

简介:微服务的稳定性一直是开发者非常关注的话题。随着业务从单体架构向分布式架构演进以及部署方式的变化,服务之间的依赖关系变得越来越复杂,业务系统也面临着巨大的高可用挑战。作者:涂鸦微服务... 查看详情

如何快速构建服务发现的高可用能力(代码片段)

...f0c;是MSE一直在追求的目标,本文通过面向失败设计的服务发现高可用能力的分享,以及MSE的服务治理能力快速构建起服务发现高可用能力的演示,模拟了线上不可预期的服务发现相关异常发生时的影响以及我们如何... 查看详情

harbor基于离线安装方式的高可用设计(理论部分)

查看详情

携程呼叫中心异地双活——座席服务的高可用

携程呼叫中心异地双活——座席服务的高可用 查看详情

keepalive高可用

...负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx,Haproxy,MySQL等)的高可用解决方案... 查看详情

云计算的高可用性

相较于普通的IDC机房以及服务器厂商,阿里云会使用更严格的IDC标准、服务器准入标准以及运维标准,以保证云计算整个基础框架的高可用性、数据的可靠性以及云服务器的高可用性。在此基础之上,阿里云所提供的每个地域都... 查看详情

面向业务的立体化高可用架构设计

...戏接入系统的业务高可用,技术人员跳出传统的面向系统的高可用的思路,转而从业务的角度来整体考虑高可用,最终实现了一套立体化的高可用架构,本文逐一展示这套立体化高可用架构的一些具体实践。 通常情况下我们... 查看详情

有货微服务治理实践(代码片段)

服务依赖???????在分布式架构中,服务间的依赖非常常见,一个业务调用通常依赖多个基础服务。如下图,对于同步调用,当会员服务不可用时,订单服务请求线程被阻塞,当有大批量请求调用会员服务时,最终可能导致整个会... 查看详情

006eureka的高可用(代码片段)

一.概述  在我们的微服务之中,最为重要的就是我们的服务中心,当我们使用单机环境下,一旦我们的服务中心瘫痪,那么我们的所有的服务都是挂掉.  因此,我们需要对我们的服务中心进行高可用的配置. 二.高可用的配置 ... 查看详情