A. 系统架构概要 — 分布式系统 — 任务调度
基本问题
- 资源异质性和工作负载异质性
- 数据局部性
- 节点局部性
- 机架局部性
- 全局局部性
- 抢占式调度和非抢占式调度
- 资源分配粒度:作业级和任务级
- 全分或者全不分
- 增量满足式分配
- 资源储备 策略
- 饿死和死锁问题
- 资源隔离方法
资源管理与调度系统范型
- 集中式调度器
- 两级调度器
- 共享调度器
资源调度策略
- FIFO调度策略
- 公平调度器
- 能力调度器
- 延迟调度策略
- 主资源公平调度策略
项目
- Mesos
- yarn
定时任务 — google cron
- 复杂度
- 功能点
- 如何处理Cron崩溃导致错过的任务,或者状态丢失导致有可能同一个任务执行两次
- 周期性任务的任务描述,比如说每天执行一次。
- 部分启动:一个任务由多个服务组成,其中有部分任务启动失败(比如说发送RPC本身的任务崩溃)
- 非公能点
- 可靠性
- 功能点
- 任务类型
- 垃圾回收类任务
- 周期性的数据分析任务
- 等等
- Cron任务和幂等性
- 问题:周期性任务多种多样,如果完全满足几乎是不可能,会导致Cron复杂无比,影响到可靠性
- 任务分类
- 幂等性:频繁的垃圾回收任务,可以允许偶尔跳过
- 非幂等性:发送邮件
- 周期长短:长周期任务,不允许被跳过,比如说每个月执行一次的工资计算任务。
- 等等
- 设计要点
- 在最差情况下,跳过某个任务不执行,通过人工干预。因为修复执行两次产生的问题,比修复某个任务美欧执行的问题难得多
- 对Cron做主备设计(热备),应对延时要求高的任务
- 对于状态存储,可以采用分布式系统(GFS等)
- 系统设计
- 跟踪Cron任务的状态
- 设计方案
- 将数据存放在外部分布式存储上
- 系统内部自行存储一些(很小量)的状态信息
- google cron:选用自定存储
- 分布式文件爱呢系统:延迟高,文件系统主要适用于非常大的文件
- 基础服务应该依赖越少越好
- 设计方案
- 基于Paxos算法做主从设计
- 在任务名中加入预计启动时间作为任务名的一部分,主要处理高频任务
- 保存日志
- 日志需要定期压缩,以防无限增长:快照
- 日志必须要存储在某个地方
- 快照存放在分布式系统
- 还没有形成快照的,存放在系统内部
- 防止“惊群效用”:在添加一个周期任务的同时,创建一堆任务出来,或者说同一个时间点,很多任务同时启动
- Cron会根据用户约定的时间,自行调整,防止惊群效用
- 跟踪Cron任务的状态