实现一个功能有100种方法。这100种方式中,有的复用性高,有的代码流程清晰,有的稳定,有的高效。互联网薪酬最重要的是稳定和效率。
因为用户对app时间的反映特别敏感,比如12306为什么早些年被那么多人诟病,主要原因就是性能不高不稳定,导致用户体验特别差。
本文先说性能。
要把一个现象描述清楚,最重要的方法就是量化。把语言描述的模糊指标量化成可以用数字表示的指标。
评价一个人的学习质量,不能简单的用好坏来形容。你应该把你的成绩量化成几个组成部分,以便更清楚地描述一个人的学习成绩。
代码的性能也是一样的,所以有几个基本的描述指标,其中最基本的是在两个维度上描述服务的指标:
1.能力
2、耗时
所谓能力就是接口能处理多少流量,为什么12306的服务不稳定,不是因为12306的技术人员不行,主要是春运抢票的bug现场。每年春运以来,都有无数人同时抢票。普通的小app根本想象不到这种场景。
如果你的服务能处理这么大的流量。说明你的接口能力很强。
但是,光能处理不了。如果用户买了火车票,需要一个小时才能完成。即使能处理春运高峰的流量,用户体验也不行。
所以你的服务既能处理这么大的流量,又能在短时间内完成服务,说明你的界面是比较完善的。
对于系统的服务来说,这两个维度的量化有两个指标:qps和tp。
表示服务每秒完成的请求数。
什么是请求?
对于一个程序来说,它工作的本质就是输入和处理输出。所以,一次完成输入、处理、输出的过程,就是请求,也是查询。
用户使用手机淘宝app查询商品时,在搜索栏输入nike,即发起请求,服务查询数据库,获取信息,返回给用户。当用户看到的结果,也就是耐克相关的商品信息,显示在手机屏幕上,一个请求就完成了。
用户使用12306订票,选择起点和终点,点击查询,服务会查询库存,然后将当前车次和车票显示给用户,这就是完成了一个请求。
什么是QPS: QPS是一个数字,每秒钟,上面例子中的请求完成了多少次。QPS是多少钱。Qps本身只是一个数值,它描述的是没有主语的QPS,QPS是什么。对于后台服务,一个接口的qps是什么?
那么,qps仅仅是用来描述服务能力的吗?
我的一个接口qps是10000,是不是说明我的接口能力强?
实际上不是
Qps是描述服务当前状态的指示器。我一秒完成了100次请求,那么我的qps就是100,下一秒我完成了1000次,那么qps就是1000,这是一个随时间变化的指标。
比如淘宝商品查询服务,每天零点可能只有100个qp,但在双十一,可能有2万个qp。
所以qps只是用来描述当前服务一秒钟完成了多少个请求,并不能直接描述接口的性能。
那么,用什么来描述界面的性能呢?
描述接口性能的是接口的最大qps。
这是一个固定值。这个值是怎么得到的?该值是在服务到接口的压力测试期间获得的。
为了测试服务能力有多强,会对上线代码进行压力测试,压力测试结果就是这个服务的最大qps。
这个值表示这个接口一秒钟可以处理多少个请求。
比如淘宝的商品查询界面,压力测试报告中显示最大qps是5000,所以平时100左右的qps对这个服务根本没有影响,只是挠痒痒而已。双十一的qps达到20000后,很可能会出现问题,因为在压力测试中,最大qps是5000,现在用户每秒请求数大大超过这个数值,很容易造成系统崩溃。
如何解决这个问题?
不断迭代优化界面,或者换一个更好的服务器。这样接口才能承受这么大的压力。
这是qps:它表示一个服务当前每秒完成用户请求的次数。
最大qps:表示该接口每秒可以承受的最大请求数。
Qps监控示意图
如上图所示,服务的qps等于5000,也就是说服务每秒完成了超过5000个用户请求。而且看趋势qps还在增加。
如果你的压力测试报告上的qps是20000,那就是小情况,完全可以承受。如果你的服役压力测试报告所能承受的qps是9000,那么现在的数值是9430,说明这个时候非常危险。
那么为什么现在的qps比最大qps高呢?
有两种情况:
1.代码上线没有压力测试,不知道最大qps是多少。
2.突然出现的一些意外或者场景如下图所示,很明显是意外。目前qps急剧增加。
qps急剧增加示意图
这是描述服务能力的qps指数。
而在时间维度形容服务耗时的另一个指标——tp,下期接着讲。
上一篇:香辣鱼皮的家常做法大全