![7f00c888df8901b22ef28dfbcfb60a9c.png](https://img-blog.csdnimg.cn/img_convert/7f00c888df8901b22ef28dfbcfb60a9c.png)
编辑搜图
请点击输入图片描述
大家都知道。
在设计一个系统时,最重要的非功能质量就是高性能。
但是
你设计一个低性能的系统时也要考虑硬件和中间件的具体情况吧。
有多少流量,需要多少硬件,都需要在开发前认真考虑
而不是仅凭感觉去确认
硬件少了,造成业务流量瓶颈
硬件多了,造成运算的冗余。
下面的数据能够帮助大家更好的在系统设计,功能开发中有效对性能进行评估。
首先明确的是,这个系统一定要可拓展。
针对流量的可拓展。
假设当前设计的业务系统当前用户 日访问量在100w,
当时突然有一天用户量激增到1000w
这时候代码改动应该是极少的
而应该对硬件进行拓展。
在面临这种情况下,了解硬件的具体性能至关重要。
以下标准 使用PC X86 桌面机器的经验。
不代表线上生产机器的数据,仅供参考。
下面分为应用层和系统层分别介绍
常用应用层性能指标参考标准
通用标准
容量按照峰值的5倍冗余计算
第三方查询接口吞吐量为 5000/s
单条数据库记录占用大约1kb的空间(少整些大字段)
Mysql
单端口读:1000/s
单端口写:700/s
单表容量:5000万条
Redis
单端口读:40000/s
单端口写:40000/s
单端口内存容量: 32GB
KafKa
单机读:30000/s
单机写:5000/s
DB2
单机读峰值:20000/s
单机写峰值:20000/s
单表容量:1亿条数据
常用的系统层性能指标参考标准
寄存器和内存
寄存器、L2、L3、内存、分支预测失败、互斥量加锁和解锁等耗时为纳秒级别。
内存随机读取可达30万次/s,顺序读取可达500万次/s。
内存每秒可以读取GB基本的数据。
读取内存中1MB的数据为250ns,为亚毫秒级。
硬盘I/O
普通的SATA机械硬盘IOPS能达到120次/s。
普通的SATA机械硬盘顺序读取数据可达100M/s。
普通的SATA机械硬盘随机读取数据可达2M/s。
普通的SATA机械硬盘旋转半圈需要3ms。
普通的SATA机械硬盘寻道需要3ms。
普通的SATA机械硬盘在已经寻道后(找到了要读取的磁道,也找到了要读取的扇区),开始读取数据,读取一次数据真正的耗时为2ms。
FusionIO卡(一种高的SSD硬盘套件)可达百万级别的IOPS。
高端机器如IBM,华为等服务器配上高端的存储设备,可以达到每秒GB级别的数据读取,相当于普通内存的读取速度。
固态硬盘访问延迟:0.1~0.2ms,为亚毫秒级别,和内存速度差不多。
网络I/O
常见的千兆网卡的传输速度为1000Mbit/s ,即128Mbit/s。
千兆网卡读取1MB数据:10ms。
数据库
读写数据库中的一条记录在毫秒级别,短则几毫秒,多则几百毫秒,大于500ms一般认为超时。
Mysql在4核心,256GB内存的机器配置中性价比最好,继续垂直拓展由于体系结构的限制,成本开始增加,提升的性能开始减少,性价比开始降低。
IDC
同一计方网络来回:0.5ms。
异地计方来回:30-100ms。
同一机房的RPC服务调用为几个毫秒,有的为几十毫秒或者几百毫秒,一般设置500ms以上为超时。
网络
网页加载为秒级别
UV:每日一共有多少用户来访,用Cookie Session 跟踪。
独立IP访问:每日有多少独立IP来访,同一局域网可看到同一个IP。
PV:每日单独用户的所有页面访问量。如果每日UV为500万,那么每秒的平均在线人数为5000000/24/60/60=578人,还要知道这一秒内每个用户都在做什么,如果每秒内都在做一次查询操作,那么需要有一个能承受578/s吞吐量的机器。
某社交媒体平台每秒的写入量上万,每秒请求量上百万,每天登录的用户上亿,每天产生的数据量上千亿。
组合计算和估算
普通的SATA机器硬盘一次随机读取的时间为:3ms(磁盘旋转) + 3ms(寻道)+2ms(存储的数据延迟) = 8ms。
普通的SATA机器硬盘每秒随机读取:1000ms/8ms = 125次IOPS。
IOPS代表磁盘每秒可随机寻址多少次,随机读取速度取决于数据是如何存放的,如果数据按块存放,每块4kb,每秒读取10块,那么随机读取速度为10*4KB*125次/s=5M/s。
一次读取内存的时间:1000ms/30万次/s=3ns
CPU速度=10倍*内存速度=100倍*I/O速度
顺序读取普通SATA机械硬盘1MB的数据:20ms
请记住:2的10次幂=1KB,2的20次幂=1MB,2的30次幂=1GB,2的32次幂=4GB
主要的性能指标就这些。
当你设计系统时要注意。
开发功能时也要注意。
进行框架设计时更要注意。
如何在满足需求于 硬件成本上要做好均衡。
以上只是告诉大家一个大概的性能评估的方向
不要照搬,不要照搬,不要照搬
不同配置性能不同。
中间件不同配置性能不同。
一切已实际为准。
以及上面未提到的RabbitMq的速度,ES的速度,MonogoDB 的 速度,都需要结合具体硬件与应用配置来进行确认。
祝大家的系统越来越快。