- 关键概念
并发数: 指在确保延迟最低(服务质量最好)的情况下,系统能够同时服务的请求数(或者服务的用户数)
这个值通常等于线程数,这个值需要根据系统的同时在线用户峰值计算出来(就好比餐厅有多少用餐座位)。
最低平均延迟(没有明说,“延迟”都指这个):指在确保延迟最低(服务质量最好)的情况下,平均的延迟(就好比餐厅中食客平均用餐时间)。
QPS : 这个是为了系统之间横向对比而造的概念, QPS = 并发数 / 最低平均延时(我们常说的吞吐量,可以理解就是用于横向对比的QPS)。
(了解了这些概念你就会开餐厅了)
-
知道并发数,怎么计算线程数,
线程数 = 并发数, 不需要计算。 -
知道并发数,怎么计算CPU数。
首先 并发数 等于 线程数,先算出每个CPU最多能够支持多少个线程。
然后将并发数 除以 单个CPU能够支持的线程数 ,就是该系统需要的CPU数。
每个CPU支持的线程数,跟业务有关,一般 是单CPU支持250个线程 (假定线程CPU占用时间是 0.2ms, 平均延迟50MS)。
怎么算出单核250个线程呢?
首先知道一个线程开启后到结束所经历的时间,可以分为 “IO阻塞” + “CPU占用” ,就跟睡觉吃饭一样。
假定一个CPU时间片按照 0.2ms来算, 50ms就是 250个时间片,即单个CPU 50ms内可以处理 250个作业。
由于250个线程作业,每个线程作业只有1个时间片在占用CPU,那么完成250个线程的作业,一个CPU只需要50ms就能做完了。
所以单核CPU,50ms延迟,可以支持250个线程的结论就是这样来的。
我们常常说的业务系统的QPS是 单机 2000QPS,那么按照50ms延迟,那么可以算出并发数是 2000 * 0.05s = 100并发量,
相当低,顺便记住mysql的写【并发数】通常也就500.
- 怎么估算并发数?
假定某个系统注册用户数是 4万,那么20%的用户会在80%的时间活跃。
也就是活跃用户是 8000人。
用户平均在线时长是 2小时,那么评估1天内的用户平均值就是 2小时/24小时 * 8000 = 0.25 * 8000 = 666 人 ,
所以每日平均同时在线人数是 666人,并发用户数峰值 C‘=C+3*根号C, C是平均在线数 666,
那么峰值时 3 * 根号666 + 666 = 743。
或者也可以直接估算 666 乘以 三分之四 = 888 , 差别不大。
看到这里,可以思考一个有趣的问题,
假如写字楼午休时间是 2小时,那么这栋写字楼共有 1000个员工,每个员工平均用餐时间是 15分钟,请问在楼下开办餐厅需要提供多少个用餐座位?
答案是 1000人 除以 2 小时,算出 每小时的吞吐量 (QPS可以看成是每秒钟的吞吐量), 再乘以 0.25小时(也就是 15分钟),等于125个座位。
好了祝大家开店生意兴隆!