前言
系统设计时候,只有做出合理的系统方案设计,让重要指标达到目标值,才可以保证系统的长治久安,尤其是大型分布式、微服务或者流行的高并发系统,否则积重难返。
常见三大指标包括高性能、高可用、高扩展,每一个还会细分很多小指标。
简述三大指标
- 高性能:性能体现了系统的并行处理能力,在有限的硬件投入下,提高性能意味着节省成本。同时,性能也反映了用户体验,响应时间分别是100毫秒和1秒,给用户的感受是完全不同的。
- 例如:缓存、异步。
- 高可用:表示系统可以正常服务的时间。一个全年不停机、无故障;另一个隔三差五出线上事故、宕机,用户肯定选择前者。另外,如果系统只能做到90%可用,也会大大拖累业务。
- 例:为了保证可用性,通常会对服务接口进行超时设置,以防大量线程阻塞在慢请求上造成系统雪崩,那超时时间设置成多少合理呢?一般,我们会参考依赖服务的性能表现进行设置。
- 高扩展:表示系统的扩展能力,流量高峰时能否在短时间内完成扩容,更平稳地承接峰值流量,比如双11活动、明星离婚等热点事件。
- 例:考虑系统的扩展能力,你会将服务设计成无状态的,这种集群设计保证了高扩展性,其实也间接提升了系统的性能和可用性。
高性能指标
常用响应时间(RT)、吞吐量(TPS)来衡量、并发用户数来衡量。
响应时间RT(Response-time)
- 指执行一个请求从开始到最后收到响应数据的总体时间,即从客户端发起请求到收到服务器响应结果的时间。
- 一般用平均值,最常用,但是缺陷很明显,对于慢请求不敏感。比如1万次请求,其中9900次是1ms,100次是100ms,则平均响应时间为1.99ms,虽然平均耗时仅增加了0.99ms,但是1%请求的响应时间已经增加了100倍。
分位置(TP99\TP999)
将响应时间按照从小到大排序,TP90表示排在第90分位的响应时间, 分位值越大,对慢请求越敏感。
从用户体验角度来看,200毫秒被认为是第一个分界点,用户感觉不到延迟,1秒是第二个分界点,用户能感受到延迟,但是可以接受。因此,对于一个健康的高并发系统,TP99应该控制在200毫秒以内,TP999或者TP9999应该控制在1秒以内。
GC频率与时间
GC会阻塞系统的运行,造成停顿。一般放在监控中。
GC吞吐量:这里的吞吐量是指应用程序所花费的时间和系统总运行时间的比值。一般
GC 的吞吐量:系统总运行时间 = 应用程序耗时 +GC 耗时。如果系统运行了 100 分钟,GC 耗时 1 分钟,则系统吞吐量为 99%。GC 的吞吐量一般不能低于95%
停顿时间:指垃圾收集器正在运行时,应用程序的暂停时间。对于串行回收器而言,停顿时间可能会比较长;而使用并发回收器,由于垃圾收集器和应用程序交替运行,程序的停顿时间就会变短,但其效率很可能不如独占垃圾收集器,系统的吞吐量也很可能会降低。
垃圾回收频率:多久发生一次垃圾回收呢?通常垃圾回收的频率越低越好,增大堆内存空间可以有效降低垃圾回收发生的频率,但同时也意味着堆积的回收对象越多,最终也会增加回收时的停顿时间。所以我们只要适当地增大堆内存空间,保证正常的垃圾回收频率即可。
内存使用率:给算法及系统留出足够的内存,防止频繁GC
参考监控报警:
1. 元数据空间使用超过80%
1. 堆空间使用超过90%
1. 1分钟内 Ygc次数> 50
1. fullgc 5分钟内Fgc次数大于3次
1. 线程总数大于1500
1. 当前线程数比之前一分钟,线程总数增长30%
吞吐量 TPS(Transactions Per Second)
每秒内一台服务器或者一个进程完成的事物请求数量,体现系统处理请求的能力,这是目前最常用的性能测试指标之一。
- 一个事务请求是指一个客户机向服务器发送请求然后服务器做出反应的过程。
- 和响应时间呈反比,比如响应时间是1ms,则吞吐量为每秒1000次
每秒查询率 Qps(Queries Per Second)
- 每秒内一台服务器或者一个进程完成的查询请求数量,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
- 比如dns,它不包含复杂的业务逻辑处理,比如数据库中的每秒执行查询sql的次数。
- QPS 只是一个简单查询的统计显然,不能描述增删改等操作,显然它不够全面,所以不建议用 QPS 来描述系统整体的性能;
QPMS 每一毫秒请求数量
qps基本类似于Tps,但是不同的是,对于一个页面的一次访问,形成一个Tps;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“Qps”之中
例:访问一个页面会请求服务器3次,一次放,产生一个“T”,产生3个“Q”
并发用户数
- 指系统单位时间内可以同时承载的正常使用系统功能的用户的数量;与吞吐量相比,并发用户数是一个更直观但也更笼统的性能指标。一般将tps、qps、并发用户数同时描述对比,相同qps情况下并发用户数越多,说明并行能力越强。
并发与并行数
并发数是指系统指定时间处理的请求数量,这个也是反应了系统的负载能力。并行强调同时处理。
通常,设定性能目标时会兼顾吞吐量、响应时间、并发用户数,比如这样表述:在每秒1万次请求下,AVG控制在50ms以下,TP99控制在100ms以下,支持并发用户数1000以上。对于高并发系统,AVG和TP分位值必须同时要考虑。
一些推荐的指标计算方式
计算平均QPS
QPS = req/sec = 请求数/用时(秒)
QPS = 并发量 / 平均响应时间
计算峰值QPS和机器
原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间
公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS)
机器:峰值时间每秒QPS / 单台机器的QPS = 需要的机器
例如:我们公司每天1000w PV 的在单台机器上,这台机器需要多少QPS?
( 10000000 * 0.8 ) / (86400 * 0.2 ) = 463(QPS)
如果一台机器的QPS是60,需要几台机器来支持?
463 / 60 = 4(台)
单台服务器QPS可以通过后台统计获得、压测
计算最佳线程数量
刚好消耗完服务器的瓶颈资源的临界线程数,公式如下
最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间)* cpu数量
1.在达到最佳线程数的时候,线程数量继续递增,则QPS不变,而响应时间变长,持续递增线程数量,则QPS开始下降
2.每个系统都有其最佳线程数量,但是不同状态下,最佳线程数量是会变化的
3.瓶颈资源可以是CPU,可以是内存,可以是锁资源,IO资源
超过最佳线程数-导致资源的竞争
超过最佳线程数-响应时间递增
可用性指标
高可用性是指系统具有较高的无故障运行能力。
可用性 = 平均故障时间 / 系统总运行时间,一般使用几个9来描述系统的可用性。
对于高并发系统来说,最基本的要求是:保证3个9或者4个9。原因很简单,如果你只能做到2个9,意味着有1%的故障时间,像一些大公司每年动辄千亿以上的GMV或者收入,1%就是10亿级别的业务影响。
可扩展性指标
面对突发流量,不临时改造架构,最快的方式就是增加机器来线性提高系统的处理能力。
对于业务集群或者基础组件来说,扩展性 = 性能提升比例 / 机器增加比例。
理想的扩展能力是:资源增加几倍,性能提升几倍。通常来说,扩展能力要维持在70%以上。
但是从高并发系统的整体架构角度来看,扩展的目标不仅仅是把服务设计成无状态就行了,还要考虑:服务集群、数据库、缓存和消息队列等中间件、负载均衡、带宽、依赖的第三方等,当并发达到某一个量级后,上述每个因素都可能成为扩展的瓶颈点。
像MySQL这种有状态的存储服务通常是扩展的技术难点,如果架构上没提前做好规划(垂直和水平拆分),就会涉及到大量数据的迁移。
其他常见术语说明:
PV(page view),访问量
即页面浏览量,或点击量;通常是衡量一个网站或者新闻的主要指标。PV就像电视的收视率,从某种程度上已成为投资者衡量商业网站表现的最重要尺度。
计算:一般是指在一定统计周期内用户每打开或刷新一个页面就记录1次,然后多次打开或刷新同一页面则浏览量是否累计,一般会根据公司需求来定。当有人访问的时候,记录他所访问的页面和对应的IP,然后确定这个IP今天访问了这个页面没有。
如果你的网站到了23点,单纯IP有60万条的话,每个访问者平均访问了3个页面,那么pv表的记录就要有180万条。
有一个可以随时查看PV流量以及你的网站世界排名的工具alexa工具。
UV(unique visitor),独立访客数量
指一天内访问某个站点或点击某条新闻的不同用户数。
网站判断来访电脑的身份是通过来访电脑的IP以及cookies实现的。如果更换了IP后但不清除cookies,再访问相同网站,该网站的统计中UV数是不变的。如果用户不保存cookies访问、清除了cookies或者更换设备访问,计数会加1。
IP(Internet Protocol):独立IP数
是指1天内多少个独立的IP浏览了页面,即统计不同的IP浏览用户数量。同一IP不管访问了几个页面,独立IP数均为1;不同的IP浏览页面,计数会加1。 IP是基于用户广域网IP地址来区分不同的访问者的,所以,多个用户(多个局域网IP)在同一个路由器(同一个广域网IP)内上网,可能被记录为一个独立IP访问者。如果用户不断更换IP,则有可能被多次统计。
CTR(Click-throughRate):点击率
点击率,点击次数占展示次数的百分比。
DAU(Daily Active User) :日活
日活跃用户数量。常用于反映网站、互联网应用运营情况。
常见日活公式:
1、等同每日uv。
2、参考https://zhuanlan.zhihu.com/p/266615375
(1)日活=新增用户+活跃老用户
(2)新增用户=渠道A新增+渠道B新增+渠道C新增+渠道N+……
(3)活跃老用户=核心用+成熟用户+激活用户+沉默激活用户+流失召回用户
将(2)(3)带入公式(1)中即可得到日活公式;
(3)中的用户分类依据具体产品具体定义。
ps:核心用户完成了哪些动作成为了核心用户,找到这个核心动作以及核心魔法数字。
DNU: 日新增用户
DNU/DAU叫这个指标为活跃度指数,当然大家喜欢叫做新增用户占比。
PR:网页级别
PR值,即PageRank,网页的级别技术。取自Google的创始人Larry Page,它是***运算法则(排名公式)的一部分,用来标识网页的等级/重要性。级别从1到10级,10级为满分。PR值越高说明该网页越受欢迎(越重要)。
例如:一个PR值为1的网站表明这个网站不太具有流行度,而PR值为7到10则表明这个网站非常受欢迎(或者说极其重要)。
我们可以这样说:一个网站的外部链接数越多其PR值就越高;外部链接站点的级别越高(假如Macromedia的网站链到你的网站上),网站的PR值就 越高。例如:如果ABC.COM网站上有一个XYZ.COM网站的链接,那为ABC.COM网站必须提供一些较好的网站内容,从而Google会把来自 XYZ.COM的链接作为它对ABC.COM网站投的一票。
你可以下载和安装Google工具条来检查你的网站级别(PR值)。
扩展
-
日活和qps和分表,生产部署怎样支撑?
测试出当前标准服务器应用的qps,然后根据峰值qps粗略估算出服务器部署数量以及救急方案。
验证环境压测,按照估算配置的服务器,如果没问题,按照120%上线即可。
根据当前体量要存多少数据以及增量有多少,关系型数据库要制定合理的转存、分表方案。内存型数据要关注内存的使用,合理增加从节点。redis单台服务器10到12万命令数到头了,单机内存使用率不能超过60%,估计你这qps的话redis集群单节点都够了,一主三从配置