如何合理的评估上线服务器数量

1、性能指标

 

咱们知道服务器,有 CPU、内存、IO、网络等一系列指标,除了这些系统级的,还有些针对各个语言本身的性能参数,而一个服务器的吞度量与请求对CPU的消耗、外部接口、IO等等紧密关联的 ,面对这么多繁杂的参数咱们如何有效而快速的利用,如何评估这些性能参数信息? 下面我以游戏服务器来为例说一下咱们主要关注点。web

 

咱们主要关注如下3个点:缓存

并发数:并发请求数安全

响应时间:平均响应时间服务器

TPS:每秒钟处理事务数量网络

TPS =并发数/响应时间架构

 

经过上面咱们看到,TPS但是反映一个服务器的吞吐量的综合值,他是咱们评估服务器性能的一个重要参考,经过tps,咱们能够知道单台服务器的最大请求能够处理多少,pcu(同时在线人数)是多少 ,以及配合其余性能参数,咱们还能够定位到服务器的性能瓶颈,因此咱们预估服务器的性能的时候,TPS是一个关键的参考值。并发

 


 

2、上线前的测试流程

 

 一、测试模型设计

     这一部分,也能够叫测试目的的肯定,不一样测试目的,对测试模型的要求也不一致,测试目的的定位,也决定了每次测试的方案和偏重点会不同,因此不能一律而全,要区别对待。工具

    

      咱们通常会有一些以下的区分:性能

    

     服务器TPS测定,也是定位服务器的最大承载量,咱们须要优先经过压力测试找到TPS的初始值,而后再进行稳定性测试和容灾测试,找到TPS的稳定值范围在哪里,最终修正TPS值。测试

     性能瓶颈定位,经过压测和关键指标数据的收集,定位服务器性能瓶颈的区域。

     关键接口指标,针对关键接口作一些指标收集。

 


 

二、压力测试

  压力测试主要是测试服务器在极限状况下的承载是怎样的,以及可以达到怎样的极限值。作压力测试还须要针对性的编写一些压测机器人来帮忙咱们发起密集的请求,以让服务器达到满荷的状态。

 

     咱们的压测主    要包含这几个方面:

 

  •  1)、指令机器人

         指令机器人是压测发起 主体,你能够把他看做为一个模拟的用户,模拟用户的指定行为,和收集一些关键数据。从功能方面来看,机器人主要功能,根据输入指令,发起特定请求(批量或者单个),收集请求和回复数据。

        因为每一个游戏的业务类型不同,协议也有本身的加解密方式,因此相对要复杂些,并且复用性也比较差。而web方面的指令机器人,简单易用,只要把关键的部分经过元数据来配置,基本能够作到一次编写,处处乱用的目的。

 

 

  •   2)、指令的录入

         指令通常都是client向服务器发起的request,每种应用不尽相同,能够本身编写指定格式,也能够在服务器或者客户端进行指令录入,由于游戏协议 的特殊性咱们通常是作录入来处理,这个也能够根据本身需求来,主要是保证,指令可以让方便机器人读取就行。

 

   

  • 3)、数据准备和指标的录入

    游戏通常是有状态的状况,因此在除了指令录入还须要准备些初始化的数据,好比模拟账号,一些道具的初始等等。机器人不但负责请求,还得有必定的数据收集功能,通常的数据包含以下,

     request数量/秒,成功率多少,失败率多少,还有每一个接口的请求次数,平均耗时等。在腾讯这边,有时候会须要这些数据上传到统计平台,来统计测试的统计图,作最终的压测指标。

       这里给你们截图一个咱们日常使用的输出模型:

 

  这个图我么能够看到,总共请求了9960次,成功100%,870次请求/s,,请求间隔时间,11.450s,最快3.3ms,最慢871.6ms。

 

  以上这几部主要作压测的基础功能,在测试的时候,咱们须要把指令机器人跑起来,不断的加量,看服务器的运行情况,以此来评测服务器的tps。

 


 

三、稳定性测试

 稳定性测试就是要测试服务器的稳定性,有时候服务器在功能测试的时候并不能测试到一些情况,好比长时间运行会有资源的没释放,致使的GC的问题,或者是DB快速增加后的访问变慢问题,这些就须要稳定性测试来发现问题。

 

咱们通常在作出压力测试状况下,会计算出单台服务器的tps,而后以此tps压力下,让机器人测试19小时以上,期间会检测服务器相关的cpu,内存,网关流量;逻辑进程相关的,cpu,句柄,gc次数,线程数;缓存服务器的cpu,以及网络流量等。经过查看这些参数的运行曲线,会很容易发现一些常见的问题。关于这些参数的监控工具,经常使用的有不少,我就不一一推荐了。

 


 

四、容灾测试

容灾测试就是测试下服务器在出现意外的状况下,如何快速的修复服务或者保障服务器不宕机。

 

在腾讯合做的项目中,通常会有要求30分钟之内恢复,这个就须要上线前,作一些容灾演练,这个期间须要保证每一个组件都可以足够健壮了,在集群内的单个组件发生情况了,守护程序可以主动发现并拉起或者报警,备用组件可以即时的跟进,保证不会由于某一个组件出现问题,而致使服务器长时间没法访问。

 

咱们通常这么作,正在运行的服务器中,随机kill其中一个memcache主机,看守护程序是否能够快速拉起,会不会出现脏数据。或者在DB方面,kill其中一个主机,看是否实现数据分片后存储节点的冗余与互备,在出故障时,有效保障数据处理不间断

 


 

5.关键接口测试

每一个系统都有一些关键接口,接口的关键与否和业务有很大关系。有时候咱们须要拿到这些关键接口的指标评估,好比关键接口的评估标准,优化先后的数据对比和性能提高对比等。

关键接口测试要作到安全稳定,性能提高的前提要保证接口的安全和稳定。

 

以上这些是咱们通常会用到的测试方式,几种测试方式能够组合为一种测试方案,流程也会不相同。固然了通常状况下,咱们会把这些流程都走一遍,保证不遗漏,数据更全面。


 

三,上线服务器的数量的预估

 

 评估上线服务器数量,咱们须要一步步反推。好比,上线的某一段周期内,会有多少流量(用户)导入,单台服务器可以承受多少流量,有了这两个值,预估的服务器数量=拿总流量/单台服务器承压流量。固然了,总会有些偏差,咱们通常还要多处20%的预留,预留你懂的,总有意外,出来了意外总不能去甩锅吧。

 

上面咱们讲了2个关键指标,总流量,单台服务器承压流量。这里的流量须要和业务需求挂钩的,好比BS架构的互联网产品,PV(点击)是流量单位,而CS架构的游戏,则用户是流量单位。每种业务不一样评判的标准不尽相同,须要根据本身的需求来。下面我以游戏为例来举栗。

 

前面的测试已经帮咱们拿到重要数据了,TPS,那TPS如何来转换为用户呐?要想讲清这个,咱们先回顾下TPS概念,TPS是每秒的事务数,在游戏里这里的单个事务是指一个用户所执行的一组指令所耗费的时间,是一组而不是一个,为什么是一组,由于每一个指令耗费的时间不尽相同,单个指令的TPS毫无疑义,一组才能表明一个用户的真正行为。此时TPS就能够间接转换为用户数了,但还要考虑一个比率问题,真实用户是没法达到机器人的水准的,也就是tps转换用户数要变大。好比压测出的机器人tps是1000,机器人执行一组指令须要160s,而真实用户执行须要1605s,此时的最终单台服务器承压用户数为1000*10=10000。

 

对于总流量,咱们能够和运营人员沟通,此次导入的新用户指标是多少,再根据以往的经验或者公测数据,就能估算出预计的PCU(同时在线用户)和DAU是多少。有了PCU,总流量就知道是多少了,最终的服务器数量也能够预估出来了。

 

对于B/S架构的互联网产品,我只能浅略的讲下以前的经验了。以前作的时候,上线前可以向运营拿到的数据是推广量,一个PV(点击)算一个推广量单位。咱们是这么处理的,按照用户的习惯,咱们的产品通常会在10:00-14:00,16:00-22:00期间达到访问高峰,也就是10个小时,若是单台服务器的tps为10000,单台服务器的能够承受的日PV=10000*10*1(至关于按最高TPS访问10个小时,不一样的应用场景会有一些不一样),有了日PV,那么咱们预估出服务器数量应该是:总推广量/单台服务器的日PV。

 


 

4、后续

以上就是一些对服务器上线前的一些测试流程,经过这些流程,咱们就能够对服务器有一个大概的了解,好比 服务器瓶颈会在哪里 ,出现特殊状况,如何作预案等。

 

另外测试数据只能提供一个初始值,正在的上线的时候,会出现一些其余的情况,须要针对测试的数据进行修正,若是误差比较大,要对不完善的方案进行改进。咱们是不可能预估出真实的数据的,只能无限接近这个值。

 

 还有一些其余的测试方案和流程我没有讲到,之后再表。测试流程的设定应该根据自身状况来,不必每步必作,大公司有大公司的规范,小公司有小公司的流程,选择本身适合的最重要。

相关文章
相关标签/搜索