在上次的笔记当中,我们明白了对象存储是什么,以及它和关系存储的对比,还有使用它的必要性以及存储方式。现在我们来谈谈它的使用方式。
对象存储怎么用?
使用流程
graph TD
申请Bucket --> 业务逻辑开发 --> 上线测试
增删改查
在其中的操作(提供的对外接口Restful)和操作数据库很像,都是增删改查:
- PUT(上传视频): 参数: Bucket,Key,对象内容 返回: 成功/失败
- GET(下载视频): 参数: Bucket,Key 返回: 对象内容
- HEAD(查看视频元信息)Lite版GET: 参数: Bucket,Key 返回:对象元信息,如大小/Content-Type等
- DELETE(删除视频): 参数: Bucket,Key 返回:成功/失败
最后一公里问题(99%时走不动了)
使用MultiUpload接口
- lnitUpload: 参数: Bucket,Key 返回: Uploadld
- UploadPart: 参数: Uploadld,Partld,Part内容 返回: 成功/失败
- CompleteUpload: 参数: Uploadld,Partld Array 返回: 成功/失败
一口气下载全部太慢了
ListPrefix参数:
- prefix: key前级
- delimiter: 分隔符,默认为/
- max-keys: 本次分页数量
- start-after:分页起始对象Key
ListPrefix返回:
- common-prefix: 共同前级
- objects: 对象key列表
- isTruncated: 是否已经列举完
内部实践
- 梳理当前业务场景,再总结挑战对症下药。
- 是否需要使用partition分布式存储,用算法来保证每一台服务器运算量差不多,且每一个访问者都能在差不多的时间得到返回
- 考虑持久度:做好容灾备份。
- 考虑冗余度:代码一定要简洁
- 对数据进行温冷转换:数据变凉之后要放得远一点
- 架构细化
- 存储需求量细化
- 通过拆分降低爆炸半径
未来,我们要可以展望容量、成本、大数据和稳定性的发展,提升项目的性能,包括但不限于安全性和稳定性以及反问速度和广度。