fastdfs 和 ceph 对比
需求是图片,视频等文件的存储
属于少写多读的场合,修改操作较少。文件粒度是大小文件都有。
fastdfs
先谈谈 fastdfs,我在公司已经应用了两年了,对他的基本特性比较熟悉,在这种场合下有这些优缺点
优点:
1 机器配置要求低。毕竟号称 “穷人的解决方案不是白来的”。不管是上传下载,同步恢复,都对机器的负载要求非常低。
2 上传速度快。因为是弱一致性模型,上传不需要强写副本才能返回。(强一致性模型对网络和机器要求都不会低)
3 已知的大规模成功案例较多,公司内部运维时间长
缺点:
1 小文件的故障恢复时间长,100GB/hour。
2 存在上传成功但丢失文件的可能性。弱一致性模型是双刃剑,如果在刚上传文件后,副本文件尚未产生,此时文件是单点状态。
该状态有两种情况:
一种是文件在磁盘中,等待被同步到其他机器,该情况下宕机,文件还存在(磁盘损毁就不存在了);
一种是文件还在系统内存中尚未被写入磁盘,此时宕机会导致数据彻底无法恢复
3 没有元数据管理。这一部分我写的 fastdfs 网关已经解决了。
4 大文件直接存储不进行分片,从而分布在整个集群中,当大文件存在热点数据时,压力会出现再整个集群的某组机器上。
这个问题在 fastdfs 网关上加上切片上传的 API 可以缓解
ceph
ceph 在某种角度上和 fastdfs 相当接近,都是想通过文件名,直接算出文件的所属位置。
优点:
1 强一致性模型保证数据可靠性
ceph 的上传成功,是在数据被写入所有副本后返回的,这保证了数据不会在刚上传主节点后就丢失。
2 有元数据管理,甚至有现成的 ceph 网关来提供对象存储
3 大文件进行文件分片,默认 4MB,对用户透明
缺点:
1 已知的大规模成功案例较少。
2 机器配置要求较高,参见官方文档硬件配置
摘抄其中原话 “OSD 的日常运行不需要那么多内存(如每进程 500MB )差不多了;然而在恢复期间它们占用内存比较大(如每进程每 TB 数据需要约 1GB 内存)。通常内存越多越好。”
携程的配置(携程在 2015/10/18 SH Ceph Day 上的分享):硬件:CPU (2 channels & 32 Core)、Mem128GB、disk(123TB/SATA disk +2256GB raid1 SSD)、NIC(4*Gigabit LAN, bond 2 in 1 pair)
3 无法充分发挥硬件性能
1)数据双倍写入。Ceph 本地存储接口(FileStore)为了支持事务,引入了日志(Journal)机制。所有的写入操作都需要先写入日志(XFS 模式下),然后再写入本地文件系统。
如果一份数据是三副本,那么客户端每上传 1MB 的数据,会产生 4MB 的磁盘流(网上有测试结果,3 副本 + 日志一共 4 份数据),才算写入成功,如果对时延敏感,那么对网络和磁盘要求都高
2)IO 路径过长。这个问题在 Ceph 的客户端和服务器端都存在。以 osd 为例,一个 IO 需要经过 message、OSD、FileJournal、FileStore 多个模块才能完成,每个模块之间都涉及到队列和线程切换,部分模块在对 IO 进行处理时还要进行内存拷贝,导致整体性能不高。
4 扩容需要迁移文件,小文件迁移时间长
由于 crush 算法是变种哈希,因此当集群扩容后,需要迁移文件,迁移文件时间很长。
原文表述 “文件平均大小 100KB。”“一个 OSD 加入之后,迁移的 IO 压力几乎全部在这一个磁盘上,由于文件小,平均吞吐在 2MByte/s,一个 OSD 需要迁移约 1.5TB 数据,耗时约一个星期,只想说 F U C K。”
5 小文件的故障恢复时间长
这部分我没有做测试,但是 ceph 对小文件是没有合并存储的优化的,这部分和 fastdfs 在一个水平线,甚至由于他的复杂性,可能实际效率比 fastdfs 还要低。
故障恢复的速度和迁移文件的速度一致。
总结
总的来说,个人认为,直接用 ceph 上 PB 级别的数据,有点步子太大的感觉。很多地方感觉都 hold 不住。另外由于 ceph 代码的复杂性,出 BUG 以后是无法立刻解决的。
而 fastdfs 的两个主要问题:
1 恢复时间长,这部分 ceph 也存在。只要恢复时期不是单点,个人认为影响没有那么大。
2 可能丢失刚上传的数据。
可以在上传到 fastdfs 前,先缓存在一个 cache 池中,用于可能的故障恢复。
也可以把 fastdfs 做成强一致性的方案,在 fastdfs 这一层彻底根除这个问题
题外话
fastdfs 和 ceph 方案是相当接近的,有些地方可以参考 ceph。
例如把 tracker 做成 ceph montior 的结构,只有当缩扩容时,才通知客户端节点变化,而不是每次上传客户端都需要连 tracker
另外 fastdfs 可以做成强一致性的方式,这在整体架构上是没有影响的。
未找到相关的 Issues 进行评论
请联系 @tedcy 初始化创建