背景

如前文所述,想要搭建一套云存储/处理体系,有很多小文件存储配置需要管理,因此,需要一套多云桶的元数据配置服务,以便做下一步业务逻辑。

功能梳理

功能点 说明 备注
url解析成uri 将文件url解析成cloud、bucket、key、操作指令,方便在多云环境下,获取对应的配置信息
多云下的bucket关联域名 bucket与host关联,提供url解析的元数据信息
域名打标签 任何一个域名,会关联多个标签,方便不同业务场景分发不同的域名
url重签 私有桶的url容易过期,需要一种方式重新对url重签
永久ak/sk bucket与ak/sk的关系,也是一对多,也需配置:标签的功能,标记在什么样的情况下,使用哪一组ak/sk
临时ak/sk 业务侧真正计算时,才会下发

备注:
1、正常情况下,一个host只能找到唯一的bucket与之对应。但是,在多云迁移过程中,有可能出现:1个domain关联2个bucket的情况。
2、ak/sk与标签的关系:一对一。
3、host与标签的关系:一对多。
4、bucket多维度拆分,例如:面向多云的bucket名字做到全局唯一,但是:面向业务方的桶名,不需要全局唯一。

功能设计

注意:并不一定需要单独的http服务,业务量级小的时候,也可是网关的一个模块。

yml设计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
aliyun:
mifish-video-ali:
hosts:
- host: mifish.video.cdn.outer.com
tags:
- jdcdn
- host: mifish.video.inner.com
tags:
- inner
- host: mifish.video.cdn.outer.com
tags:
- upload
auth:
- ak: ''
sk: ''
tags:
- ''
- ''
- ak: ''
sk: ''
tags:
- ''
- ''
inner_domain: ''
outer_domain: ''
hwcloud:
mifish-img-hw:
hosts:
- host: mifish.img.cdn.outer.com
tags:
- jdcdn
- host: mifish.img.inner.com
tags:
- inner
auth:
- ak: ''
sk: ''
tags:
- ''
- ''
- ak: ''
sk: ''
tags:
- ''
- ''
inner_domain: ''
outer_domain: ''

mysql库表设计

桶信息:cloud_process_bucket

字段名 类型 描述
id long 库表id,自增
creator varchar(32) 创建者
modifier varchar(32) 修改者
create_time datetime 创建时间
modify_time datetime 修改时间
cloud varchar(32) 哪个云
region varchar(32) 归属哪个区域
bucket varchar(32) 桶名称
inner_domain varchar(128) 默认内网域名
outer_domain varchar(128) 默认公网域名
type int(1) 1:公开桶 2:私有桶 3:内部桶
inner_endpoint varchar(32)
outer_endpoint varchar(32)
support_s3 varchar(32) 是否支持s3
s3_inner_endpoint varchar(32)
s3_outer_endpoint varchar(32)
owner varchar(128) 业务方
remark varchar(256) 备注信息

备注:
1、很多小文件存储系统都有配备默认的内网域名 + 公网域名

桶鉴权:cloud_process_bucket_auth

字段名 类型 描述
id long 库表id,自增
create_time datetime 创建时间
modify_time datetime 修改时间
bucket_id long 关联id
bucket varchar(32) bucket名字
ak varchar(32) ak
sk varchar(32) sk
tag varchar(256) 标签

桶域名:cloud_process_bucket_domain

字段名 类型 描述
id long 库表id,自增
create_time datetime 创建时间
modify_time datetime 修改时间
bucket_id long 关联id
bucket varchar(32) bucket名字
domain varchar(128) 域名
tag varchar(256) 标签

上传配置信息:cloud_process_upload

字段名 类型 描述
id long 库表id,自增
creator varchar(32) 创建者
modifier varchar(32) 修改者
create_time datetime 创建时间
modify_time datetime 修改时间
scene varchar(32) 业务场景
access_code varchar(32) 接入码
dir varchar(32) 目录
filekey_born_way int(1) 1:uuid自动生成 2:调用接口
filekey_suffix varchar(32) 自动通过uuid生成时,会加上文件key的后缀
check_access_token int(1) 1:校验 2:不校验
enable_private_url int(1) 1:下发私有url 2:不下发私有url
enable_callback int(1) 0:不回调 1:回调,默认值:不回调
callback_url varchar(32) enable_callback为1时,有值,否则:为空
file_size_limit long 限制:上传的文件大小
mime_limit varchar(32) mime文件类型限制,多个以逗号分隔
remark varchar(256) 备注信息

上传方式:cloud_process_upload_meta

字段名 类型 描述
id long 库表id,自增
creator varchar(32) 创建者
modifier varchar(32) 修改者
create_time datetime 创建时间
modify_time datetime 修改时间
upload_id long 关联表:cloud_process_upload的id,一对多
bucket_id long 关联表:cloud_process_bucket的id
s3_flag varchar(32) 是否开启s3协议,1:开启,0:不开启,默认:不开启
quic_flag varchar(32) 是否开启quic协议,1:开启,0:不开启,默认:不开启
upload_domain varchar(128) 上传域名
backup_domain varchar(128) 上传失败后,fail back 2 backup
auth_id long 关联表:cloud_process_bucket_auth 的id,使用哪一款ak/sk触发上传
mutipart_flag int(1) 是否开启分片上传 1:开启,0:不开启。默认值:开启
max_single_size long 走form表单上传的最大文件大小,超过这个值,就开启:分片上传
status int(1) 1:生效 9:关闭
remark varchar(256) 备注信息

上传完毕后,触发预计算:cloud_process_pre_action

字段 类型 描述
id bigint 主键
creator varchar(32) 创建者
modifier varchar(32) 修改者
create_time datetime 创建时间
modify_time datetime 修改时间
remark varchar(256) 备注
upload_id bigint 关联 cloud_process_upload.id,指明触发来源
action_type varchar(32) 动作类型(transcode、thumbnail、ai_analyze、meta_sync等)
action_name varchar(64) 动作名称(支持自定义,便于扩展)
trigger_condition varchar(128) 触发条件(如:mime=image/*、size<10MB、tag=upload)
execute_mode tinyint 执行方式:1异步任务 / 2同步回调 / 3事件推送
target_url varchar(256) 动作执行回调或推送地址
retry_strategy varchar(64) 失败重试策略(如:3次/5min重试)
status tinyint 状态:1启用 / 9关闭

备注:
1、每个上传场景可绑定多个动作(例如:上传视频 → 自动转码 + 封面抽帧)。
2、trigger_condition 允许定义精细规则。
3、execute_mode 支持异步消息触发(Kafka、RocketMQ)或Webhook。
4、可结合任务队列系统(如 Celery / Sidekiq / Go worker pool)。
5、详情请参考:预计算模块