【山大智云】SeafileServer体系结构总结

2021SC@SDUSC

Seafile体系结构总结

本篇为系统综述。详细的代码分析和注释在我的一个Git仓库中:seafile-server-learn

子模块

组件

  • 底层组件

    1. RPC协议

      通过libsearpc库实现的RPC协议。

    2. 数据库管理

      对各种数据库API的封装。

    3. 配置管理

      对配置文件的管理。

    4. 消息队列

      借助libevent实现的消息队列。

    5. 定时任务

      借助libevent实现的定时任务。

    6. 加密

      借助openssl实现的加密。

    7. 对象键值存储

      借助文件系统或NoSQL数据库实现的对象键值存储。

  • 子系统组件

    1. 块子系统

      利用的是操作系统下的文件系统,借助CDC分块算法,结合底层加密组件,实现了块存储、块访问、分块等基本功能。是用于管理块的子系统。

    2. 文件子系统

      利用的是操作系统下的文件系统,通过seafile对象和键值存储定义并实现了一个用户空间的文件系统结构。是用于管理和组织Seafile文件的子系统。

    3. 版本子系统

      包含两个部分:提交、分支。提交是文件系统的指针,分支是提交的指针。前者基于文件子系统,后者基于数据库。

      除了包含各自对应的功能外,还需要描述提交与提交间的交互作用,包括差异、合并。

    4. 仓库子系统

      负责对仓库信息的维护,包括虚拟仓库。依赖前几个子系统。

    5. 用户与用户组子系统

      对用户信息、用户组进行维护。只涉及到RPC和数据库管理。

  • 功能组件

    1. 共享管理

      基于用户与用户组子系统、仓库子系统的高层服务。用于管理仓库的共享。

    2. Web令牌

      基于用户与用户组子系统、文件子系统。用于减少认证的开销,加速访问。

    3. 密码管理

      重用了仓库加密部分。

    4. 配额管理

      基于仓库子系统和文件子系统,管理仓库的配额,限制仓库的最大容量。

    5. 仓库大小计算

      基于仓库子系统和文件子系统,计算仓库的空间占用情况。

    6. 复制

      基于文件子系统,复制文件或目录,支持中途取消。

    7. Http文件访问

      Http服务下的特有功能,基于Http协议访问文件。

    8. Http文件上传

      Http服务下的特有功能,基于Http协议上传文件。

    9. Http服务器配置管理

      Http服务下的特有功能,基于Http协议读取服务器配置。

服务

接口

内部接口

本项目为c语言编写,内部接口均以头文件组织。一个典型的例子如下:

typedef struct _CcnetGroupManagerPriv CcnetGroupManagerPriv; // private

struct _CcnetGroupManager // context
{
    SeafileSession *session;
    CcnetGroupManagerPriv	*priv;
};

CcnetGroupManager* ccnet_group_manager_new (SeafileSession *session); // construct

int ccnet_group_manager_create_org_group (CcnetGroupManager *mgr,
                                          int org_id,
                                          const char *group_name,
                                          const char *user_name,
                                          int parent_group_id,
                                          GError **error); // function

基本构成为:

  1. 借助typedef定义私有内容的内部正式名称
  2. 定义Manager结构体,作为接口上下文
  3. 定义Manager结构体的新建函数(类似构造函数)
  4. 定义具体的接口方法

通讯接口

  1. Http

    详情请见Http服务-服务注册

  2. RPC

    详情请见RPC服务-服务注册

  3. 外部通讯接口

    为了简化其他需要和seafile-server通讯的程序定义和RPC服务所支持的接口相符的通讯过程,seafile-server中利用python绑定的方式定义了一个seafserv包来满足外部的通讯需求。

    只需要(在python项目中)引用seafserv包,就能以绑定的方式直接访问seafile-server中对外界提供的接口。这个通讯方式正是seahub所使用的。

测试与管理程序

  1. seafile-server

    整个服务器的主程序,可以作为守护进程运行。提供的是RPC服务和Http服务。(seahub中使用的是前者,表示服务器内部通讯;其他seafile客户端主要使用的是后者)

  2. seafserv-gc

    服务器自我维护的GC进程。选用。

  3. seaf-fsck

    用户空间文件系统的管理修复进程。选用。

  4. 其他测试进程

    有的用于CI(持续集成)、有的用于编译。略。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值