山大智云
文章平均质量分 94
山大智云项目解析与开发日志
.d_p.
这个作者很懒,什么都没留下…
展开
-
【山大智云】山大智云体系结构总结
山大智云体系结构总结经过了一学期的学习以及全员总结,整个项目的架构和最初猜测的组织结构相似:并且组员们对其中的各个部件有了更详细的认识。子部件底层库libsearpcseafile系列部件中的内部通讯协议。仅服务端到服务端。(如seahub)libevhtpseafile系列部件中的外部通讯协议。服务端到客户端。(如seafdav)接口seaserv一个python库,用于调用RPC服务。采用C-Binding的方式绑定了seafile-server中定义的RPC服务原创 2021-12-28 22:50:59 · 668 阅读 · 0 评论 -
【山大智云】SeafileServer体系结构总结
2021SC@SDUSCSeafile体系结构总结本篇为系统综述。详细的代码分析和注释在我的一个Git仓库中:seafile-server-learn。子模块组件底层组件RPC协议通过libsearpc库实现的RPC协议。数据库管理对各种数据库API的封装。配置管理对配置文件的管理。消息队列借助libevent实现的消息队列。定时任务借助libevent实现的定时任务。加密借助openssl实现的加密。对象键值存储借助文件系统或NoSQ原创 2021-12-26 21:39:53 · 1337 阅读 · 0 评论 -
【山大智云】SeafileServer源码分析之Server核心服务
Seafile Server CoreSeafileSeverCore是seafile-server中的核心部分,提供了基于common各种子系统操作下的各种高级服务。这些服务在server下被定义与实现,最终被集成到了seaf-server和http-server中。前者是基于RPC协议进行服务,后者是基于Http协议进行服务。Seaf-Server (RPC)Seaf-Server是一个基于RPC的服务器服务,是一个后台运行的进程。这里RPC是基于另外一个库libsearpc,通过引用libsea原创 2021-12-17 23:21:13 · 874 阅读 · 0 评论 -
【山大智云】SeafileServer源码分析之GC、FSCK
2021SC@SDUSCGC服务GC 垃圾回收完成此项工作的相关源码:gc-core、verify、repo-mgr仓库的生效期、最大历史保留时间为了避免过多的历史版本以节省仓库的存储空间,允许用户设置仓库生效期和最大历史保留时间。仓库生效期描述仓库从何时起考试生效。在该时间后的仓库提交为有效提交版本;在该时间前的版本将被自动删除。这个量用关系RepoHistoryLimit维护。最大历史保留时间描述仓库内历史数据的最大保留时间。超过历史保留时间的版本将被自动删除。这个量用关系Re原创 2021-12-08 22:03:26 · 330 阅读 · 0 评论 -
【山大智云】SeafileServer源码分析之FUSE(用户空间文件系统)
2021SC@SDUSCseafile仓库管理仓库是一个文件系统的管理单位。之前介绍的分支、提交、文件、目录等对象,都是以仓库集中进行管理。此处介绍的只是FUSE中实现的最基本的seafile仓库管理,更完整的内容是在server核心中实现的。对象格式struct _SeafRepo { // 仓库对象 struct _SeafRepoManager *manager; // 仓库管理器 gchar id[37]; // 仓库id gc原创 2021-12-02 12:02:59 · 496 阅读 · 0 评论 -
【山大智云】SeafileServer源码分析之用户与用户组
2021SC@SDUSCseafile支持集群,实现了一个集群管理系统。这个系统的核心内容独立为另一个项目:ccnet-server,用以协调网络应用的运行。这篇文章主要介绍集群管理。集群中当然还有其他功能,例如对等体识别、连接管理、服务调用、消息传递等,而这些内容属于协议,在seafile : librpc 分析中可以找到。集群中分为三个层次结构:用户、群组、组织。集群管理就是对这三个层次的结构进行维护。三个层级依次递进,所管理的用户数量的数量级逐级递增。这三个层次的相关信息可以很方便地用关系模原创 2021-11-22 17:36:56 · 1128 阅读 · 0 评论 -
【山大智云】SeafileServer源码分析之版本管理系统:提交差异与合并
2021SC@SDUSC提交差异为了方便用户检视,以及为合并做准备,需要设计一种算法,来统计两个提交间的差异。在思考算法的具体流程前,需要先总结差异的类型。差异类型若有两个提交A, B,假设我们只考虑A相对于B的差异。文件差异差异说明符号添加A相对于B添加了该文件。A删除A相对于B删除了该文件。D修改A相对于B添加了该文件。M重命名A相对于B重命名了该文件,且内容尚未被修改。R目录差异差异说明符号添加A相对于原创 2021-11-18 01:11:52 · 317 阅读 · 0 评论 -
【山大智云】SeafileServer源码分析之版本管理系统:提交与分支
2021SC@SDUSCseafile中,此部分的相关内容与git大体相同。提交版本管理理论前提想要对仓库进行版本化管理,即持久化追踪仓库中的更新,则需要一个节点来存储每个版本下仓库内容的拷贝。这个节点就是提交。每次提交后,仓库将重新组织新的seafile文件系统,生成新的seafobj,产生新的块,也就是一个拷贝。但显然,每次都重新拷贝一份实在是太浪费空间了。这时候,分块、SHA1命名的作用就体现出来了。每次更新只会影响被修改的块,所有被修改的内容只会影响被修改的块;SHA1命名基于操作系统文件原创 2021-11-14 16:59:14 · 400 阅读 · 0 评论 -
【山大智云】SeafileServer源码分析之Seafile文件系统
2021SC@SDUSCSeafile文件系统相关代码涉及fs-mgr、seaf-crypt、vc-common。在还没介绍提交、分支管理前,可以认为每个仓库都是独立的文件系统。文件系统结构抽象结构每个仓库都带有一个seafdir作为根目录,根目录通过一系列直接或间接的链接形成 了文件树。整个文件系统中主要分为三个内容:seafile、seafdirent、seafdir。中间这个seafdirent指的是seafdir对seafdir或seafdir对seafile的链接。链接实原创 2021-11-04 17:49:14 · 607 阅读 · 0 评论 -
【山大智云】SeafileServer源码分析之Seafile对象存储
Seafile对象存储一些Seafile对象需要持久化至硬盘。它们的存储方式有两种,一种是非关系型存储,另一种是关系型存储。前者要求对象必须含有id。非关系型存储非关系型存储主要被Seafile文件管理系统所使用。因为Seafile文件管理系统是分布式的,而非关系型存储能为分布式存储提供良好的基础。相关代码的结构如下:与块系统类似,并且有多种实现方式。使用这种方式存储的的Seafile对象包括:commit、seafile、seafdir、seafdirent等。对象的逻辑位置只考虑Se原创 2021-10-28 22:21:53 · 1031 阅读 · 0 评论 -
【山大智云】SeafileServer源码分析之块系统
块文件被分块后(采取CDC分块),被存储为块。抽象结构与操作块的内容块可以抽象为两部分信息:校验和(checksum)和块内信息。校验和SHA1摘要的前160位比特。以16进制串的形式表示,得到20位HEX串。(共40位字符)块内信息块并不关心块内信息,只关心块内信息的存储。在校验块时需要重新对块内信息计算校验和,然后与块的校验和比对,检查块内信息是否被篡改。块的元数据BMetadata定义了块的元数据,包括:块id、块长。块的路径依照以下内容定位一个块:原创 2021-10-24 16:05:07 · 269 阅读 · 0 评论 -
【山大智云】SeafileServer源码分析之CDC(基于内容长度可变分块)
2021SC@SDUSC基于内容长度可变分块滚动哈希与拉宾指纹滚动哈希考虑解决字符串匹配问题。一种方法是利用字符串哈希值进行匹配。已知模式串长度为nnn,那么我们可以依次截取匹配串中长为nnn的子串计算哈希,然后与模式串的哈希进行比对,若相等则得到一次匹配。在极大概率下,哈希碰撞到的子串与模式串相同。然后用算法实现。在已经计算过si…i+n\small s_{i\dots i+n}si…i+n哈希的前提下,如果要计算si+1…i+n+1\small s_{i+1\dots i+n+1}si+1…原创 2021-10-17 17:27:18 · 802 阅读 · 0 评论 -
【山大智云】SeafileServer源码分析之lib
2021SC@SDUSCLIB 子文件夹源码总结此部分代码涵盖了一些实用的功能及数据结构,涉及到数据库、线程管理、网络等常用功能,目的是对这些常用内容进行封装以降低耦合度。以下是对c语言源码作出的简要分析,详细分析见【github】。(vala部分的用途暂时未知;py文件给出了需要生成的RPC方法的参数与返回值类型,不可读)include引用头文件、定义消息宏和Debug宏。bloom-filter实现了布隆过滤器,包括计数布隆过滤器。布隆过滤器通过比特向量和多次哈希的结果判断元素是否在集合原创 2021-10-09 06:27:57 · 365 阅读 · 0 评论 -
【山大智云】源码分析分工 —— SeafileServer
2021SC@SDUSC项目结构seafile-server:seafile的服务端核心。seahub:seafile的Web前台,使用Django框架开发。seafdav:seafile的WebDav服务。seafevents:用于处理周期事件(包括建索引、杀毒、自动删除等)。seafes:ElasticSearch与seafile结合,对文件内容建立全文索引。seafobj:用于访问seafile数据模型。分工我负责seafile-server的分析。以下是我对seafile-s原创 2021-09-30 22:14:39 · 518 阅读 · 0 评论 -
【山大智云】项目部署与安装教程
2021SC@SDUSC本篇内容记录如何在本地部署山大智云。原篇内容来源于:https://blog.csdn.net/rentenglong2012/article/details/117335295本篇内容最后更新于2021年9月29日,对原篇内容(2021年5月27日)做出了一小部分更正。操作系统Ubuntu 18.04 (.1~.6)前置操作在外环境下配置基础环境。此时建议使用root身份。安装docker该项目的所有内容都需要运行在docker容器内。若操作系统尚未安装d原创 2021-09-30 21:08:30 · 497 阅读 · 0 评论