我们的Server能够承载多少用户?
这个问句包含了多个隐藏的未定义的前提条件,我们可以试着通过扩展句子把他们暴露出来。
什么配置
的Server能承载哪个站点
的多少用户
的正常
的使用
?
变量
什么配置
是我们能够控制的“变量”,包括以下四个方面8个“变量”。
- cpu(主频/核心数)
- 内存(容量)
- 硬盘 (iops/容量)
- 网络带宽(内网/外网),网卡吞吐量
前提条件
哪个站点
、正常
和使用
是我们需要需要在测量前固定下来,在测量期间不应该发生改变的“前提条件”。
- 哪个站点
- finesheet.com
- 免费站点
- 付费站点
- 正常
- 正确性:不会报错
- 流畅性
- 页面加载响应时间(哪些页面)
- 操作相应响应时间(那些操作)
- 使用
- 操作(查看、编辑)占比
- 数据量(数量,大小)
- 用户类型
- 站内用户
- 站外用户
我们的Server并没有一个持久存在于内存的数据模型,所有操作直接保存到数据库中,预计更新数据库(boltDB写操作)会成为Server的瓶颈。
所以我们以UpdateRow的资源消耗情况推算Server能够承载用户数。
比如,一次UpdateRow需要5ms计算,5ms磁盘读写,那么我们可以推算出,此配置能够支撑200 ops(1000ms/5ms)。如果我们定义用户正常使用情况下1秒钟发送一个UpdateRow请求,那么我们的Server在理想情况下则能同时支持200个用户。
测试数据
UpdateRow请求的Row为10KiB,依据是实际使用的BugsTracking中90%的行在5KiB~10KiB之间。
硬盘限制
硬盘限制有两个指标,分别是单次UpdateRow读写需要的时间和单行所占磁盘空间。
单次UpdateRow读写需要的时间
UpdateRow对硬盘的随机读写要求高,对硬盘的吞吐量并不敏感。测试使用TF卡(1200 iops)模拟aliyun的的高效云盘(1800 iops)。
一次UpdateRow需要调用BoltDB进行4~6次写操作。BoltDB在TF卡上平均单次写操作时间为5ms。
单行所占磁盘空间
由BoltDB中B+树引入的写放大问题,导致数据库文件占磁盘空间大小为实际数量的6倍。加上bleve的索引和History,10KiB数据需要10KiB x 18 = 180KiB的空间。1000行大概180M左右。
网络限制
aliyun主机的网卡为虚拟网卡,理论上没有速度限制。但是aliyun人为限制了内外网速度。内网速度为固定100Mpbs,外网速度目前按照流量收费的模式下为100Mpbs。
我们的Server对内网速度没有太高要求,100Mpbs足够。
外网速度100Mbps可以支持的UpdateRow为100 x 1000 / (10 x 8) = 1250 ops
内存限制
UpdateRow的内存使用量是数据行大小的50到200倍。倍数与行大小成反比。10KiB的行需要占用1M内存。
1G内存则能组多支持1000 ops。
CPU限制
测试使用主频为3.4GHz的i5-8350u,aliyun主机为Xeon 8163,主频在2.5左右。
UpdateRow计算需要10ms左右。提升CPU核心数量并不能减少计算时间,但是可以提升ops。
限制 | 关键数据 |
---|---|
CPU | 10ms/行 |
内存 | 1M/行 |
硬盘速度 | 5ms x 4/行 |
硬盘容量 | 180k/行 |
网友评论