热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《运维之下》——第四章:服务器资源使用率

服务器数量达到一定规模后,老板们开始担心了:“每季度这么大金额的服务器采购支出,我们的服务器资源使用率如何?”––––––––

服务器数量达到一定规模后,老板们开始担心了:“每季度这么大金额的服务器采购支出,我们的服务器资源使用率如何?”

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

指标计算


了解资源使用率的前提是记录所拥有的服务器资源以及归属,在服务器采购到位后,就开始跟踪服务器的各项资源指标。但每次老板们问到这个问题时,作为运维人员还是很难直接回答。我们记录了每台机器历史的各项资源使用数据,但如何体现整体的资源使用情况,通过简单的指标表示出来还是比较麻烦的。

首先,我们不能把所有服务器罗列出来,逐台给老板汇报。

其次,每台服务器每天的资源占用情况是随时间,随业务特性动态变化的,需要将CPU、内存、磁盘、IO等每个动态变化的资源指标分别换算成一个值。

例如:一台CPU密集型的服务器,每个时间点访问量的不同,CPU使用率也是不同的,如图4-1所示。

最后,每台服务器每天的平均值,由于高峰期或低峰期的差值很大,均值没有任何参考意义。取每台服务器每天的最大峰值,有时候可能由于某一次数据传输,或者跑一个临时MD5运算导致CPU使用率突增,也不能合理代表这台服务器的CPU使用率。

《《运维之下》——第四章:服务器资源使用率》

图4-1  CPU使用率

了解到的业界一般的计算方法是:

 定义每天的业务高峰期为 10:00AM—10:00PM,求这段时间平均值表示该台服务器当天的使用率;

 每天取峰值的3个点,求这3个峰值点的平均值表示该台服务器当天的使用率。


对于定义业务高峰期,然后求平均值,我们认为不够精准,很多业务不一定白天时间达到它的峰值。如果每个业务都个性化定义高峰时间,工作量比较大,管理起来也很麻烦。每天取峰值的3个点求平均值,很多时候人工操作或者临时性的计算很容易把这个峰值提得太高。


经过多次讨论后,确定了下面的计算方法:

(1)每台服务器的CPU、内存、磁盘、IO、网卡数据每2秒钟采集一次;

(2)每天分别取这些数据的TOP n%求平均值。

如图4-2所示为某台服务器某天的监控数据,我们计算出CPU、内存、磁盘和IO的数值如表4-1所示。


《《运维之下》——第四章:服务器资源使用率》
图4-2  监控数据

表4-1  资源数值

资  源  项

数    值

CPU

98.12%

内存

73.29%

磁盘

58.69%

IO

29.05%

 

当然,怎么计算这个资源数值都没有问题,只要是统一的计算模型,能够表示所有机器的资源占用指标即可。我们这么计算是希望能够更接近服务器的平均峰值,消除一些临时性尖峰导致数值较大的问题。


指标展现


完成了资源使用率计算,但如何整体展现所有服务器的资源使用率也是一个问题。由于业务特性的不同,有消耗CPU的,有消耗内存的,也有类似离线存储消耗磁盘空间的,不可能把所有服务器的某项值加起来,然后求平均值,这样说明不了任何问题,而且值会低得可怜。在一个案例中,公司所有服务器每天的CPU值求平均值,CPU使用率只有23%左右。所有人看到这样的数据都会问一句话:“为什么我们的服务器资源使用率这么低?”


对于如何体现公司整体的服务器资源使用率这个问题,我们也没有什么好的方法,不过可以从另外两个维度去体现。

(1)将整个公司这个维度拆解到最小的相同功能集群的粒度,统计和展现这些小集群的资源使用率情况。这个时候就需要结合之前提到过的“服务树”,我们通过服务树将公司的产品划分到产品线->子系统->集群这样的粒度,每个小集群的功能是类似的,这群服务器的资源使用模型也是类似的。研发或运维在提交采购预算时,以最小集群为单位。领导在审批预算时,可以很方便地查看该集群的资源使用情况,决定是否购买。


(2)每月统计出资源使用率不达标的服务器,发给相关的研发主管和运维人员,督促他们尽快利用或者归还资源。比如某个集群每月不达标的服务器数量超过该集群的5%,则认为这个产品线资源使用不达标。

这样侧面解决了如何整体展现公司资源使用率的问题,给出最小集群资源使用率不达标的情况,展现的数据量比较少,而且能够很好地跟进和解决。还可以给出资源使用率不达标服务器和所有服务器的占比曲线,用来观察整个公司服务器资源使用率的变化情况。


这样既满足了工程师需要了解具体信息,执行改进的需求,也满足了老板需要了解整体信息,把握全局的需求。


怎么计算、怎么展现才算合理,每个公司都有自己的做法。当然,在你认为公司整体资源使用率都还不错的情况下,所有服务器的平均值也许可以作为一个基准,用来宏观监控整体资源使用率有没有变好或变坏也是挺不错的。


不达标原因分析

完成上述工作后,我们开展了一次资源使用率未达标服务器原因分析,按照未达标的原因进行了归类。如图4-3所示。


《《运维之下》——第四章:服务器资源使用率》

图4-3  资源使用率未达标原因归类

每类原因说明如下:

 灾备:该类型服务器属于对重要服务的备份服务器,平时没有或有很少的流量。

 特殊服务:该类型服务器属于特殊用途需要独占或者多副本存在,如ZooKeeper,或类似博客对外服务又需要安全隔离的业务等。

 服务部署中:服务扩容、搬迁时,暂时未引入业务流量。

 流量未达预期:业务已经在线上运行,但由于流量预估不准确,服务上线后流量和计算量未达到预期。

 开发测试中:新服务小流量运行,处于开发联调阶段。

 测试环境:研发或测试的线下集群,用于压力测试、功能测试等。

 计划下线:服务优化、架构调整、业务功能裁剪等,空闲服务器处于待下线归还状态。

 故障中:服务器故障停止业务,处于维修状态中。

 高峰预留:为了应对比如业务促销活动、特殊节假日等流量高峰,提前储备的服务器资源。


下面分析导致前几类原因出现的问题。

1.业务线预算不准确

 预估的业务流量较大,实际业务流量未达到预期,导致已经上线的服务器资源浪费。

 项目计划不准确,原计划3月份进行新服务上线或者扩容,结果项目延迟到6月份,导致3个月时间的服务器资源闲置。


2.服务器采购效率低,缺少快速伸缩的能力

 随着公司对于服务器需求的数量越来越大,很早以前那种随用随买的模式已经不适合了,转而采用服务器集采的模式,从预算申请,到领导审批、采购招标、供货商送货、服务器上架、系统装机交付等多个环节,在正常情况下会耗时2个月。那么业务部门往往会提前并较多地购买服务器,造成一定时间段的服务器资源浪费。

 为了应对某次突增几倍的业务促销活动流量,需要提前准备服务器资源。当活动结束后,服务器资源的归往往不及时,归还后其他业务部门消化这部分资源的时间也比较长。

 服务器采购时资产是划分到各个部门的。服务器资源归还后,还存在部门间资产更新计算的问题。


3.缺少资源监控平台

缺少资源监控和审查机制,业务部门浪费的机器也不会及时归还。


资源优化


看到这几类原因后,第一时间能够想到的解决方案就是公有云。类似AWS的服务,能够快速地交付或归还虚拟机资源,按时间、按流量收费。虽然大部分业务是可以部署在公有云上的,但还有很多类似HBase、离线计算等对磁盘IO、内网带宽有较高需求的业务,不太适合在虚拟机上部署,成熟公司这部分业务的服务器数量一般占到30%~60%。


先不讨论公有云是否真正省成本,仅就对目前国内云服务商的安全评估,我们还不敢把高敏感、高安全要求的用户数据、现金支付类业务放置在云端。另外,多机房服务冗余、机房间专线互通等各种因素也需要考虑进去。


我们的目标是通过缩短服务器采购周期,资源能够具备快速伸缩的能力,结合预算审批、资源监控等手段,将不达标服务器控制在合理范围内。综合考虑后,可选的解决思路如下:

(1)支持物理机租赁模式,提高服务器交付效率;

(2)支持私有云和公有云的使用,降低物理机的需求;

(3)统一预算平台,限制不达标业务的申请;

(4)资源监控,不达标服务器资源能够及时归还。


作为一些互联网公司,不希望投入过多的资源在固定资产上。运维人员也不愿意投入过多的精力在服务器的采购、上架、维保以及后续的报废处理上。当前已经有很多公有云支持虚拟机和物理机的租赁业务,传统的IDC厂商也陆续提供物理机租赁业务,由他们负责服务器的采购、上架等一系列工作,按照我们要求的时间、地点(IDC、机柜位置等)进行交付。公有云或服务器外包公司提供足够的备机池资源,能够应对我们对于服务器快速伸缩的需求,按照实际租赁时间收费。


成本方面,按照服务器3年淘汰,每次物理机采购实际是预付了3年的使用费用。采用租赁的方式按实际使用时间付费,不需要提前支付未来的费用。对于项目计划不合理、预算不准确、高峰期预留等问题,我们可以通过快速的服务器交付、归还的方式缓解这些问题,将成本支出降到最低。当前,足够的备机池、快速的交付时间是有成本支出的。


预算平台和资源监控的结合,限制和发现那些资源使用率不达标的服务器,督促业务线及时归还资源,减少成本支付。


提升服务器资源使用率还有很多方法,比如服务模块混布、资源闲时利用,这些属于运维可控的范围。另外,研发对于代码和功能的优化,效果往往会更加明显。


推荐阅读
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
  • 从运维繁忙到屡获殊荣:一位CIO的辉煌转型之路
    企业首席信息官(CIO)常常面临一个棘手的问题:如何有效推动公司的数字化转型?尽管数字化转型已成为企业未来发展的重要共识,但如何具体实施依然是许多CIO面临的重大挑战。在日常运营中,企业需要处理大量的业务问题和制定各种发展规划,这使得数字化转型往往被排在较低的优先级。此外,不断涌现的新问题和新规划也常常打乱原有的计划,进一步增加了转型的难度。 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • RocketMQ在秒杀时的应用
    目录一、RocketMQ是什么二、broker和nameserver2.1Broker2.2NameServer三、MQ在秒杀场景下的应用3.1利用MQ进行异步操作3. ... [详细]
  • 高端存储技术演进与趋势
    本文探讨了高端存储技术的发展趋势,包括松耦合架构、虚拟化、高性能、高安全性和智能化等方面。同时,分析了全闪存阵列和中端存储集群对高端存储市场的冲击,以及高端存储在不同应用场景中的发展趋势。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 在2019中国国际智能产业博览会上,百度董事长兼CEO李彦宏强调,人工智能应务实推进其在各行业的应用。随后,在“ABC SUMMIT 2019百度云智峰会”上,百度展示了通过“云+AI”推动AI工业化和产业智能化的最新成果。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 本文精选了几个结合 Vue 和 Spring Boot 的优质开源项目,适合开发者学习和参考。这些项目不仅涵盖了前后端分离的最佳实践,还提供了丰富的功能示例和详细的文档,有助于提升开发效率和技术水平。项目地址:https://github.com/ 示例链接。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
开发工程师
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有