对象存储与云中间件 考试重点
云平台服务
OSS 存放非结构化对象;日志服务采集可观测数据;消息队列异步解耦。三者常与计算层搭配。
结构示意
flowchart LR
APP[应用] --> OSS[OSS 对象]
APP --> SLS[日志服务]
APP --> MQ[消息队列]
APP --> RDS[(RDS)]
讲解视频
相关视频
知识说明
OSS 适合课件、图片、备份包,以对象(文件)为粒度,经 URL/SDK 访问,而不是当数据库用。SLS 类日志服务解决「多实例日志不好搜」。消息队列(如 RocketMQ/RabbitMQ 云产品)承接事件驱动架构的管道。
选型口诀:结构化业务数据→RDS;大文件→OSS;异步解耦→MQ;排查与审计→日志服务。
特点
- 对象语义
- 高耐久存储
- 日志检索
- 异步消息
优点
- 存储与计算分离
- 削峰填谷
- 提升可观测性
局限
- 最终一致与延迟
- 权限 ACL 配错会泄露
- 消息积压要治理
适用
静态资源 系统日志 订单异步处理
例子展示 —— 实验报告:文件走 OSS,评分结果走 RDS,通知走 MQ
问题
报告 PDF 塞进 MySQL 的 BLOB,库膨胀;评分后同步发邮件导致接口超时。
做法
PDF 上传 OSS 只存 URL;评分记录进 RDS;发邮件投递到 MQ,由通知服务消费。
flowchart TB
U[学生上传] --> OSS
U --> RDS
U --> MQ --> MAIL[邮件服务]
class ReportService {
OssClient oss; JdbcTemplate db; MqProducer mq;
void submit(int sid, byte[] pdf) {
String url = oss.put("reports/" + sid + ".pdf", pdf);
db.update("insert into report(sid,url) values(?,?)", sid, url);
mq.send("ReportSubmitted", sid);
}
}
def submit(sid, pdf, oss, db, mq):
url = oss.put(f"reports/{sid}.pdf", pdf)
db.execute("insert into report(sid,url) values(%s,%s)", sid, url)
mq.publish("ReportSubmitted", {"sid": sid})