作者简介
姜泽 百度高级运维工程师
负责百度智能运维产品(Noah)的运维工作,在可用性建设,容量管理方面有着丰富的实践经验。
干货概览
容量管理是系统可用性运维的重要环节之一。通常来说,容量管理包含容量度量、容量规划和过载保护三个过程。容量度量首先要确定系统容量的衡量标准,通过一定方法得到各模块的流量承载能力(包括额定负载、极限负载和冗余度),从而得到系统整体容量。容量规划是基于SLA可用性要求,确定资源在时间上的需求规划。过载保护是根据容量衡量和规划结果进行的外围系统设计,以保障业务在满足SLA的前提下,稳定处理高于额定负载的请求。
百度Noah平台的时序数据存储系统(TSDB),承载了百度诸多核心业务的监控数据存储与查询需求,日均写入点数以万亿记,查询请求高达数十亿次。在如此大的请求场景下,建设一套完善的容量管理机制,有效的度量TSDB系统的容量能力,合理规划系统容量发展,及时发现系统的容量风险,有效应对容量过载场景,是非常困难又非常重要的。本文主要介绍TSDB系统容量度量、容量规划方面的内容。在接下来的后续文章中会详细介绍过载保护方面的一些实践。
容量度量--容量管理的基础
1设定容量指标容量是系统对业务承载能力的量化,一般我们使用可量化的性能指标来衡量系统的容量。通常来说有下面三种:
吞吐量(Throughput):指系统单位时间内处理的请求总数。请求可以是读写请求,也可以是数据处理请求,对应着QPS(Query Per Second)和RPS(Request Per Second)两类;
并发数(Concurrency):同一时间内能够处理的请求数目;
系统延迟(Latency):指系统完成一个请求所花费的时间。
在多并发系统中,可以把这三者的关系简化为:吞吐量=并发数/系统延迟。对于单并发系统,吞吐量就是系统延迟的倒数。
至于具体使用哪一个性能指标来衡量系统容量能力,需要根据不同的业务场景来判断。在多数场景下,我们考量的都是吞吐量(QPS或RPS),当然对于实际的业务场景,QPS、RPS的定义会略有区别。在Noah监控场景下,主要是监控数据(时序数据)的写入和查询,每个请求会对应多个itemCollection,而一个itemCollection中带有多个监控数据点。因此,我们使用PPS(Point Per Second)作为TSDB系统的QPS指标来衡量系统的容量能力。
2获取容量数据获取容量数据的方法有容量估算和压测两种。容量估算指通过各子模块的运行指标,使用资源建模计算的方式汇聚计算出全系统的容量数据。例如下图,模块A为整个系统的入口模块,入流量为x,他有两个下游B和C,分别承载y和z的流量。首先,通过资源消耗(瓶颈资源)与流量的折算关系估算出每个模块的容量分为X,Y,Z,例如在资源消耗50%的时候,流量是1KQPS,可以预测系统达到极限负载的情况下容量为2KQPS(只考虑系统为线性