百度智能监控系统的过载保护实践

2024-01-15 06:20

本文主要是介绍百度智能监控系统的过载保护实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

640?wx_fmt=gif

作者简介

姜泽    百度高级运维工程师

640?wx_fmt=png

负责百度智能运维产品(Noah)的运维工作,在可用性建设,容量管理方面有着丰富的实践经验。


干货概览

对于容量管理,在之前的文章《聊聊时序数据存储系统的容量管理》中,我们已经对容量建模和容量规划做了探讨。本文将继续跟大家介绍容量管理中最为重要的一环——过载保护部分的内容。

在高并发、海量数据存储场景下,系统过载的案例并不少见。一旦系统过载,通常无法使用常用的双集群主备切换预案立即止损,同时,集群过载很有可能产生流量雪崩现象,造成实例、机器批量假死或宕机,恢复成本巨大。所以我们需要通过一定的过载保护手段,保证系统在容量承载能力下最大限度的为用户提供服务。下面将给出系统过载保护的通用方案,以及在Noah平台智能监控系统的流式计算-时序数据存储(下文以Astream-TSDB指代)中的应用实践。

过载保护的通用解决方案

1识别过载流量来源

过载流量来源通常意义上可以分为自然流量上涨人为触发的流量上涨。自然流量上涨指的是由于业务量增长带来的可预期的系统流量。这类流量过载可以通过系统的弹性扩缩容解决,并且可以通过更科学的、更合理的容量规划得以规避。人为触发的流量来源可以细分为攻击性流量(比如DDOS攻击)和用户行为导致的非预期流量。无论哪一种流量来源,在后台都应该可以通过运维数据找到来源IP。在实际生产场景下,不同的业务都应该有自己定义好的业务数据模型,比如在Noah监控中,每个请求都必须带有自己的产品线(Product)、集群(Cluster)、服务单元(Namespace)等信息。这些数据为识别流量来源提供重要依据,同时也是做多租户配额管理的基础。

2设置流量阈值

根据上一篇文章中的容量建模方法,可以合理的根据容量数据给出实例/系统的流量阈值。容量阈值的管理可以放在配置中心以方便随时调整。

3采取合理的过载保护措施

过载保护的手段通常有限流和降级两种。限流指系统只允许阈值之下的流量通过,而对于超出阈值的流量不额外消耗资源处理,直接丢弃。降级指系统通过“业务剪枝”的手段,丢弃非重要功能或非重要流量来源的处理,保证核心功能不受影响、核心流量稳定处理。

从过载保护策略生效层级上来说,又可分为单实例级别和全局级别。单实例级别的过载保护策略只在单机单实例上做过载保护,其流量数据统计通常受负载均衡和流量局部波动的影响较大,不利于微小异常的过滤;相比之下,全局策略对此类情况处理起来更有优势,但全局策略势必会带来额外的开销和系统设计难度,具体使用哪一种,需要结合业务的实际情况具体问题具体分析。

Astream-TSDB场景下过载保护实践

1过载场景描述

640?wx_fmt=png

在Noah平台的智能监控系统中,用户可以以自定义监控配置的方式驱动客户端做监控采集。自定义监控配置的方式比较灵活,甚至支持以正则匹配的方式采集多维度数据,这时如果用户对正则匹配不够熟悉,或者滥用例如*这样的通配符,很容易匹配远超预期的维度数值,从而导致客户端发送下游的数据量翻倍,直接造成后端Astream-TSDB压力突增,影响后端服务的可用性。在这种场景下,由于无法提前预知用户提交的配置会产生多少数据点,直接在采集端做流量控制也具有一定难度。

2过载保护机制实现

  客户端限流  

客户端的主要功能是根据用户配置的监控配置做本地采集,再将数据发送到下游计算存储。在客户端我们实现了远程限流配置控制开关。采集客户端会根据远程配置中的周期和阈值,在本地周期性的统计数据维度信息,统计的粒度从大到小,可以是集群级别(Cluster)、服务单元级别(Namespace),甚至可以精确到单个监控指标(Metric)。若统计到的维度组合数目超过了配置中的阈值数目,则这些“超额”的数据拒绝发往下游模块,并在采集监控项中吐出超限的监控提示用户。客户端限流可以从源头最大程度切断下游模块过载的流量来源。由于在分布式系统中,各个采集任务落在不同的客户端上,每一个客户端都只能统计本机上的数据,各个客户端不过载并不能保证全局的不过载,所以单纯的用单机单实例限流的方式无法解决所有过载问题。

  服务端限流  

客户端的数据按服务单元名做一致性哈希计算发往服务端,在服务端表现为相同服务单元的数据落在某几个实例上。我们在存储服务端的单机层级也针对服务单元维度做了限流策略。虽然存储端能将入口流量限制住,但对于计算集群来说这部分流量还在重试范围内,在计算端还是有打垮计算集群模块的风险。所以,存储端在发现维度超限的情况后,会返回给计算集群一个特殊的返回码,上游计算集群收到返回码后将这部分流量不再重试,直接丢弃。这样就防止了上游计算集群的重试机制造成自身发送队列堵塞,同时避免流量翻倍打垮下游存储。同客户端一样,这也无法解决全局的流量过载问题。

  云堤全局限流  

640?wx_fmt=png

为了避免单机限流的方案的不足带来的过载风险,我们针对Astream-TSDB的过载保护开发了云堤全局限流系统,整个监控的计算存储后端整体作为一个APP 接入云堤,实现全局计数和配额限流。它的主要思想是在计算存储后端模块的入口进行流量全局统计,在模块级别根据统计结果进行限流,达到模块级过载保护的效果。同时,将统计结果定期反馈到采集客户端,使得流量可以从最前端的入口进行限制,达到入口限流的效果。

云堤的运行流程如下:

  1. 在计算端入口 Astream-adaptor以及存储端入口 Saver上集成云堤SDK,入口模块每次收到数据时,调用云堤SDK上报该数据在Namespace和User维度的原始数据点数增量

  2. 云堤 SDK 返回上一个轮询周期统计到的Namespace和User维度的全局配额余量

  3. 入口模块根据云堤 SDK 返回的余量判断该Namespace和User的原始数据点是否超限,并决策是否拒绝当前流量

  4. 在客户端上,云堤提供当前统计结果中超限对象和超限指标的列表查询接口。由Checker模块负责轮询超限列表,并根据列表生成采集端限流配置,并同步到配置分发模块。    


总  结

以上是我在容量过载保护方面的一些粗浅经验和落地实践,如有不足之处,还请大家多提意见。

阅读推荐

  运维实践


智能运维架构 | 架构集成 | 网络判障 | 监控数据采集 | 监控报警 | 网络异常 | 分布式监控系统 | 数据可视化 | 单机房故障自愈 | TSDB数据存储 | 异常检测 | 流量异常检测 | 复杂异常检测 | 报警风暴 | 实时计算 | 故障诊断 | 日志监控 | 网络监控可视化 | HBase实践 | 多维度数据 | 容量管理

  运维产品

百度云BCM | 企业级运维平台 | 基础设施管理引擎 | 运维知识库 | 通告平台 | 百度名字服务 | 业务部署 | 数据配送 | 集群控制系统 | 外网监控 | 内网监控 | 部署变更 | 配置管理 | 站点监控

  精品推荐

AIOps全解析 | AIOps中的四大金刚 | 智能运维 | AIOps时代 | 运维演进

640?wx_fmt=jpeg

640?wx_fmt=gif

↓↓ 点击"阅读原文" 【了解更多精彩内容】 

这篇关于百度智能监控系统的过载保护实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/607939

相关文章

AJAX请求上传下载进度监控实现方式

《AJAX请求上传下载进度监控实现方式》在日常Web开发中,AJAX(AsynchronousJavaScriptandXML)被广泛用于异步请求数据,而无需刷新整个页面,:本文主要介绍AJAX请... 目录1. 前言2. 基于XMLHttpRequest的进度监控2.1 基础版文件上传监控2.2 增强版多

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置