背景
如前文所述,想要搭建一套云存储/处理体系,有很多小文件存储配置需要管理,因此,需要一套多云桶的元数据配置服务,以便做下一步业务逻辑。
功能梳理
| 功能点 |
说明 |
备注 |
| 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) |
备注信息 |
| 字段名 |
类型 |
描述 |
| 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、详情请参考:预计算模块