| @@ -1,2 +1,28 @@ | |||||
| # storage | |||||
| # 跨中心存储系统 | |||||
| ## 目录结构 | |||||
| 此仓库是一个go module,但包含了多个服务的源码,你可以在每个服务的目录中找到main.go。可以通过编译脚本的参数来指定生成哪一个服务。 | |||||
| - `agent`:Agent服务的源码。 | |||||
| - `client`:Client服务的源码。 | |||||
| - `common`:存放在几个服务之间共享的代码以及一些数据结构定义。 | |||||
| - `coordinator`:Coordinator服务的源码。 | |||||
| - `scanner`:Scanner服务的源码。 | |||||
| 同时还有以下两个与编译相关的目录: | |||||
| - `build`:服务编译后的输出目录,只会在编译后生成。 | |||||
| - `magefiles`:mage工具使用的编译脚本。 | |||||
| ## 编译 | |||||
| 运行编译脚本需要使用mage工具,此处是[仓库链接](https://github.com/magefile/mage)。 | |||||
| 安装好mage工具之后,进入到仓库根目录,使用`mage agent`即可编译Agent服务。与此相同的还有`mage client`、`mage coodinator`、`mage scanner`。可以同时指定多个参数来编译多个服务,如果要一次性编译所有服务,可以使用`mage bin`。 | |||||
| 使用`mage confs`命令可以将`common/assets/confs`的配置文件拷贝到输出目录,使用`mage scripts`将`scripts`目录里的脚本拷贝到输出目录。 | |||||
| 使用`mage all`可以一次性完成编译、拷贝工作。 | |||||
| 可以通过增加额外的参数来指定编译目标平台,比如`mage win amd64 agent`。支持的操作系统参数有`win`、`linux`,支持的CPU架构参数有`amd64`、`arm64`。这些参数同样可以和`bin`、`all`参数一起使用。 | |||||
| 注意:编译目标平台参数必须在编译二进制参数之前。 | |||||
| @@ -1,2 +1,10 @@ | |||||
| # storage-agent | |||||
| # Agent服务 | |||||
| ## 目录结构 | |||||
| - `internal`:服务源码。 | |||||
| - `config`:服务使用的配置文件结构定义。 | |||||
| - `grpc`:通过grpc对外提供的接口。实现了.proto文件里定义的接口,这个文件位于`common\pkgs\grpc\agent\agent.proto`。 | |||||
| - `mq`:通过rabbitmq对外提供的接口。实现了`common\pkgs\mq\agent`目录里文件定义的接口。 | |||||
| - `task`:需要在后台异步运行的任务。 | |||||
| @@ -1,2 +1,18 @@ | |||||
| # storage-client | |||||
| # Client服务 | |||||
| ## 目录结构 | |||||
| - `internal`:服务源码。 | |||||
| - `cmdline`:此服务提供的命令行功能。 | |||||
| - `config`:服务使用的配置文件结构定义。 | |||||
| - `http`:此服务提供的http接口。 | |||||
| - `services`:服务的功能,被cmdline和http调用。 | |||||
| - `task`:需要在后台异步运行的任务。 | |||||
| ## 命令行 | |||||
| Client程序可以作为一个命令行程序使用,能在`internal/cmdline`中找到它提供的所有命令。 | |||||
| 使用时按照`./client <命令前缀1> <命令前缀2>... <命令函数参数1> <命令函数参数2>...`的方式编写命令。命令前缀在每个文件的init函数中能找到。 | |||||
| 以列出某个Bucket下所有Package的命令PackageListBucketPackages为例,它的命令前缀是`pkg ls`,它的函数签名是`PackageListBucketPackages(ctx CommandContext, bucketID cdssdk.BucketID)`,忽略掉会自动填写的ctx参数,需要通过命令行提供的就是bucketID参数,假设为5,因此调用它的命令是:`./client pkg ls 5`。 | |||||
| 可以通过使用`serve http`命令将Client程序作为一个http服务启动,并保持运行。 | |||||
| @@ -1,2 +1,21 @@ | |||||
| # storage-common | |||||
| # 公共库 | |||||
| 这个目录存放的是在storage仓库的几个程序之间共享的代码和数据结构定义。 | |||||
| ## 目录结构 | |||||
| - `assets`:存放程序会读取使用的配置文件等。会在编译时一并复制到输出目录。 | |||||
| - `confs`:服务的配置文件。 | |||||
| - `scripts`:脚本文件。 | |||||
| - `consts`:常量定义。 | |||||
| - `globals`:全局变量定义,主要是各种客户端的Pool。 | |||||
| - `magefiles`:mage工具的脚本。 | |||||
| - `models`:公共数据结构定义。 | |||||
| - `pkgs`:一些相对独立的功能模块。 | |||||
| - `cmd`:公用的业务逻辑,比如上传Package和下载Package。 | |||||
| - `db`:数据库的数据结构和操作函数。 | |||||
| - `distlock`:分布式锁服务,核心机制使用的是`common/pkgs/distlock`,增加了根据存储系统的业务需求设计的锁。 | |||||
| - `ec`:纠删码的库。 | |||||
| - `grpc`:存放proto文件,以及使用protogen工具生成的代码文件。 | |||||
| - `ioswitch`:IOSwitch模块。 | |||||
| - `iterator`:迭代器。 | |||||
| - `mq`:各个服务的rabbitmq接口的声明。 | |||||
| - `utils`:一些暂时没有归类的工具函数。 | |||||
| @@ -1,2 +1,6 @@ | |||||
| # storage-coordinator | |||||
| # Coordinator服务 | |||||
| ## 目录结构 | |||||
| - `internal`:服务源码。 | |||||
| - `config`:服务使用的配置文件结构定义。 | |||||
| - `mq`:通过rabbitmq对外提供的接口。实现了`common\pkgs\mq\coodinator`目录里文件定义的接口。 | |||||
| @@ -1,2 +1,8 @@ | |||||
| # storage-scanner | |||||
| # Scanner服务 | |||||
| ## 目录结构 | |||||
| - `internal`:服务源码。 | |||||
| - `config`:服务使用的配置文件结构定义。 | |||||
| - `event`:被投递到队列顺序执行的事件。 | |||||
| - `mq`:通过rabbitmq对外提供的接口。实现了`common\pkgs\mq\scanner`目录里文件定义的接口。 | |||||
| - `tickevent`:定时执行的事件。 | |||||