首页 » 工具 » 正文

常用计算机操作的量级

我们设计一个系统,最重要的非功能质量就是高性能,也都需要进行性能测试,因此在设计系统的时候就要对系统的各个方面的容量进行合理的评估,因此,我们需要对一些常用的计算机操作所需要的时间有个大体的估算,这样才能设计出一个合理而且易于实现的系统,从而减小线上系统失败的风险。

硬盘IO

1. 普通的SATA硬盘每秒能达到120 IOPS, 顺序读取数据100M, 随机读取1-2M,取决于数据是如何存放的,如果数据按照行存放,每行4k,那么每秒随机读取4k*120 = 480k。
2. 1秒是1000毫秒,每次存取8ms(3ms磁盘旋转+3ms寻道+2ms存取数据延迟),那么每秒存取1000/8 = 125 IOPS,假设每次读取10块,每块4k, 10*4k=40k, 125 × 40k = 5M/s的随机存取速度。
3. 使用iostat可以看到IOPS和kb/s, 用kb/s除以IOPS得到平均一次IO读取多少数据,可知数据分布情况。
4. 普通的SATA硬盘一次随机IO的计算,寻道3ms, 旋转半圈3ms, 存取数据延迟2ms, 一共8ms, 每秒进行1000ms/8ms = 125 IOPS。
5. 假设每秒5200转的SATA硬盘,5200/1000ms = 5.2ms转一圈,那么半圈需要大约3ms。
6. FusionIO(一种SSd)可达到100w级别的IOPS。

内存和寄存器

1. 内存随机读取每秒30w次,顺序读取每秒500w次
2. 寄存器, L2, L3,内存,分支预测失败,互斥量加锁解锁是ns级别的

对比

1. 网页加载:秒级别
2. IO,网络:ms级别
3. 读取数据库一条记录:ms级的
4. 内存一次读取计算:1000ms/30w = 1000000ns/30 0000 = 3ns
5. 内存每秒可以读取1G的数据,硬盘每秒顺序读取可以达到100M,有的高端机器,例如ibm,华为等的服务器可以读取1.1G的数据,相当于内存的速度
6. cpu速度 = 10×内存速度 = 100×IO速度
7. 内存1M数据: 250ns, 亚毫秒级,网卡1M数据:10ms,普通的SATA硬盘1M数据:20ms
8. 固态硬盘访问延迟:0.1 – 0.2 ms,亚毫秒,和内存速度差不多
10. 同一机房网络来回:0.5ms,异地机房来回:30-100ms
11. 同一机房RPC服务调用在几个ms级别,有的会在几十,或者几百ms,一般设置200ms超时

Scalability

1. C10K问题,就是同时在线用户10000再垂直扩展硬件成本就会上升,所以,通常每台机器有5000QPS的性能
2. mysql在4核心,256g内存的时候垂直扩展,成本开始增加
3. UV: 每日一共有多少用户来访,用cookie session跟踪, 独立IP访问:每日有多少独立IP来访,同一个局域网用同一个IP, PV:每日的所有页面访问量
4. 如果每日UV 5000 0000, 那么每秒在线人数5000 0000/24/60/60 = 578人,还要知道这一秒内每个用户都在做什么,也许每秒内都在做一次查询操作,那就得有一个能承受578QPS的机器才行
5. 2^10 = 1K, 2^20 = 1M, 2^30 = 1G, 2^32 = 4G

微博Feed数量级

微博Feed系统研发,说出去很高大上,每秒万级写入、每秒百万级并发请求、每天亿级活跃用户访问、单业务千亿级数据量,虽然比不上BAT,但也是很光鲜。确实很高大上,每秒产生微博上万,微博和计数查询上百万,即使查询都走缓存也得几十台机器,每天上亿用户登陆,单业务上千亿数据,如果Mysql得至少2000张表

hbase读写数量级

hbase使用LSM(Log-Structured Merge Tree), 写内存,利用SATA的高性能顺序写write-ahead日志,写入速度可达4,5万,读性能并不高,需要在LSM的多个树上查询并合并,并且只适合查询条件单一的业务,查询性能不详