SeaweedFS学习笔记:调优

1. 使用 LevelDB 作为索引的存储

在启动Volume server时可以选择索引的存储类型,默认是内存。内存使得文件的访问非常快,但是在Volume server启动时需要花费很长的时间把索引从文件加载到内存。

可以通过weed volume -index=leveldb命令把索引的存储类型修改为leveldb,这使得Volume server可以快速的启动起来,当然访问文件的速度会比使用内存时稍慢,但是与网络传输的速度相比,使用leveldb造成的额外开销不足一提。

leveldb作为索引的存储有三种选项:

  • leveldb: 小内存占用(4MB total, 1 write buffer, 2 block buffers)
  • leveldbMedium: 中等内存占用(8MB total, 2 write buffers, 4 block buffers)
  • leveldbLarge: 大内存占用(12MB total, 4 write buffers, 8 block buffers)

2. 预先分配volume file的磁盘空间

预先分配磁盘空间,可以使得volume file的数据分布在邻近的block,当volume file很大时可以起到改善性能的作用。 可以支持预分配的Linux文件系统, e.g., XFS, ext4, Btrfs。

要开启磁盘空间预分配的功能,需要在Master 启动时指定以下参数

-volumePreallocate
    	Preallocate disk space for volumes.
-volumeSizeLimitMB uint
    	Master stops directing writes to oversized volumes. (default 30000)

3. 提高写并发

增加Volume的数量可以提高写并发,如:

curl http://localhost:9333/vol/grow?count=12&replication=001

4. 提供读并发

增加Volume的数量可以提高读并发,另外增加副本的数量以提高读并发。

5. 增加更多的硬盘驱动器

增加硬盘驱动器可以获得更高读写吞吐能力。

6. 提高用户打开文件的限制数

默认的用户打开文件的限制数是1024。来自网络的文件请求很容易就超过了这个限制。在生产环境使用时,建议用root账户把该限制数修改为更高的数值,例如:ulimit -n 10240。

7. 内存消耗

对于每个Volume server,以下两个方面会有内存有影响。

7.1 内存中的索引

默认情况下,Volume server使用内存来存储索引以实现复杂度为O(1) 的磁盘读取。每个文件大概会占用20 bytes的空间。如果1个30GB的Volume存储百万个平均30KB大小的文件,则需要消耗20MB的内存空间来存储索引。可以使用leveldb来存储索引以减少内存的消耗以及加快启动的速度。

7.2 并发读

1000并发读100KB大小的文件需要100MB的内存。

8. 当网络不稳定时

因网络原因造成读取缓慢时会阻塞其他的请求,例如写请求。

volume.hasSlowRead 设置为true可以避免慢读取引起的阻塞问题,但是会增加大文件读取时的P99延迟问题。

提高volume.readBufferSizeMB可以减少读请求的锁次数,修复volume.hasSlowRead 引起的P99延迟问题。

9. 参考文档下载

《小文件存储SeaweedFS技术指南》

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

修破立生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值