Shopee 大数据存储加速与服务化实践总结
存储现状
Shopee 当前采用 Data Management Platform (DMP) 架构,主要组件包括 Spark、Flink、Yarn、Presto 等,存储层以 HDFS 为主,辅以 Ozone 平台。整体存储规模达数百 PB,文件数量数十亿,最大 QPS 数十万。
存储加速
Presto 现状
Presto 集群规模数千台实例,tp90 查询延迟约 2 分钟,日均处理输入数据量达数十 PB,日均查询量数十万次。当前面临 HDFS 性能不稳定和查询抖动问题,需进一步优化查询速度。
Presto 加速方案
采用 Alluxio 作为缓存层,通过 Presto 访问 Alluxio 再访问 HDFS 的经典方案,解决 HDFS 性能瓶颈。但存在缓存容量有限、首次数据需额外导入等问题。
CacheManager 架构
设计 CacheManager 自动化缓存管理,通过 Kafka 监控 Presto 查询日志,统计热点表(按日期分区),每日定时调度加载最近七天访问最频繁的表到 Alluxio。通过 HMS 标签管理缓存策略,支持 REST API 进行路径加载、卸载、查询等操作。
加速效果
Alluxio 社区贡献活跃,已修复多个 Hadoop、Command Line、Web Page 等组件问题,提升系统稳定性。
存储服务化
业务痛点
当前业务数据主要存储 HDFS,但不同业务开发语言各异,HDFS 非Java客户端不完善,需提供统一服务化接口。
解决方案
提供 Alluxio Fuse 和 S3 for HDFS 两种方案:
- Fuse for HDFS:物理机部署或 Kubernetes 部署,支持 POSIX 接口访问。
- 物理机部署:运维成本高,独立性低。
- K8s CSI 部署:资源占用较高,受 NodeServer 影响。
- K8s sidecar 模式:资源占用低,独立性高,但运维复杂。
- S3 for HDFS:通过 Alluxio 提供 S3 API 访问 HDFS 数据,支持多语言 SDK,实现桶(bucket)、对象(object)、键(key)、区域(region)等概念映射。
S3 实现
通过 Alluxio 代理服务兼容 S3 API,首级目录作为 bucket,子目录及文件路径作为 key,并实现签名计算、认证解析等安全机制。
服务化贡献
Alluxio 社区贡献包括 S3 代理修复、Fuse 优化等,已合并 4 个 PR,1 个 WIP,1 个 closed。
未来规划
- 存储加速:优化 Spark、Hive 加速,改进 CacheManager 缓存自适应调整。
- 存储服务化:Alluxio Fuse 支持更多 POSIX 接口,优化 Alluxio CSI 部署方案。