# scheduler **Repository Path**: kybs/scheduler ## Basic Information - **Project Name**: scheduler - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-19 - **Last Updated**: 2025-08-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 定时任务框架 (Scheduler Framework) 基于 Temporal 的分布式定时任务框架,支持多种任务类型、高可用部署和灵活的任务调度。 ## ✨ **核心特性** - 🚀 **高性能**:基于 Temporal 的分布式架构,支持高并发任务执行 - 🔄 **灵活调度**:支持 Cron 表达式,精确控制任务执行时间 - 🎯 **任务分类**:IO 密集型、计算密集型、混合型任务分类处理 - 🏗️ **模块化设计**:清晰的组件分离,易于扩展和维护 - 📊 **实时监控**:完整的任务执行监控和链路追踪 - 🔒 **高可用性**:Worker 进程自动恢复,任务执行不中断 ## 🏗️ **系统架构** ```mermaid graph TB subgraph "应用层" A1[管理后台] A2[监控面板] A3[API 接口] end subgraph "调度层" S1[Schedule Manager] S2[Task Registry] S3[Platform] end subgraph "执行层" W1[IO Worker] W2[Compute Worker] W3[Mixed Worker] end subgraph "基础设施" T1[Temporal Server] R1[Redis] D1[数据库] end A1 --> S1 A2 --> S1 A3 --> S1 S1 --> S2 S2 --> S3 S3 --> W1 S3 --> W2 S3 --> W3 W1 --> T1 W2 --> T1 W3 --> T1 S1 --> R1 ``` ## 🚀 **快速开始** ### **前置要求** - Go 1.19+ - Docker & Docker Compose - Git ### **5分钟快速体验** ```bash # 1. 克隆项目 git clone https://gitee.com/kybs/scheduler.git cd scheduler # 2. 启动 Temporal 服务 docker-compose up -d # 3. 运行示例 cd tools/continuous-worker-test ./start-specialized-workers.sh ``` 详细步骤请参考:[快速开始指南](docs/QUICKSTART.md) ## 📚 **文档导航** ### **🚀 入门指南** - [快速开始](docs/QUICKSTART.md) - 5分钟快速体验 - [系统架构](docs/ARCHITECTURE.md) - 架构设计详解 - [配置说明](docs/CONFIGURATION.md) - 配置选项详解 ### **🔧 开发指南** - [任务类型](docs/TASK_TYPES.md) - 任务类型和接口说明 - [API 参考](docs/API_REFERENCE.md) - 完整 API 文档 - [最佳实践](docs/BEST_PRACTICES.md) - 开发最佳实践 - [测试指南](docs/TESTING.md) - 测试方法和示例 ### **🚀 部署运维** - [部署指南](docs/DEPLOYMENT.md) - 生产环境部署 - [监控告警](docs/MONITORING.md) - 监控和告警配置 - [故障排除](docs/TROUBLESHOOTING.md) - 常见问题解决 ### **📖 参考文档** - [测试指南](docs/TESTING.md) - 测试方法和示例 - [最佳实践](docs/BEST_PRACTICES.md) - 开发最佳实践 ## 🎯 **核心概念** ### **任务类型** - **IO 密集型任务**:文件操作、网络请求、数据库查询等 - **计算密集型任务**:复杂计算、数据处理、算法执行等 - **混合型任务**:IO 和计算混合的任务类型 ### **核心组件** - **Platform**:平台核心,管理 Worker 生命周期 - **Manager**:调度管理器,管理 Temporal Schedules - **Worker**:任务执行器,执行具体的业务任务 - **Task Registry**:任务注册表,管理所有注册的任务 ### **执行流程** 1. **任务注册**:应用注册任务到 Platform 2. **调度创建**:Manager 创建 Temporal Schedule 3. **任务触发**:Temporal 按 Cron 表达式触发任务 4. **任务执行**:Worker 执行具体的业务逻辑 5. **结果返回**:执行结果返回给调用方 ## 💡 **使用示例** ### **1. 定义任务** ```go type MyTask struct { name string } func (t *MyTask) GetName() string { return t.name } func (t *MyTask) GetParamsType() interface{} { return &struct{}{} } func (t *MyTask) GetTaskType() scheduler.TaskType { return scheduler.TaskTypeIO } func (t *MyTask) GetTaskConfig() *scheduler.TaskSpecificConfig { return nil } func (t *MyTask) Execute(ctx context.Context, params interface{}) error { log.Printf("执行任务: %s", t.name) // 业务逻辑 return nil } ``` ### **2. 启动 Worker** ```go config := &scheduler.Config{ ProjectID: "my-project", Temporal: scheduler.TemporalConfig{ HostPort: "localhost:7233", Namespace: "default", }, Global: scheduler.GlobalConfig{ DefaultTimeout: 5 * time.Minute, MaxConcurrentActivities: 100, DefaultTaskQueue: "my-queue", }, } platform, err := scheduler.NewPlatform(config) if err != nil { log.Fatal(err) } // 注册任务 platform.RegisterTask(&MyTask{name: "my-task"}) // 启动 Worker platform.Start() ``` ### **3. 创建定时任务** ```go manager := scheduler.NewManager(client, "default") spec := scheduler.ScheduleSpec{ ID: "daily-task", TaskName: "my-task", CronSpec: "0 9 * * *", // 每天上午9点 Description: "每日任务", Enabled: true, TaskQueue: "my-queue", } manager.Create(context.Background(), spec) ``` ## 🔍 **监控和可观测性** ### **Temporal UI** - 访问 http://localhost:8080 查看任务执行状态 - 监控 Schedules、Workflows、Task Queues - 查看任务执行历史和性能指标 ### **命令行工具** ```bash # 查看 Schedules docker exec temporal-admin-tools tctl schedule list # 查看 Workflows docker exec temporal-admin-tools tctl workflow list # 查看 Task Queues docker exec temporal-admin-tools tctl task-queue list ``` ### **日志监控** - Worker 执行日志 - 任务执行日志 - 系统运行日志 ## 🚀 **高级特性** ### **1. 任务隔离** - 不同任务类型使用不同队列 - Worker 进程隔离 - 资源访问控制 ### **2. 高可用性** - Worker 进程自动恢复 - 任务执行不中断 - 负载均衡支持 ### **3. 扩展性** - 支持新任务类型扩展 - 支持新 Worker 类型扩展 - 配置灵活可调整 ### **4. 性能优化** - Worker 并发数可配置 - 任务超时时间可配置 - 重试策略可定制 ## 🧪 **测试和验证** ### **集成测试** ```bash # 运行所有测试 go test ./... # 运行特定测试 go test ./scheduler -v ``` ### **多进程测试** ```bash # 启动多进程多 Worker 测试 cd tools/multi-process-test ./start-specialized-workers.sh ``` ### **持续任务测试** ```bash # 启动持续任务测试 cd tools/continuous-worker-test ./start-specialized-workers.sh ``` ## 🔧 **配置选项** ### **环境变量** ```bash export SCHEDULER_PROJECT_ID="my-project" export SCHEDULER_TEMPORAL_HOST_PORT="localhost:7233" export SCHEDULER_TEMPORAL_NAMESPACE="default" export SCHEDULER_GLOBAL_DEFAULT_TIMEOUT="5m" export SCHEDULER_GLOBAL_MAX_CONCURRENT_ACTIVITIES="100" ``` ### **配置文件** 支持 YAML 和 JSON 格式的配置文件: - `config.yaml` - YAML 格式配置 - `config.json` - JSON 格式配置 详细配置说明请参考:[配置说明](docs/CONFIGURATION.md) ## 🚨 **故障排除** ### **常见问题** 1. **Worker 启动失败**:检查 Temporal 服务状态和网络连接 2. **任务执行失败**:检查任务注册状态和配置参数 3. **Schedule 创建失败**:检查任务名称和队列配置 ### **调试技巧** 1. **查看日志**:检查 Worker 和系统日志 2. **使用 Temporal UI**:可视化查看任务状态 3. **命令行工具**:使用 tctl 检查系统状态 详细故障排除请参考:[故障排除](docs/TROUBLESHOOTING.md) ## 🤝 **贡献指南** 我们欢迎所有形式的贡献! ### **贡献方式** 1. **报告 Bug**:在 Issues 中报告问题 2. **功能建议**:在 Discussions 中提出建议 3. **代码贡献**:提交 Pull Request 4. **文档改进**:完善和翻译文档 ### **开发环境** ```bash # 克隆项目 git clone https://gitee.com/kybs/scheduler.git cd scheduler # 安装依赖 go mod download # 运行测试 go test ./... # 构建项目 go build ./... ``` ## 📄 **许可证** 本项目采用 [MIT 许可证](LICENSE)。 ## 🙏 **致谢** - [Temporal](https://temporal.io/) - 强大的工作流编排引擎 - [Go](https://golang.org/) - 优秀的编程语言 - 所有贡献者和用户的支持 ## 📞 **联系我们** - **项目地址**:https://gitee.com/kybs/scheduler - **问题反馈**:https://gitee.com/kybs/scheduler/issues - **讨论交流**:https://gitee.com/kybs/scheduler/pulls --- ## ⭐ **Star 我们** 如果这个项目对您有帮助,请给我们一个 Star!您的支持是我们持续改进的动力。 --- **快速链接**:[快速开始](docs/QUICKSTART.md) | [系统架构](docs/ARCHITECTURE.md) | [配置说明](docs/CONFIGURATION.md) | [API 参考](docs/API_REFERENCE.md)