1.如何开发微盘 微盘搭建微盘开发 控
2.Seafile 存储模型探索
如何开发微盘 微盘搭建微盘开发 控
最近一段时间,码下国内网盘掀起大规模整改风,码下华为网盘、码下网盘、码下新浪微盘、码下金山快盘等多家个人免费云存储业务都面临关停。码下java 框架 经典 源码这意味着网盘的码下免费午餐即将吃到头了。使用上述网盘服务的码下用户除了在限期内多准备硬盘,把自己的码下文件下载到本地硬盘上这个方法外,还可以选择搭建属于自己的码下私有云存储。
小编甄选了目前市面上存在的码下各种私有云服务,选择了Seafile 免费开源云存储服务进行介绍。码下据悉,码下该服务由国内团队开发,码下小鹿直播app源码下载目前在全球已有万用户,码下包括北京大学、比利时的皇家自然科学博物馆、德国的 Wuppertal 气候、能源研究所等多家知名机构。任何个人和企业用户都可以自己搭建云服务器,享受云时代便利。该服务的客户端和服务端软件均可免费下载,开源版的好处在于所有代码公开化,恶意代码和漏洞很难在众目睽睽之下生存。
该服务具备以下特点:
• 可靠的文件同步:文件组织成资料库。每个资料库可选择性的同步到任意设备。可靠高效的65小说网站源码文件同步将提高您的工作效率。
• 内置文件加密:一个资料库可以用您选择的密码来加密。文件加密后再上传到服务器。即使是系统管理员也无法查看加密的资料库。
• 团队协作:可以共享文件到群组。权限管理、版本控制、事件通知让协作更为流畅。
• 高性能:Seafile 服务器内核由 C 语言编写。运行起来小巧快速。
• 升级简单:只需下载最新的软件包,简单一个脚本即完成版本升级。
• 适用于企业环境:可与 AD/LDAP 集成。可同步 AD 群组和用户信息。麦词网网站源码
Seafile客户端有Win7/Win8.1/Win、Mac、Linux等桌面版,也有Android和iOS版,也可以通过网页版连接;服务端支持Windows、Linux和树莓派系统。这表明该服务几乎支持所有系统。
在局域网条件下,其中的设备可以访问自己搭建的云存储服务器。如果你想要随时随地使用自己的云存储,则可以将Seafile部署到VPS、独立服务器,以及阿里云、抓取别人的网站源码Linode等云服务上。
另外,Seafile支持多服务器切换。比如你可以区分开私用和公用服务器,自己的文件可上传到私用服务器中,公司文件可以使用公用服务器同步,一切由用户决定。这样可不必担心其他用户有机会看到你的个人文件。
Seafile 存储模型探索
Seafile是一个国内开源的网盘产品,具备社区版与专业版。在网盘类产品的研发过程中,对其部分源码进行了研究。Seafile采用类似于Git的模型进行文件存储,涉及几个关键概念。
Repo作为资料库,相当于一个存储盘,每个Repo创建时,会在Repo表中插入一条记录。Branch类似于Git中的分支,每个Repo默认包含一条master分支。
Commit相当于Git中的提交记录,每次文件上传或修改都会产生新的commit,并通过上图展示,master分支指向最新commit。通过branch的head commit和每条commit记录的parent_id,可以将所有提交记录按顺序串联。
Seafile没有采用MySQL存储commit和file元数据,而是直接将这些元数据以JSON文本形式存储至文件系统中。打开Seafile存储目录,可见三个主要文件夹:blocks、commits、fs。
blocks文件夹用于存储文件真实数据,采用CDC算法进行分块存储。commits文件夹存储repo的commit记录,每条commit对应一个文件,内容为commit数据结构的json字符串。fs文件夹存储repo中目录层级信息及文件信息,所有目录信息在fs目录下打平,文件层级关系通过fs文件内容表达。
在对commit记录分析中,每次repo变动生成新commit并写入commits文件夹。通过commit id定位文件,打开可见json文本内容,记录commit相关信息,如parent_id、root_id等。parent_id指向上一次commit id,通过branch head commit和各commit记录parent_id,可串联所有提交记录。
fs记录每次commit的快照信息,根据最新commit id定位fs目录,找到对应root_id的json文本。文本记录根目录下的文件信息,表示根目录及子目录文件结构。通过root_id定位目录元数据文件,查看内容,了解子目录及文件信息。
blocks记录文件数据块,以某个文件为例,通过commit id定位到block文件,查看内容为文件所有数据块id,对应blocks目录下的文件。
整体存储结构展示了文件树的构建过程。新建文件夹或上传文件后,commit记录更新,fs快照生成,blocks数据块存储。这种设计支持快速回滚到某版本,同时具备多端同步特性,但每次修改单个文件时,需生成所有祖先节点版本,造成写放大,深目录层级情况下需考虑性能损耗。