缘起
面试经常会遇到问题
- 刚才说的这个系统并发是多少
- 你们系统数据量是多少
或者工作中你会遇到:
- 产品经理问你:咱们这个系统对机器有啥要求,宽度给多少合适
- 项目经理给你任务:帮咱们盘点一下机器,把没用的机器回收了吧
- 双十一咱们系统能抗住不,需要增加几台机器,机器规格发我
限制因素
包括:CPU,内存,磁盘读写速度,操作系统对进程中的线程的数量限制, 带宽,一个请求的数量大小,中间件支持的并发量。
评估办法
- 并发量最开始评估,有并发量*平均数据量就是我数据量总量
- 并发量按照点击率预估:如果有特定场景,比如:广告推送1kW,大概有1%的点击率,那么广告的PV就是1KW*1%=10W 总量;
- 并发按照场景评估:如果业务系统,一次工单提交需要10次请求HTTP,那么乘以每天平均的工单梳理就是一天的并发数量
- 时间,每天是8W秒,但一般都发生在白天就按照4W秒来算,总量/4WS=平均QPS
- 峰值QPS:如果统计的数据就按照峰值是平均几倍来算。否则按照28原则(80%的请求发生在20%的时间范围内) 算出峰值QPS
- 数据量评估:统计或者预估,按照业务限制能提交的文件和数据量,完成一个业务平均的数据量,乘以平均QPS就是数据总量
- 带宽:数据总量除以时间就是数据带宽,网络带宽必须大于这个。同时也需要根据峰值QPS计算峰值带宽
- 中间件并发量分析:Mysql,Tomcat,Nginx,Redis,MQ,ZK等不同中间件能支持的并发量是不同的,后面挨个说明
- 中间件并发量不一定等于线程数量,需要根据中间件机制判断,比如redis就是单线程的,但也能支持10W的并发,tomcat中servlet是多线程的,一个请求用一个线程处理,那么就需要考虑线程的限制了。
- 不同操作系统对线程限制不同,比如:linux默认给一个进程1024个线程,再多就需要修改配置。
- 磁盘大小,如果是WEB需要考虑日志量;如果是DB或者文件服务器机器 需要考虑文件总量增量
- 磁盘读写速度 自建的话这个需要压测
- 内存大小跟业务有关系,大批量计算类型的业务系统就比较耗内存;但高并发的抢票的系统,支持并发量就更重要了。