非常年轻的一个开源分布式文件系统,项目发起于2015年。具有高可用、可扩展性等特点。其设计来源于facebook的haystack(提供图片存储服务),目标是提供快速、能够存储billions级别的文件存储,并可对接大数据业务。另外,兼容性较好,适应异构的硬件平台、不同的操作系统。
架构基于对象存储实现。对象存储利用一个中心服务(central master)管理所有节点的volumes。每个volume默认为32GB,存储各自的文件和元数据。使用若干Storage Node(卷存储服务器)存储这些volumes。从而将访问和存储压力分散在各个节点上。
该文件系统特点大多体现在性能上,特别是对小文件访问上:
- 分布式架构
- 同时支持大文件和小文件(很多文件系统不具备)
- 针对小文件采取过优化(很多文件系统不具备,但并没有相应的介绍)
- 并发处理能力
- 随机访问且延迟较低
- 备份功能 , 即远程复制,异步将数据备份到公有云上,如亚马逊S3,微软azure,google cloud storage等。文件在Filer中变更将发送通知到消息队列(message queues,可以是kafka等),一个复制进程(weed replicate)将会读取消息队列,读取文件并将变更上传到公有云山。
- 支持非常丰富的接口,类型有RESTFul、POSIX、FUSE、S3,HDFS(能够作为hadoop和spark的后端存储)。
- 文件操作能够保持原子性
但是由于发起较晚目前功能尚不是很完善缺少纠删码、分层存储、自动均衡(不同于cephfs和lizardfs,服务删除和添加不会引起数据重平衡。)、快照、配额、ACL等能力。
采用go和java开发,使用Apache 2.0许可证。
架构
相对HDFS架构,其进行扩展,增加了一层逻辑上的volumes,volumes分布在各个卷服务(volume server)上。由master管理volumes数据,以及volumes和服务器的映射。采用多volume server节点,避免了集中式的数据管理中不利于大量小文件处理的弊端和性能无法扩展的劣势。volume的后端volume store的组织方式由超级块和needle(相当于对象)组成。master负责将写请求分配到随机的volume上。
master支持以集群方式组织,多master使用RAFT算法进行Leader选举。
对于文件系统的元数据则有Filer进行管理。使用常见的数据库进行存储元数据,如LevelDB(默认使用)、Cassandra、MySQL、Postgres、Redis等,后端的不同数据库可以对操作产生一定的影响。比如在lookup效率上redis的时间复杂度是O(1),而其他使用LSM或者B树的数据库则为O(lgn),又比如对于文件夹中的文件数量是否存在限制,redis存在限制、而MySql等不存在限制。
Filer的作用和ceph中的mds有些类似,都是管理元数据,但是ceph是有状态的,而Filer是无状态的,ceph将元数据存放在资源池上,而Filer将元数据存放在本地数据库(Filer Storage)中(redis等则可以扩展至不同节点)。Filer包含一个和master通讯的客户端,主要实时获取volumes的状态和位置更新。存储目录数据的元数据则对应的只有目录的一些属性,而文件的元数据除了文件的属性,还保存了文件的chunks信息。
Filer 是可线性扩展无状态的,各个Filer只出列各自的目录集合(collections),并不使用统一的命名空间,扩展能力依赖于存储后端的扩展能力。Filer的高可用则是依赖于后端Filer Store的共享能力进行实现。
数据以chunk形式(类比ceph的object)存放在各个volume server中。采用强一致性模型写入数据副本。
对于不同的客户端,Filer的作用有所区别。
对S3或者Filer (RESTFul接口)客户端元数据会负责将数据转发到对象存储中。
对于一个文件的读而言,其流程:客户端先向Filer请求元数据,Filer将元数据获取返回,然后客户端再向相应的卷服务获得数据。
对于一个文件的写而言,其流程:客户端将文件发送给Filer,由Filer负责将文件分割成chunks之后写入各个volume server。Filer将元数据信息和chunks信息存放在本地存储中。
对FUSE、hadoop等客户挂载型端,Filer只负责元数据的操作。
对于一个文件的读而言(和S3相似),其流程:客户端先向Filer请求元数据,Filer将元数据获取返回,然后客户端再向相应的卷服务获得数据。
对于一个文件的写而言,其流程:客户端先向master确认数据写入哪一个volume,然后客户端直接将数据写入到volume中,向Filer写入元数据(包含chunk信息)。
应用场景
和ceph没有经过优化的小文件性能对比seaweedfs专门进行了优化,比ceph更容易搭建,没有ceph那么重量级。
PS:搜了一下竟然是某东抄袭的文件系统。
参考
https://www.slideshare.net/chrislusf/seaweedfs-introduction
https://github.com/chrislusf/seaweedfs/wiki/Directories-and-Files