对fastdfs存储性能的测试

可以提前看看fastdfs/test 目录下的测试代码,需要使用make进行编译。

nginx 端口 80
redis 端口 6379
mysql 3306

ss -tulnp | grep 8080 //检查端口
pkill test_upload //批量停止

ping 命令本身只能检测主机是否可达,不能指定端口。如果你要检测某个IP 地址的某个端口是否开放,需要使用以下工具:

telnet 192.168.1.1 80

iostat -d -k 2 查看磁盘写入

fastdfs自带测试功能:
test_upload 下载 删除 成功率 99.8%
image

假定我们系统4核8G 客户端不多,但单次文件大(图片,元数据百K-数M之间); 下面是一种测试
image
算一个内网带宽: 100M * 8 b / 0.904 ==884Mbps;,5K * 5000*8/1.05=191 Mbps 表示文件系统内部传入磁盘带宽;;
云给的100M bps外网带宽 它极大的收受到外网带宽的限制;

因此,总结影响fastdfs的存储的性能主要部署因素
1、外网带宽
2、磁盘读写
由于fastdfs的每两个storage做一个组,还有备份写入;如果每个storage都支持1000Mbps写入;实际的磁盘写入能力一定大于2000Mbps; 对应大约250MB 显然机械硬盘不足以支撑的; 得上固态硬盘;
3、文件大小 : 大文件网络上更易丢失; 且必须流式发送受在网络缓存区影响; FastDFS 的 storage 之间是异步文件同步。

客观条件
image

提升性能:
1、提升上传文件 :

  • 增加fastdsf组(水平扩展,扩容); 不能真正提高上传能力,只是应对上传峰值; storage 的 max_connections 被打满;
  • 增加外部带宽;
  • 使用读写性能更高的磁盘
    2、下载文件
  • 增加storage (少写多读的场景)
  • 增加group
  • 增加带宽
  • 使用读性能高的磁盘

3、mysql优化
课程里涉及到较多的条件语句,而且都是匹配字符串所以需要考虑索引的建立,具体见课堂分析。
最左匹配原则:mysql的查询器,会从最左开始向右匹配,直到遇到范围查询就停止匹配(>、<、
between、like),右边的索引不生效。(因为底层是B+树,从左到右建立搜索树的):

  1. 在查询时,如果不满足最左列的查询条件,索引将无法被充分利用。例如,对于一个(a, b, c)的联合索
    引,如果查询条件没有涉及到列a,则索引的优势无法被充分发挥。
  2. 查询条件可以部分使用联合索引。例如,在(a, b, c)的联合索引中:
  3. 如果查询条件仅涉及到列a,则只有列a部分的索引会被利用。
  4. 如果查询条件涉及到列a和b,那么列a和b部分的索引都会被利用。如果查询a/b/c,a、b、c索引
    都能用。
  5. 但是,如果查询条件只涉及到列b,那么索引将不会被利用。只涉及到b/c也不能用这个索引。
  6. 使用最左前缀原则时,可以使用EXPLAIN命令来分析查询计划,以确保索引被正确使用。
    优化步骤:
  7. 先找出所有对该表的sql语句;
  8. 分析对该表的sql语句哪一条操作是最频繁的;
  9. 合理创建索引。 索引创建多了,插入时候性能是有下降。

4、 fastdfs优化策略
最大并发连接数设置
storage.conf
tracker.conf
参数名:max_connections (同时有个连接,流媒体服务器)
缺省值:1024
说明:FastDFS采用预先分配好buffer队列(对象池)的做法,分配的内存大小为: max_connections *
buff_size,因此配置的连接数越大,消耗的内存越多。不建议配置得过大,以避免无谓的内存开销。
工作线程数设置
参数名: work_threads (网络IO的工作线程数量)
缺省值:4
说明:为了避免CPU上下文切换的开销,以及不必要的资源消耗,不建议将本参数设置得过大。为了发挥出
多个CPU的效能,系统中的线程数总和,应等于CPU总数。
对于tracker server,公式为: work_threads + 1 = CPU数
对于storage server,公式为: work_threads + 1 + (disk_reader_threads + disk_writer_threads) *
store_path_count = CPU数
CPU数是4 = work_threads(1) + 1 + disk_reader_threads(1) + disk_writer_threads(4) = 4cpu
同步文件线程
storage-> tracker的线程
storage目录数设置
参数名:subdir_count_per_path
缺省值:256
说明:FastDFS采用二级目录的做法,目录会在 FastDFS初始化时自动创建。存储海量小文件, 打开了trunk
存储方式的情况下,建议将本参数适当改小,比如设置为32,此时存放文件的目录数为 32 * 32 = 1024。假
如trunk文件大小采用缺省值64MB,磁盘空间为2TB,那么每个目录下存放的trunk文件数均值为:2TB /
(1024 * 64MB) = 32个。
4TB / (1024 * 64MB) = 64个。
8T** / (1024 * 64MB) = 128* 个 -》8T** / (6464* 64MB) = 32个**

storage磁盘读写线程设置
disk_rw_separated:磁盘读写是否分离
disk_reader_threads:单个磁盘读线程数
disk_writer_threads:单个磁盘写线程数
如果磁盘读写混合,单个磁盘读写线程数为读线程数和写线程数之和
对于单盘挂载方式,磁盘读写线程分别设置为1即可
如果磁盘做了RAID,那么需要酌情加大读写线程数,这样才能最大程度地发挥磁盘性能
storage同步延迟相关设置
sync_binlog_buff_interval:将binlog buffer写入磁盘的时间间隔,取值大于0,缺省值为60s
sync_wait_msec:如果没有需要同步的文件,对binlog进行轮询的时间间隔,取值大于0,缺省值为
100ms
sync_interval:同步完一个文件后,休眠的毫秒数,缺省值为0
为了缩短文件同步时间,可以将上述3个参数适当调小即可。

posted @ 2026-09-11 18:55  超级麋鹿  阅读(5)  评论(0)    收藏  举报