转转微服务容量管理实践

news2024/12/28 18:40:35

  • 1 背景
  • 2 容量管理的目标
  • 3 发展阶段
  • 4 容量管理
    • 4.1 容量水位
    • 4.2 资源容量优化
    • 4.3 集群容量
    • 4.4 压测指标
    • 4.5 压测标准
  • 5 扩容、缩容
  • 6 总结

1 背景

随着转转业务的不断发展和用户不断增长,公司持续增加对硬件和基础设施的投入,用于满足业务发展的需要,然而资源的使用率却逐步下降。因为最初的目标是发展业务,实现功能,随着业务的发展成熟,逐步更加关注服务的稳定性,性能、冗余、灾备等方案,这样更会增加资源成本。那么如何在保障服务质量和确保服务性能的前提下,同时降低运营成本提高资源利用率呢?容量管理就是其中必不可少的一环。

2 容量管理的目标

在解释容量管理目标之前,先来看一下容量管理的含义。

百度百科的定义:容量管理致力于在恰当的时间以一种经济节约的方式为数据处理和存储提供所需的容量。

在我看来,容量管理的本质是风险和成本之间的平衡,即在保障业务服务稳定的前提下,以最低的成本保证最优的服务质量。所以容量管理的目标有两点:

  • 成本控制:容量管理保证服务的容量和性能以最节约成本的方式满足既定业务需求,并对资源进行最有效的使用。
  • 业务支撑:容量管理结合当前服务质量(SLA),保证服务提供连续的服务水平;容量管理结合容量规划,指导业务规划所需的费用成本规划和调整。

3 发展阶段

转转的服务容量管理主要经历了3个阶段。

  • 第一阶段:无容量管理,服务全部混合部署到物理机和KVM虚拟机上,单台设备运行几十个服务,物理资源共享,造成服务间的互相影响。

  • 第二阶段:分析服务的可用性和性能数据配合运维的服务管理经验来降低服务混部比例,下线KVM虚拟机,调整服务配置,提升资源利用率,从而减少服务器数量,达到降低服务资源成本的目标。

  • 第三阶段:随着服务稳定性和性能指标数据的不断完善,服务进入云时代,加之压测标准和资源利用率标准的制定,进步一完善了容量管理的基础,成本和服务质量得到了有效的平衡。

第二阶段完成后,IT相关资源成本节约了约50%,第三阶段相较于第二阶段,IT相关资源成本进一步降低约50%。对于公司的降本增效的目标起到了关键性作用。那么下面我们讲讲具体怎么做到这样的成果的。

4 容量管理

4.1 容量水位

容量水位是当前实际消耗的资源(包括裸金属物理机、云资源和其他依赖的SaaS服务)占用当前总体可用资源的比例。例如,B服务有4个云实例,但实际上只使用了2个云实例,另两个实例并未加入分组提供线上服务,所以该服务的资源使用率只有50%,故当前的容量水位是50%。只有获取当前的容量水位,才可以依此进行各种判断和规划。后续进行容量分析时也是基于容量水位的元数据进行多维度数据整合分析并进一步优化。服务容量水位所需要收集的元数据如下表:

云主机:

  • CPU
  • 内存
  • 磁盘
  • 网卡

应用服务:

  • JVM内存
  • 应用线程
  • GC频率
  • QPS
  • 响应时间

如下图所示,可以看出,对于转转的用户习惯,访问量分布基本是在白天,晚上20:00-23:00用户访问量会逐步增加达到高峰。我们更要关注的是这个时间点上业务服务的容量是否能支撑系统的稳定运行,后续的容量规划也需要按这个峰值的对应的容量水位来估算。

4.2 资源容量优化

了解了容量水位后再对比我们线上服务的资源使用情况发现很多的资源浪费是容量水位偏低造成的。每月服务相关资源的费用也是一个不小的数字,此时容量优化的意义和价值就会凸显出来,这也是我们第二阶段和第三阶段做的事。

1、服务配置缩减 A服务CPU为4核,内存为8G。如下图所示,单日最高CPU使用率为8%(上限400%),内存使用率72%,在保证服务资源冗余30%的情况下,我们会把服务的CPU配置缩减为2核。

B服务容器内存为8G,根据内存公式,服务的JVM内存为6G,此时容器内存缩减到7G比较合理(由于业务场景不同,对于内存的使用需结合业务需要调整,避免引起GC异常或OOM)。

  • 内存公式

    • JVM总内存 = heap 内存 + 线程stack内存 (XSS) * 线程数 + 启动开销(constant overhead)

2、混合部署/策略

  • 在线业务和离线业务混合部署,晚间业务低峰期开启离线业务计算任务,有效地利用CPU,实现峰谷轮动。

  • 把低等级负载较低的服务或对服务可用性要求不高的服务与高等级或容量水位高的业务服务进行混合部署,充分地利用硬件或云主机资源。

例如:A服务是管理后台服务,资源利用率约为10%;B服务为搜索服务,资源利用率约为40%,我们把两个服务混合部署,充分利用主机资源。

4.3 集群容量

单纯的依靠容量水位去评估服务容量只是利用服务管理经验的服务监控数据控制资源成本。更精确更合理的方案是利用压测结合容量水位确定服务集群的准确容量。获取集群容量的方式通常有两种,一种是通过日志回放,模拟线上流量对单实例压测或者通过TCP-Copy的方式,把线上机器的流量拷贝对单实例进行压测,转转初期就是使用这种方式压测。另一种是对整个集群进行压测,通过获取集群的最大容量,再除以集群内实例数量来获取服务单实例容量。从经验和数据来看,采用集群压测的方式更适合一些,因为这种方式完全使用线上真实业务场景进行压测,获取的数值更准确。所以我们现在的单实例容量都是通过集群压测的方式获得。

4.4 压测指标

压测指标通常关注两类指标,一是系统类指标,二是服务类指标。

系统指标:

  • CPU使用率
  • 内存使用率
  • 磁盘I/O使用率
  • 网卡带宽

服务指标:

  • 接口响应耗时
  • 耗时分位
  • 错误率
  • 慢速比

4.5 压测标准

通常情况下,资源使用率并不简单地等于CPU利用率、CPU负载,也包括内存、I/O、服务相关配置不合理造成的瓶颈等等。所有这些资源的瓶颈最终都会表现为响应时间和错误率的增加,所以不论服务有多少资源,我们需要找到一个触及系统资源瓶颈的临界点(如下图所示),在这个点之前,应用的性能表现和访问量是呈线性关系的,一旦访问量超过这个临界点,应用的性能就会明显下降。基于此,我们压测的标准如下:

Error%(错误率):

  • A级服务压测请求错误比例<= 1%。
  • B级服务压测请求错误比例<= 3%。
  • C级、D级、E级服务压测请求错误比例<= 5%。

Response Times(响应时间):

  • Median(中位数):50%响应耗时不超过服务平均耗时(Average)2倍。
  • 90th pct:90%响应耗时不能超过服务平均耗时(Average)5倍。
  • 99th pct:99%响应耗时与90%响应耗时差值>=2倍,注意分析耗时长的接口慢的原因。

这个标准中可以看出,响应耗时方面,我们对于不同的百分位请求耗时有着不同的要求。比如A服务的压测QPS为1000,TP50为100ms,TP90为300ms,TP99为800ms,很明显服务的长耗时比较多,服务的性能下降严重,此时的压测数据并不能代表服务的真实容量。所以我们基于现有的服务耗时数据结合服务性能目标,对服务的响应耗时规定了明确的浮动范围。

压测目标值配置和达标报告示例:

压测获取的服务容量数据会统一记录到服务信息管理平台。

5 扩容、缩容

如下图:基于服务容量数据,在公司的促销活动中,我们实现了定时扩缩容功能;对于日常服务质量保障,我们将利用服务容量数据实现服务容量弹性伸缩功能。

随着日常服务压测的流程和规范不断完善,服务的容量数据也日趋完善,这些数据不仅对服务的扩缩起到指导作用,更是对服务稳定性提供了保障。

6 总结

容量管理是一个复杂的系统工程,方式和方法多样。不仅要在策略、方法、方式上进行定义、明确和落地,还需要在规范、流程上不断细化和完善,这样才能达到降本增效的目的。同时容量管理的重要性不言而喻,它是服务稳定性保障、资源成本控制的基石。随着智能化运维技术的逐渐成熟,我们要朝着更低的成本更优的质量目标前进。


转转研发中心及业界小伙伴们的技术学习交流平台,定期分享一线的实战经验及业界前沿的技术话题。 关注公众号「转转技术」(综合性)、「大转转FE」(专注于FE)、「转转QA」(专注于QA),更多干货实践,欢迎交流分享~

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

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

相关文章

计算机网络8-在浏览器中输入URL后会发生什么

参考&#xff1a; 在浏览器中输入URL并按下回车后会发生什么&#xff1f; DNS域名详细解析过程 1.URL解析拿到域名 当用户输入URL并回车后&#xff0c;浏览器对拿到的URL进行识别&#xff0c;抽取出域名字段&#xff0c;比如https://www.baidu.com,它的域名就是www.baidu.com…

SQL数据库根据需求发送邮件

一、启用数据库邮件 手动启用数据库邮件功能&#xff0c;需执行以下脚本&#xff1a; exec sp_configure show advanced options,1 RECONFIGURE exec sp_configure Database Mail XPs,1 RECONFIGURE With Override 二、邮件服务器设置 1.邮箱启用设置-POP3/IMAP/SMTP/Exch…

DAMA数据管理知识体系指南之数据质量管理

第12章 数据质量管理 12.1 简介 数据质量管理是组织变革管理中一项关键的支撑流程。业务重点的变化、公司的业务整合战略&#xff0c;以及并购与合作&#xff0c;都对IT职能提出了更高要求&#xff0c;包括整合数据源、创建一致的数据副本、交互提供数据或整合数据。与遗留系…

SpringAOP理解实现方式

Aop 什么是Aop&#xff1f; AOP就是面向切面编程&#xff0c;通过预编译方式以及运行期间的动态代理技术来实现程序的统一维护功能。 什么是切面&#xff0c;我理解的切面就是两个方法之间&#xff0c;两个对象之间&#xff0c;两个模块之间就是一个切面。假设在两个模块之间…

9.手动部署Java应用

Jenkins部署Java应用什么java应用手动部署java环境、手动进行代码发布过程1.环境准备配制负载均衡配制webserver&#xff08;tomcat&#xff09;集群本地做域名劫持查看效果2.模拟开发提交Java代码-->推送至gitlab上传代码至gitlab3.运维克隆代码&#xff0c;然后通过maven手…

Yolo-fastestv2训练自己的数据集记录

Yolo-fastestv2训练自己的数据集记录 第一节&#xff1a;代码来源 本机环境&#xff1a;ubuntu20&#xff0c;cuda,cudnn,pytorch1.11.0 代码来源&#xff1a;https://github.com/dog-qiuqiu/Yolo-FastestV2 配置环境后先测试一下环境 终端输入&#xff1a; python3 test.py…

Vue入门介绍

一、背景 目前前端主流框架有Vue、react、Angular等&#xff0c;其中Vue简单易学&#xff0c;只要稍微会点HTML、CSS、JavaScript基础就能很快上手Vue&#xff0c;其门槛低&#xff0c;上手速度快的特点&#xff0c;深受测试开发同学喜爱&#xff0c;已逐渐成为测开必备的前端…

spring回显方式在代码层面的复现(内存马系列篇十四)

前言 在前面的一章中&#xff0c;主要在理论上进行了各种内存马的实现&#xff0c;这里就做为上一篇的补充&#xff0c;自己搭建反序列化的漏洞环境来进行上文中理论上内存马的注入实践。 这是内存马系列文章的第十四篇。 环境搭建 可以使用我用的漏洞环境 https://github…

一款基于java的超级棒的开源支付系统(用来毕设也不错),国内首款开源的互联网支付系统

最近就快要到年末了&#xff0c;小编想着应该会有很多公司开始冲年度的业绩了&#xff0c;既然是冲业绩&#xff0c;就离不开我们的支付系统&#xff0c;所以小编就去网上给大家找到了一款超级棒的开源支付系统&#xff01;帮助大家从头到尾了解清楚这其中的逻辑&#xff01;所…

蓝牙 - 芯片制造商的代号编制以及在Windows上查看

在蓝牙技术的规范中&#xff0c;对很多信息都进行了整理和代号分配&#xff0c;比如生产蓝牙芯片的厂商&#xff0c;也进行了数字编号。 有一个专门的“Assigned Numbers”的PDF文档&#xff0c;记录了蓝牙规范中的各种类型数字所表示的含义。 本文介绍的数字类型&#xff0c…

JavaScript Window - 浏览器对象模型

JavaScript Window - 浏览器对象模型 浏览器对象模型 (BOM) BOM&#xff1a;Browser Object Model 是浏览器对象模型&#xff0c;BOM由多个对象构成&#xff0c;其中代表浏览器窗口的window对象是BOM的顶层对象也是核心对象&#xff0c;其他对象都是该对象的子对象。 BOM对象…

IB-PYP幼儿十大素质培养目标

作为IB候选学校&#xff0c;一直秉承IB教育的核心目标&#xff0c;贯彻在幼儿的学习生活中。IB教育之所以成为当今国际教育的领跑者&#xff0c;最主要的原因是IB教育是切切实实的“全人”教育&#xff0c;“素质”教育&#xff0c;拥有一套完整的教学服务体系。当我们走进IB“…

【机器学习实战】七、梯度下降

梯度下降 一、线性回归 线性回归算法推导过程可以基于最小二乘法直接求解&#xff0c;但这并不是机器学习的思想&#xff0c;由此引入了梯度下降方法。本文讲解其中每一步流程与实验对比分析。 1.初始化 import numpy as np import os %matplotlib inline import matplotli…

C语言(结构和指针)

目录 1.声明结构指针 2.用指针访问成员 3.传递结构成员 4.传递结构的地址 5.传递结构 6.机构的其他特性 7.结构中的字符数组和字符指针 关于为什么要使用指向结构的指针。 第一&#xff0c;就像指向数组的指针比数组本身更容易操作一样&#xff0c;指向结构的指针通常比…

5年自动化测试,终于进字节了,年薪30w其实也并非触不可及

我的职业生涯开始和大多数测试人一样&#xff0c;开始接触都是纯功能界面测试&#xff0c;第一份测试工作就是在电商公司做功能测试&#xff0c;工作忙忙碌碌&#xff0c;每天在各种业务需求学习和点点中度过&#xff0c;过了好几年发现自己还只是一个功能测试工程师&#xff0…

第十二章 Ambari二次开发之集成Alluxio

1、Alluxio高可用部署 生产环境&#xff1a;使用具有高可用性的模式来运行Alluxio masters。 1.1、Alluxio架构 ​ Alluxio可以被分为三个部分&#xff1a;**masters、workers以及clients。**一个典型的设置由一个主服务器、多个备用服务器和多个worker组成。客户端用于通过S…

机器学习实战--梯度下降法进行波士顿房价预测

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天来学习一下如何使用机器学习梯度下降法进行波士顿房价预测&#xff0c;这是简单的一个demo&#xff0c;主要展示的是一些小小的思路~ 本文目录&#xff1a;一、波士顿房价预测1.全部的数据可视化2.地理数据可视化3.房…

基于”PLUS模型+“生态系统服务多情景模拟预测实践

工业革命以来&#xff0c;社会生产力迅速提高&#xff0c;人类活动频繁&#xff0c;此外人口与日俱增对土地的需求与改造更加强烈&#xff0c;人-地关系日益紧张。此外&#xff0c;土地资源的不合理开发利用更是造成了水土流失、植被退化、水资源短缺、区域气候变化、生物多样性…

根据手机号显示其运营商信息phone.find

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】根据手机号显示其运营商信息phone.find选择题以下关于python代码表述错误的一项是?from phone import PhonephonePhone()print(【执行】phone.find())resultphone.find("13366667777"…

21.操作符优先级和结合性列表,复杂表达式求值顺序

目录一、复杂表达式求值顺序1.操作符的优先级2.操作符的结合性3.操作符是否控制执行的顺序二、求值顺序三、操作符优先级和结合性列表一、复杂表达式求值顺序 复杂表达式的求值顺序由三个因素决定&#xff1a; 1.操作符的优先级 2.操作符的结合性 3.操作符是否控制执行的顺序 1…