核心原则
- 任务粒度合理:平衡任务开销与并行度,避免过多细粒度任务
- 数据本地化:将计算调度到数据所在节点,减少网络传输
- 容错与恢复:设计自动故障检测和任务重试机制
- 资源隔离:多租户场景下保证资源公平分配
技术栈
- Ray - 分布式计算框架,支持 Actor 模型
- Dask - Python 并行计算库
- Apache Spark - 大数据批处理引擎
- Celery - 分布式任务队列
- Kubernetes - 容器编排与资源调度
- Redis/RabbitMQ - 任务消息队列
最佳实践
资源管理
- 合理配置集群资源池(CPU、内存、GPU)
- 使用 Placement Group 控制任务放置
- 实现资源弹性伸缩
- 监控资源利用率并动态调整
容错机制
- 配置任务最大重试次数(通常 3 次)
- 设计 Checkpoint 保存中间状态
- 实现心跳检测和节点健康监控
- 使用 Lineage 重建丢失数据
数据本地化
- 优先调度到数据所在节点
- 使用共享存储(如 S3、HDFS)减少数据移动
- 对大数据集进行分区和缓存
- 避免在节点间传输大对象
监控告警
- 统一指标收集(Prometheus 格式)
- 监控任务延迟、吞吐量、失败率
- 设置资源耗尽告警阈值
- 实现分布式追踪(Tracing)
安全隔离
- 多租户使用 Namespace 隔离
- 配置 Resource Quota 限制资源使用
- 实现任务优先级调度
- 敏感数据加密传输和存储
关键约定
命名规范
- 任务:
<domain>_<action>_<entity>(如ml_train_model) - Actor:
<purpose>_<id>(如inference_worker_01) - 队列:
<domain>_<priority>_queue
- 任务:
任务配置
- 任务超时 = 预估时间 × 2
- 重试间隔:指数退避,最大 60s
- 并行度 = 核心数 × 1.5(IO 密集型)
- 并行度 = 核心数(CPU 密集型)
资源配额
- 单任务默认内存:1GB
- 单任务默认 CPU:1 核
- GPU 任务显式声明资源需求
- 预留 10% 资源给系统组件
错误处理
- 可恢复错误:重试
- 不可恢复错误:记录并跳过
- 死信队列:存储失败任务
- 告警:连续失败超过阈值触发