# minischedule **Repository Path**: arvinstudycode/minischedule ## Basic Information - **Project Name**: minischedule - **Description**: 模拟调度器demo - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-13 - **Last Updated**: 2026-02-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ┌════════════════════════════════════════════════════════════════════════════════┐ │ 第1层:资源层(Resource Layer) │ │ 调度的主体与目标定义 │ └════════════════════════════════════════════════════════════════════════════════┘ │ ├──【调度目标】Node ──────────────────────────────────────────────────┐ │ ├─ nodeId: String │ │ ├─ capacity: Resource (总容量) │ │ ├─ allocated: Resource (已分配) │ │ ├─ tasks: List (运行的任务) │ │ ├─ taskReservations: Map (资源预留) │ │ ├─ canReserve() (检查资源) │ │ ├─ reserve() (预留资源) │ │ └─ release() (释放资源) │ │ │ ├──【调度主体】Task ──────────────────────────────────────────────────┐ │ ├─ taskId: String │ │ ├─ required: Resource (资源需求) │ │ ├─ createTime: long (创建时间) │ │ ├─ scheduledNode: String (被调度到的节点) ◄── 被调度的证据! │ │ ├─ state: TaskState (PENDING→SCHEDULED) │ │ └─ waitingTime() (等待时长) │ │ │ ├── TaskState (枚举) ──────────────────────────────────────────────┐ │ ├─ PENDING (待调度) │ │ ├─ SCHEDULED (已调度) ◄── 调度完成的标志 │ │ ├─ RUNNING (运行中) │ │ └─ COMPLETED (已完成) │ │ │ └── Resource ──────────────────────────────────────────────────────┐ ├─ id: String │ ├─ cpu: int │ └─ memory: int │ ┌════════════════════════════════════════════════════════════════════════════════┐ │ 第2层:感知层(Collector Layer) │ │ 集群状态的观察者与快照 │ └════════════════════════════════════════════════════════════════════════════════┘ │ ├── ClusterStateCollector ─────────────────────────────────────────┐ │ ├─ nodes: Map (所有节点) │ │ ├─ pendingTasks: Queue (待调度队列) ◄── 主体池 │ │ ├─ scheduledTasks: List (已调度列表) │ │ ├─ listeners: List (事件监听器) │ │ ├─ addNode() (注册目标) │ │ ├─ submitTask() (提交主体) │ │ └─ getSnapshot() (生成快照) │ │ │ ├── ClusterSnapshot ──────────────────────────────────────────────┐ │ ├─ nodes: Map (不可变) │ │ ├─ pendingTasks: List (不可变) │ │ ├─ scheduledTasks: List (不可变) │ │ └─ timestamp: long (快照时间戳) │ │ │ └── SchedulingEventListener (接口) ───────────────────────────────┐ ├─ onTaskScheduled(Task, Node) │ ├─ onNodeAdded(Node) │ └─ onNodeResourceChanged(Node) │ ┌════════════════════════════════════════════════════════════════════════════════┐ │ 第3层:决策层(Strategy Layer) │ │ 调度算法与决策产出 │ └════════════════════════════════════════════════════════════════════════════════┘ │ ├── SchedulingStrategy (接口) ────────────────────────────────────┐ │ └─ decide(ClusterSnapshot): SchedulingDecision │ │ [输入: 集群快照] → [输出: 谁去哪儿] │ │ │ ├── SchedulingDecision ──────────────────────────────────────────┐ │ ├─ task: Task (被选中的主体) ◄── 被调度者 │ │ ├─ node: Node (被选中的目标) ◄── 目的地 │ │ ├─ reason: String (决策理由) │ │ └─ decisionTime: long (决策时间) │ │ │ ├── BestFitStrategy (实现) ──────────────────────────────────────┐ │ └─ decide(): 选择分配后剩余资源最小的节点 │ │ 优化目标:资源利用率最大化 │ │ │ ├── RoundRobinStrategy (实现) ───────────────────────────────────┐ │ ├─ counter: AtomicInteger │ │ └─ decide(): 轮询选择节点 │ │ 优化目标:负载均衡 │ │ │ └── WorstFitStrategy (实现) ─────────────────────────────────────┐ └─ decide(): 选择分配后剩余资源最大的节点 │ 优化目标:保留扩容空间 │ ┌════════════════════════════════════════════════════════════════════════════════┐ │ 第4层:执行层(Scheduler Layer) │ │ 调度循环与绑定执行 │ └════════════════════════════════════════════════════════════════════════════════┘ │ ├── MiniScheduler ───────────────────────────────────────────────┐ │ ├─ collector: ClusterStateCollector (感知层依赖) │ │ ├─ strategy: SchedulingStrategy (决策层依赖) │ │ ├─ scheduler: ScheduledExecutorService (调度循环驱动) │ │ ├─ taskNodeBindings: Map (绑定关系表) │ │ ├─ scheduleCycle: AtomicLong (调度周期计数) │ │ ├─ start() (启动调度循环) │ │ ├─ scheduleOnce() (单次调度) ◄── 核心! │ │ │ ├─ 1. snapshot = collector.getSnapshot() │ │ │ ├─ 2. decision = strategy.decide(snapshot) │ │ │ └─ 3. executeSchedulingDecision(decision) │ │ └─ executeSchedulingDecision() (执行调度决策) │ │ ├─ node.reserve() (目标:预留资源) │ │ ├─ task.state = SCHEDULED (主体:标记已调度) ◄── │ │ └─ taskNodeBindings.put() (记录绑定) │ │ │ └── SchedulerFourLayerDemo ──────────────────────────────────────┐ ├─ main() (程序入口) │ ├─ 初始化Node、Task │ ├─ 注入不同Strategy │ └─ testStrategy() (测试不同调度策略) │ ┌════════════════════════════════════════════════════════════════════════════════┐ │ 核心数据流(谁依赖谁) │ └════════════════════════════════════════════════════════════════════════════════┘ SchedulerFourLayerDemo (启动器) │ ▼ MiniScheduler (调度引擎) │ 依赖 ┌───────┴───────┐ ▼ ▼ ClusterStateCollector SchedulingStrategy (接口) │ △ △ △ │ │ │ │ │ ┌──────┴──┴──┴──────┐ │ │ │ │ │ BestFit RoundRobin WorstFit │ (实现) (实现) (实现) │ ▼ ClusterSnapshot (不可变快照) │ └──► 包含:Node、Task ┌════════════════════════════════════════════════════════════════════════════════┐ │ 谁是“被调度”的主体? │ └════════════════════════════════════════════════════════════════════════════════┘ 【证据链】Task 类的字段: ┌─────────────────────────────────────────┐ │ class Task { │ │ String scheduledNode; ←── 我被调度到了 node-1 │ │ TaskState state; ←── 我的状态从 PENDING │ │ } 变成了 SCHEDULED │ └─────────────────────────────────────────┘ ▲ │ 调度器执行后,Task 的状态改变 ──────────┘ 【结论】 ┌─────────────────────────────────────────┐ │ ✓ Task → 被调度的主体(状态会变) │ │ ✗ Node → 被选中的目标(状态不变) │ └─────────────────────────────────────────┘ ┌════════════════════════════════════════════════════════════════════════════════┐ │ 现实世界类比映射 │ └════════════════════════════════════════════════════════════════════════════════┘ ┌───────────────┬─────────────────┬─────────────────┬─────────────────┐ │ 领域 │ 调度主体(被调度)│ 调度目标(目的地)│ 调度器 │ ├───────────────┼─────────────────┼─────────────────┼─────────────────┤ │ 本系统 │ Task │ Node │ MiniScheduler │ ├───────────────┼─────────────────┼─────────────────┼─────────────────┤ │ 打车 │ 乘客 │ 车辆/司机 │ 滴滴调度系统 │ ├───────────────┼─────────────────┼─────────────────┼─────────────────┤ │ 快递 │ 包裹 │ 分拣中心 │ 分拣系统 │ ├───────────────┼─────────────────┼─────────────────┼─────────────────┤ │ 操作系统 │ 进程/线程 │ CPU核心 │ 内核调度器 │ ├───────────────┼─────────────────┼─────────────────┼─────────────────┤ │ Kubernetes │ Pod │ Node │ kube-scheduler │ ├───────────────┼─────────────────┼─────────────────┼─────────────────┤ │ Hadoop │ Task │ DataNode │ ResourceManager │ └───────────────┴─────────────────┴─────────────────┴─────────────────┘