一般来说,在系统的设计范围之内,吞吐量随系统的并发用户数的增加呈现增加趋势,也就是说你客户端来多少请求数系统吃(处理)多少请求数;当**出这个范围时有两种情况,一种是系统只能处理这么多,**过这个数系统不接收了,最后随着并发用户数的增多吞吐量是一个水平的直线;
还有一种情况是不管来多少系统都接收最后导致系统吞吐量下降甚至系统崩溃。并发用户数是客户端单位时间内对服务器端施加的压力,具体能不能接受并处理要看被测系统的吞吐量,软件测试做什么,而吞吐量是被测系统单位时间内处理的请求数或者说单位时间内处理的字节数;一个着重于客户端的操作即测试手段,一个着重于应用系统的处理能力即查看对象;(上面的讨论没有考虑两者的单位,如一个用户同时有多个请求情况)
好的行业代码
好的行业代码有以下属性,依序是:可读性,因为代码用来读和维护的频次要**写。代码的意图必须清晰,让其他开发者在多年后依然理解。防御性,就是要遵循防御性编码的实践。防御性编码本身就是一个课题,不过其要义是:你必须确保自己所写的类和方法的不恰当使用不会导致你的代码搞得软件都崩溃。优化,软件测试,位列清单的最后未知,因为大多数时候你并不需要真正去担心这个。这并不意味着你应该编写糟糕代码,在存在线性解决方案的情况下以O(n3)的效率去做某个东西。但开发者通常渴望尝试并且会在不需要的情况下过度优化,软件测试要学什么,却牺牲了代码的可读性和防御性。你永远都应该能够证明牺牲了这些属性的特定优化是值得的。现在你了解了如何去编写良好的行业代码了。
条件二
既然条件一已经实现了,那条件二会复杂么 ?
相比于条件一来说就是同一个key对应了多个用户。那么我们只需要把key加上用户的信息就可以了。比如说 key_用户1、key_用户2。
漏桶算法核心思想
漏桶算法的意思呢就是一个接口在一个时间单位中允许被访问次数是动态变化的(假如一分钟允许访问60次,那么从开始计时时不管有没有被访问*59秒只允许访问59次,30秒只允许30次)。为什么这样呢,因为有另外一个线程在进行递减操作
涉及变量
接口(key)
时间单位(expire)
允许访问多少次(limit)
递减间隔时间(interval)
递减步长(step)
剩余可访问次数(value)
key的访问时间(lastUpdateTime)
当前时间(nowTime)(注意nowTime的取值应为应用取得的时间而不是redis或者nginx取得的时间)
条件*程一:
12345678 if(存在key){ value--; if(value<=0){ 不能访问 } }else{ 添加key,设置value为limit }