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

news2024/10/6 6:45:30

文章目录

    • 广告业务系统 之 智能保险丝 —— “智能流控”
      • 智能流控
        • 常规流量调控
          • 数据源计算
        • 智能流控
          • 功能挂载
          • 阈值存储
        • 架构长短板
      • 服务构建及部署

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

除了 在 AB 环节 设计了出色的 重试机制 —— “ 双发 ” 外,在 ADX 系统的 核心终端 也存在着另一个 “智能流控” 机制,来保障 服务的健壮性,避免微服务架构中的层级效应。

这样的机制像一个个保险丝,各式各样的、一环嵌一环的 发挥着重要的流量熔断/自愈作用。

智能流控

当投放引擎拿到当前流量的特征时,将会实时请求 不同 DSP 的服务,去获取最新的广告候选信息。而在 ADX 对接的 DSP 中,各家服务的承载力在不同时间是不同的。

如果,我们把 平台全流量都直接灌给 DSP,DSP 却负担不起。可能会将 DSP 服务直接打垮,即使没垮,大量的超时和无响应会将 整个 ADX 服务出口耗时、失败率拉起来,进而造成业务事故。

常规流量调控

在这里插入图片描述
注:全链路流程图可参看 暨 广告、推荐、搜索 三大顶级复杂业务之 “广告业务系统详叙”

如图示,当投放引擎以 2w 流量并发请求各 DSP 时,将会通过一定规则进行流量干预,确保流量符合 DSP 承载上限。

在分布式部署的投放引擎每个实例中,实例将依据负载均衡的权重 1/4 、当前承载的单实例流量 5k ,去估算出 当前投放引擎下发的总流量 2w 。若超出预期,则 进行适配运算,得出最佳放量规模 2.5k 。

数据源计算
  • 实例中当前流量统计,是由 广告业务系统 之 数据中转站 —— “日志中心-实时服务监控” 实时计算得出;
  • DSP 服务承载的上限数据是由 广告业务系统 之 承前启后 —— “消息中心” BP 平台 透传给 消息中心,投放引擎侧从消息中心的存储加载而来。

智能流控

常规流量调控中的阈值是 DSP 技术同学评估的数值,实际生产中往往会有悖于此阈值。比如,当发生重大事件,服务稳定性降低;或者节点硬件设备故障;甚至服务功能迭代异常…

生产中如何灵活、动态的判定 DSP 服务的承载能力?并实时适配其等量的流量,是 ADX 中需要注重的重点问题。

这里我们介绍一个系统中常用架构 —— 挂载 模式。

功能挂载

挂载式,通过挂载核心动态阈值脚本,阈值数据的共享,触发流量控制策略。

在这里插入图片描述
我们将在服务外部,挂载一个 依托 prometheus 监控数据的 数据计算逻辑。将以 30s 粒度去轮询 DSP 最近 2min 的失败率及超时率。通过设定阈值的方式,做出流量与 DSP 承载力之间的关系决策。比如,超时率 > 5% 或 平均耗时 > 100ms,甚至是 超时率 > 5% && 平均耗时 > 100ms…

基于这个基准,我们做升降权机制。当流量溢出 DSP 承载力时,将做降权调整,以10%的幅度调整阈值;反之,做升权调整,以 2% 的步长增长至初始阈值。

阈值存储

当挂载数据发现,此时处于非常规状态时,将按 上述 “ 步长策略 ” 进行计算实时阈值,并放置于 MC 中。投放引擎会 先取 MC 的数值作为流量调控 阈值;若不存在非常规状态,则以 Redis 中数据阈值为准。

架构长短板

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

  • 挂载式的架构模型,最大程度的进行策略解耦,灵活;
  • 不足点,也十分明显,依赖外部脚本及第三方组件,当依赖部分出现故障,整体的流控功能将丧失。【一般会搭建对应的实时监控,以告警方式进行触达】

对于一个复杂的 ADX 系统,智能流控这样的设计极大程度的体现了 服务自主性,智能化。为大型业务系统架构设计中,无比珍贵的一环。

服务构建及部署

在 ADX 系统中,全链路涉及 大大小小的微服务 将近 百个。

良好的服务构建和灵活、敏捷的部署能力,是保证广告业务快速交付价值的基石…


见后续文章!

推荐阅读:
暨 广告、推荐、搜索 三大顶级复杂业务之 “广告业务系统详叙”
广告业务系统 之 承前启后 —— “消息中心”
广告业务系统 之 数据中转站 —— “日志中心-实时服务监控”
广告业务系统 之 数据桥梁 —— “日志中心-曝光数据流转结算”
广告业务系统 之 核心通道 —— “日志中心-s2s监测上报”
广告业务系统 之 辅助决策 —— “ AB 实验平台”
广告业务系统 之 框架沉淀 —— “数据消费型服务框架”


三行代码搞定 —— 反转链表…
Kafka 高吞吐、高性能核心技术及最佳应用场景…
HTTPS 如何保证数据传输安全 —— TLS 协议…
五分钟搭建基于 Prometheus + Grafana 实时监控系统…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/160793.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Redis】Redis实现全局唯一ID

【Redis】Redis实现全局唯一ID 为什么要使用Redis实现全局唯一ID去替代传统的数据库自增ID,主要原因如下: 数据库自增ID的规律性太明显受单表数据量的限制,数据量很大时分表会出现ID重复的现象 1. 全局ID生成器 出于以上原因,我…

Vue3——第十三章(插槽 Slots)

一、插槽内容与出口 这里有一个 <FancyButton> 组件&#xff0c;可以像这样使用&#xff1a; 而 <FancyButton> 的模板是这样的&#xff1a; <slot> 元素是一个插槽出口 (slot outlet)&#xff0c;标示了父元素提供的插槽内容 (slot content) 将在哪里被…

excel图表技巧:如何用填充单元格制作比率分析图

在工作中&#xff0c;我们经常要向上级领导汇报某个指标的进度或完成情况。有时候&#xff0c;我们会用仪表盘或温度计图来展示数据。不会这类型图表的朋友&#xff0c;不用担心&#xff0c;因为今天&#xff0c;我将教给大家一种更简单的方法&#xff01;公司新来的职员小明&a…

你是真的“C”——详解C语言函数模块知识(下篇)

详解C语言函数模块知识(下篇&#xff09;&#x1f60e;前言&#x1f64c;1、 函数的嵌套调用和链式访问&#x1f64c;1.1 嵌套调用&#x1f49e;1.2 链式访问&#x1f49e;2、函数的声明和定义&#x1f64c;2.1函数声明&#x1f49e;2.1函数定义&#x1f49e;3、函数递归&#…

【算法题解】9. 邻值查找

文章目录题目解题思路代码实现复杂度分析这是一道中等难度的题。 题目来自&#xff1a;AcWing 题目 给定一个长度为 n 的序列 A&#xff0c;A 中的数各不相同。 对于 A 中的每一个数 Ai&#xff0c;求&#xff1a; min|Ai−Aj|&#xff0c;其中 1 < j < i。 以及令上式…

10行代码带你轻松抓取博客清单

一、前言 今天在网上偶遇一款html解析利器HtmlAgilityPack&#xff0c;免费下载地址&#xff1a;入口。 HtmlAgilityPack是.net下的一个HTML解析类库&#xff0c;支持用XPath来解析HTML。通过该类库&#xff0c;先通过浏览器获取到xpath获取到节点内容然后再通过正则表达式匹…

【operator bool】while(cin >> str)是什么意思?

文章目录一、前言二、cin是什么&#xff1f;三、隐式类型转化如何发生&#xff1f;一、前言 在oj题中&#xff0c;为了实现多行输入&#xff0c;我们经常可以看到这样的写法&#xff1a;while(cin >> str)&#xff0c;这究竟是什么意思呢&#xff1f;为了理解其中的含义&…

c++ 可变参数的三种实现方式

c 可变参数 方法一&#xff1a; C语言的: va_list1 #include <stdio.h> #include <stdarg.h>int add_nums(int count, ...) {int result 0;va_list args;va_start(args, count); // C23 起能省略 countfor (int i 0; i < count; i) {result va_arg(args, i…

bresenham algorithm

#! https://zhuanlan.zhihu.com/p/598780689 bresenham algorithm 全象限区域bresenham algorithm计算的python/c实现 bresenham algorithm为计算机图形学中使用像素点显示直线的算法&#xff0c;算法使用整数运算&#xff0c;能大幅提升计算速度。最近概率栅格建图算法中涉及…

CloudCanal实战-Oracle数据迁移同步到PostgreSQL

简述 本篇文章主要介绍如何使用 CloudCanal 构建一条 Oracle 到 PostgreSQL 的数据同步链路 技术要点 缩小的数据库权限要求 CloudCanal 对 Oracle 数据库的高权限要求&#xff0c;主要来自两个面向 DBA 的操作&#xff0c;自动构建字典和 自动切换归档日志&#xff0c;这两…

详解 strtok 函数以及模拟实现

目录 一、strtok 函数的介绍 二、strtok 函数的模拟实现 一、strtok 函数的介绍 函数原型&#xff1a; char* strtok(char* str, const char* delimiters); delimiter n.[计]分隔符&#xff0c;定界符&#xff08;a character that marks the beginning or end of a unit o…

KMP算法详解+动图演示

目录 一、KMP算法简介 二、KMP算法的详细图解 1. 先了解BF算法的基本思路 2. 简单了解KMP算法 3. next数组的引入 4. next数组的代码实现&#xff08;含动态演示&#xff09; 三、KMP算法完整代码 一、KMP算法简介 KMP算法是一种改进的字符串匹配算法&#xff0c;由 …

【算法】二分图判定

目录1.概述2.代码实现3.应用本文参考&#xff1a; LABULADONG 的算法网站 1.概述 &#xff08;1&#xff09;二分图 (Bipartite Graph)&#xff0c;又称为二部图&#xff0c;是图论中的一种特殊模型。 设 G (V, E) 是一个无向图&#xff0c;如果顶点 V 可分割为两个互不相交的…

Unity 和vs2022对接问题

第一个问题&#xff1a;在vs中编写好的程序在unity中预览出现乱码&#xff1b;提示&#xff1a;只要是乱码的问题90%离不开编码表Unity中的编码表是utf-8,而vs中默认的应该是GB2312。英文还好&#xff0c;中文可定就会出现乱码&#xff0c;解决方法也很简单&#xff1a;把vs中的…

【Python基础四】入门级朋友看的超详教程

前言 这是最后一篇基础的文章啦 往期文章&#xff1a; 【Python基础一】入门级朋友看的超详教程 【Python基础二】入门级朋友看的超详教程 【Python基础三】入门级朋友看的超详教程 刚开始接触Python的宝子&#xff0c;有什么不懂的都可以私信我哦 我还准备了大量的免费…

目标检测:YOLO V2思路解读

目标检测&#xff1a;YOLO V2思路解读YOLO V1存在的问题主要改进Batch NormalizationHigh Resolution ClassifierConvolutional With Anchor BoxesDimension ClusterDirect location PredictionFine-Grained FeaturesMulti-Scale TrainingLoss FunctionYOLO V1存在的问题 对于…

使用Redis代替Session实现短信登陆

1.集群的Session共享问题 多台Tomcat并不共享Session存储空间&#xff0c;当请求切换到不同tomcat服务器时会导致数据丢失&#xff1a; 当用户量增多&#xff0c;我们需要进行负载均衡、对tomcat做水平扩展&#xff0c;可是存储在Tomcat里的Session不是共享的&#xff0c;这…

从C和C++内存管理来谈谈JVM的垃圾回收算法设计-上

从C和C内存管理来谈谈JVM的垃圾回收算法设计-上引言C内存模型malloc堆内存分配过程malloc为什么结合使用brk和mmapmalloc如何通过内存池管理Heap区域垃圾收集器引言 本文想和大家来探讨一下JVM是如何对堆内存进行管理和垃圾回收,相关书籍如深入理解JVM第三版中已经介绍过了相关…

OSCP-Vulnhub靶机记录-digitalworldlocal-fall

Vulnhub靶机记录-digitalworldlocal-fall靶机描述安装扫描枚举使用kali自带的FUZZ权限提升靶机描述 靶机地址&#xff1a;https://www.vulnhub.com/entry/digitalworldlocal-fall,726/ Description To celebrate the fifth year that the author has survived his infosec ca…

也来聊聊滑块验证码的那些事

单位做攻防演习&#xff0c;我扮演攻击方尝试破解。发现滑块验证码做了升级&#xff0c;比之前复杂了很多。好在仍然是一维验证&#xff0c;不用太麻烦。https接口里读出的是json对象&#xff0c;先从对象里取出图片转的base64编码&#xff0c;然后把字符串转回成numpy.ndarray…