Fileflake:为Laravel定制的分布式文件存储服务
2016-11-22 15:03
495 查看
Fileflake
为Laravel定制的分布式文件存储服务,使用mongodb作为后端存储引擎。Github仓库
fileflake特性
支持的操作:上传,下载,删除分布式的文件存储节点
存储节点负载均衡
易于横向扩展(添加存储节点)
文件流存储于mongodb
文件流分块存储,块大小可配置
拥有同样签名的文件只存储一个拷贝
上手
安装
推荐使用composer安装. 参考 php composer.composer require "limen/fileflake"
系统结构图
使用
use Limen\Fileflake\Config; $config = [ Config::KEY_FILE_META_CONNECTION => 'mongodb', // required, file meta connection Config::KEY_FILE_META_COLLECTION => 'FileMeta', // required, file meta collection Config::KEY_NODE_META_CONNECTION => 'mongodb', // required, node meta connection Config::KEY_NODE_META_COLLECTION => 'NodeMeta', // required, node meta collection Config::KEY_FILE_CHUNK_SIZE => 51200, // required, chunk size in byte // if set to true, the load balance would consider file count and file volume of each storage node, // or the load balance would pick one node randomly Config::KEY_LOAD_BALANCE_STRICT => true, // optional, default value is false // required Config::KEY_FILE_CONTENT_ 4000 STORAGE_NODES => [ [ 'id' => 1, // storage node id, should be unique and unmodifiable 'connection' => 'mongodb', // storage node connection 'collection' => 'FileStorage1', // storage node collection ], [ 'id' => 2, 'connection' => 'mongodb', 'collection' => 'FileStorage2', ], ], Config::KEY_LOCALIZE_DIR => '/tmp/fileflake/localize', // required, the temp local files stored in this directory // optional, see default values below Config::KEY_CONTRACT_CONCRETE_MAP => [ \Limen\Fileflake\Contracts\UidGeneratorContract::class => \Limen\Fileflake\Support\UidGenerator::class, \Limen\Fileflake\Contracts\BalancerContract::class => \Limen\Fileflake\LoadBalancer::class, \Limen\Fileflake\Contracts\LockContract::class => \Limen\Fileflake\Lock\RedLock::class, \Limen\Fileflake\Contracts\FileContainerContract::class => \Limen\Fileflake\FileContainer::class, \Limen\Fileflake\Contracts\FileMetaContract::class => \Limen\Fileflake\Storage\FileMetaStorage::class, ], ]; $filePath = '/path/to/file'; $file = new \Limen\Fileflake\Protocols\InputFile($filePath, 'fileflake.png', filesize($filePath), 'png', 'image/png'); $fileflake = new \Limen\Fileflake\Fileflake($config); /** @var string $fileId md5 */ $fileId = $fileflake->put($file); /** @var \Limen\Fileflake\Protocols\OutputFile $fileMeta no local copy */ $fileMeta = $fileflake->getMeta($fileId); /** @var \Limen\Fileflake\Protocols\OutputFile $fileMeta have a local copy */ $localFile = $fileflake->get($fileId); /** @var string $localPath path of local copy */ $localPath = $localFile->path; // remove file $fileflake->remove($fileId); $fileflake->get($fileId); // return null
存储架构
文件元数据
每个文件都有一个元数据。元数据的“引用”类似于Linux文件系统的软链接。
“引用计数”表示目前有多个文件指向当前文件(源文件)。
拥有相同签名的多个文件只存储一个拷贝,它们通过“引用”值与源文件产生关联。
当删除一个软链接文件时,删除文件元数据,软链接文件指向的源文件的引用计数减1。
当删除一个源文件时,源文件的引用计数减1。
当一个文件的引用计数为0时,删除该文件的元数据,并将该文件从后端存储中删除。
文件id
文件名
文件签名
引用计数
引用(源文件id)
存储节点id
分块id
扩展名
mime
存储节点
分块id分块内容
节点元数据
存放存储节点元数据,用于负载均衡文件数量
文件占用空间
相关文章推荐
- 一共81个,开源大数据处理工具汇总:查询引擎、流式计算、迭代计算、离线计算、键值存储、表格存储、文件存储、资源管理、日志收集系统、消息系统、分布式服务、集群管理、基础设施、搜索引擎、数据挖掘=监控
- 一共81个,开源大数据处理工具汇总:查询引擎、流式计算、迭代计算、离线计算、键值存储、表格存储、文件存储、资源管理、日志收集系统、消息系统、分布式服务、集群管理、基础设施、搜索引擎、数据挖掘=监控
- [图表]国内外主流文件存储服务对比分析
- DropBox:可紧密整合于本地系统的文件存储及共享服务
- Object-C 如何生成一个固定大小的File,文件存储到指定的路径下
- Android中使用File文件进行数据存储
- 介绍一款基于分布式文件存储的数据库--MongoDB
- 使用curl做上传文件处理(结合file服务)
- 一个轻量级的分布式文件存储FastDFS
- 使用windows服务和.NET FileSystemWatcher对象来监控磁盘文件目录的改变
- 前不久,微软发布了其网络硬盘的正式版本:Windows Live Skydrive。它面向公共用户免费提供5G空间,最大单个文件支持到50M,还提供个人文件夹。微软的东西,当然会让人更放心一些,而且最重要的是它提供永久存储服务,还提供超链接!
- [Android开发]File文件存储
- mogileFS分布式文件存储解决方案
- 在存储过程中用ole对象(Scripting.FileSystemObject)读写文件
- 服务 在初始化安装时发生异常:System.IO.FileNotFoundException: 未能加载文件或******
- MongoDB 一个基于分布式文件存储的数据库
- Ziddu:支持中英文的多媒体文件存储服务
- 推荐Dropbox一个很不错的文件存储和共享服务
- WCF4.0新特性体验(7):IIS无SVC文件托管WCF服务(IIS hosting without an SVC file )
- 一个基于分布式文件存储的数据库MongoDB