OSS 对象存储 架构模式

本文介绍如何通过七牛云的对象存储服务(OSS)进行文件上传与管理。包括OSS服务接口定义、存储空间配置、上传流程及客户端上传调整等内容。

1. 类名解释

  • OssService : 对象存储业务定义接口,定义业务中使用Oss功能的方法定义。具体实现方法由实现类定义。
    • String getDownloadUrl(Long resourceId);
    • @param resourceId:业务资源id
    • @return 对应资源的下载地址
  • OssQiNiuService:对象存储业务定义实现方法,实现OssService接口定义的具体逻辑。
  • OssQiNiuBucketZoneEnum:对象存储空间位置,用来初始化OssQiNiu配置信息
    • huabei(“https://upload-z1.qiniup.com”)
    • huadong(“https://upload.qiniup.com”)
    • huanan(“https://upload-z2.qiniup.com”)
    • beimei(“https://upload-na0.qiniup.com”)
    • xinjiapo(“https://upload-as0.qiniup.com”)
  • OssBucketNameEnum:对象存储空间名称。
    • 限制空间名称
    • 抽象类型,分离服务提供商空间名称和业务中使用的空间名称
    • app jar APP_PACKAGE(“app-package”),
    • 车辆品牌,车型,车标,车系,车款等图片 CAR_PIC(“car-pic”),
    • 产品,商品,套餐图片 GOODS_PIC(“goods-pic”),
    • 工序工艺 PROCEDURE_PIC_VIDEO(“procedure-pic-video”),
    • 个人头像等图片 PROFILE_PIC(“profile-pic”),
    • 精检,精养拍照图片 SERVICE_PIC(“service-pic”),
    • 门店附件,供应商附件 STORE_ATTACH_PIC(“store-attach-pic”);
  • OssBucketInfo:对象存储信息
    • private String bucketName;真实的空间名称
    • private String domain;cdn域名
  • OssQiniuCallbackBody:对象存储七牛回调类
  • OssQiNiuCallbackUploadToken:对象存储七牛上传凭证类
  • OssQiNiuConfiguration:对象存储七牛配置类
    • private String accessKey/private String secretKey:密钥对
    • private String callbackUrl:回调地址
    • private Long expireSeconds:上传凭证有效时长
    • private Boolean dev:环境配置
    • private OssQiNiuBucketZoneEnum zone:存储空间位置
    • private String cnameDomainSuffix:cdn配置CNAME的后缀

2. 上传流程

  1. 客户端(PC、移动)请求业务服务器获取上传凭证
    1.1 接口:getQiniuCallbackUpToken
    1.1.1 入参:
  • OssBucketNameEnum bucketName:对象存储空间名称。
  • String originName:文件原名
  • String fops :资源预处理指令
    1.1.2 回参:
  • key:上传到七牛及保存到业务服务器上的资源名称
  • token:上传凭证
  • actualBucketName:上传到七牛存储空间的真实名称
  • uploadUrl:上传七牛存储空件的地域地址
  • url:资源访问地址
  1. 客户端携带token请求七牛服务器上传资源
  2. 七牛服务器回调业务服务器
  • 业务服务器保存资源元数据
  • 返回业务服务器生成的资源标识ResouceId
  1. 七牛服务器返回客户端信息,包含ResouceId但不限于。

3. 客户端上传调整

  • 请求业务服务器获取上传凭证阶段,之前传的是字符串。现在修改成枚举类型【OssBucketNameEnum bucketName】

4. 后端解耦逻辑

  • 七牛服务商
    • 配置dev
    • 配置zone
    • 配置cnameDomainSuffix
    • 增加initOssBucketInfoStore环境信息
  • 其他服务商
    • 实现OssService接口
    • 增加配置类
### HDFS vs 对象存储 OSS 成本分析 #### 存储成本对比 对于大数据分析场景下的云存储选型而言,对象存储(如阿里云的OSS)相比传统分布式文件系统HDFS,在存储成本方面具有显著的优势。对象存储适用于大规模非结构化数据的存储需求,能够提供超级强大的弹性伸缩能力的同时保持较低的成本[^1]。 具体来说,对象存储的标准存储价格通常只有普通云盘的一半左右,并且针对不同访问频率的数据提供了多种类型的存储解决方案——低频存储和归档存储的价格更是低廉至标准存储费用的大约三分之一。这种灵活性使得用户可以根据实际业务情况调整所使用的存储类别,从而进一步降低整体开销[^2]。 相比之下,虽然Hadoop Distributed File System (HDFS)作为开源软件本身免费,但在部署于物理硬件之上时涉及到了服务器购置、电力消耗以及维护人员工资等一系列间接支出;即使是在云端运行HDFS集群也难以完全规避这些额外负担。因此,在考虑长期运营总成本的情况下,采用按需付费模式的对象存储往往更具经济性。 #### 性价比考量 除了直接的金钱花费外,还需要综合评估两种方案所能带来的价值回报率: - **性能表现**:尽管HDFS专为处理海量数据而优化并广泛应用于各类离线批处理作业之中,然而面对日益增长的数据规模及时效性要求更高的在线查询请求时,则可能暴露出读取延迟较高、并发度不足等问题; - **管理复杂度**:由于HDFS依赖于特定的基础架构来实现高可用性和容错机制,这无疑增加了运维工作的难度和技术门槛;相反地,像OSS这样的托管式服务则极大地简化了日常管理和故障排查流程,允许开发者专注于核心应用逻辑而非底层设施细节; - **扩展便捷性**:借助公有云平台所提供的API接口和服务编排工具,基于对象存储构建的应用程序更容易实现自动化扩容/缩容操作,进而适应不断变化的工作负载特性而不必担心资源浪费或供应短缺现象的发生。 综上所述,无论是从初始投资还是后续维护的角度出发,选择对象存储都能够在很大程度上帮助企业有效控制预算开支,同时获得更好的用户体验与技术支持保障。 ```python # Python代码示例用于展示如何通过编程方式获取阿里云OSS中的对象列表及其大小信息以便估算潜在成本 import oss2 auth = oss2.Auth('your-access-key-id', 'your-access-key-secret') bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'your-bucket-name') total_size = 0 for obj in oss2.ObjectIterator(bucket): total_size += obj.size print(f'Total size of objects in bucket is {total_size / (1024 * 1024):.2f} MB.') ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值