55

Go语言打造分布式Crontab 轻松搞定高性能任务调度 高清无密

 5 years ago
source link: https://studygolang.com/articles/15393?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Golang因其强大的协程机制,现已广泛应用于解决分布式环境下的高并发问题。本门课程中将结合Etcd与MongoDB实现一个基于Master-Worker分布式架构的任务调度系统。你不仅将掌握Golang的工程实践能力,而且会收获诸如CAP、Raft的分布式经典理论与架构经验,”工程能力”与”知识体系”齐头并进,实现华丽质变。

第1章 课程介绍

本章中将介绍一下本课程的基本内容,包括:我们要做什么、要求什么基础、将学会哪些工具、收获哪些独家干货,以及课程具体安排。

1-1 导学视频

第2章 如何执行shell命令

执行"定时任务"其实就是执行"shell命令"。在本章中,将首先带大家区分"程序"与"命令",接着了解bash命令解释器的2种工作模式,并图示分析shell执行任务的底层原理与涉及的系统调用。最后,我们使会用Go语言的Command标准库,实现任务的执行,输出捕获,杀死任务等重要功能。 ...

2-1 原理介绍

2-2 执行任务

2-3 捕获任务输出

2-4 强制结束任务

第3章 如何解析cron表达式

cron表达式是配置定时任务执行周期的核心工具。在本章中,将首先分析cron表达式的构成以及解析逻辑,并利用开源项目cronexpr解析cron表达式并计算任务的下次调度时间。之后,我们将利用其实现任务并发调度逻辑,即同时调度多个不同的cron任务,作为后续实战课的一个重要前置知识。 ...

3-1 cron表达式原理

3-2 开源cron解析库

3-3 调度多个cron

第4章 如何应用etcd协调服务

etcd等价于java生态中的zookeeper,基于raft协议工作,用于解决各种分布式应用场景的设计难题。本章中,将首先分析raft协议的工作原理,了解为什么raft协议可以实现数据在集群中的强一致性同步。此后,我们将搭建etcd服务端,开发若干个示例程序,包括:kv读写,watch监听机制,lease租约,txn事务,分布式锁。后续实战课程...

4-1 功能与原理(上)

4-2 功能与原理(下)

4-3 搭建与连接etcd

4-4 put写入kv

4-5 get读取kv

4-6 get读取目录下所有Kv

4-7 delete删除kv

4-8 lease租约实现kv过期

第5章 应用mongodb实现分布式存储

mongodb是一个分布式的海量存储服务,常用于存储大量的日志类数据。本章中,将首先分析mongodb优势、原理、应用场景,让大家对其架构和功能有所了解。然后,我们会搭建mongodb服务端,开发若干示例程序,包括:插入,查找,删除。后续实战课将使用mongodb完成任务执行日志的保存与查看。 ...

5-1 moongodb简介&基础语法概述

5-2 moongodb原理概述

5-3 搭建与连接mongodb

5-4 InsertOne写入单行记录

5-5 Find查询记录

5-6 Delete删除记录

第6章 分布式crontab架构分析

本章中,将带领大家对分布式crontab的整体架构进行功能分析,以及功能拆解。我们会结合整体架构图,包括master节点、worker节点、etcd服务、mongodb服务各自的职责和数据流关系进行相关内容讲解。

6-1 架构分析

6-2 master-worker整体架构

6-3 master功能点与实现思路

6-4 worker功能点与实现思路

第7章 实现master

万丈高楼平地起,在本章中,将会带领大家创建github项目,并初始化符合golang规范的项目结构,会带领大家安装依赖的etcd、mongodb包,告诉大家如何正确使用go get命令。之后,我们会逐一实现任务管理API,包括:保存、删除、列表、强杀任务共4个接口,均通过操作etcd完成任务的存储管理,接口提供给web后台调用。最后,我...

7-1 创建项目与搭建基本框架(上)

7-2 创建项目与搭建基本框架(下)

7-3 job save接口开发-保存到etcd(上)

7-4 job save接口开发-保存到etcd(中)

7-5 job save接口开发-保存到etcd(下)

7-6 job delete接口开发:从etcd中删除任务

7-7 job-list接口开发:从etcd获取所有任务

7-8 job-kill接口开发:在etcd中标记结束任务

7-9 http支持静态文件路由

7-10 利用bootstrap搭建页面骨架

7-11 ajax获取任务列表并展示

7-12 实现删除按钮

7-13 实现强杀与编辑按钮

7-14 实现新建任务按钮

第8章 实现worker

在本章中,我们首先让worker实时同步etcd中的任务列表。其次,会基于cronexpr与协程实现一个高并发的定时任务调度模块。我们会通过etcd实现分布式乐观锁,解决多个worker节点并发调度同一个任务的问题。最后,把任务执行的输出与错误码作为日志,保存到mongodb中供web管理后台查看。...

第9章 完善系统

本章中,我们首先为master添加日志查看API,在web后台可以查看mongodb中保存的任务执行日志。此后,会实现服务注册与发现功能,这是微服务中的重要概念。我们让worker注册在etcd,并让master实现web界面,在线查看健康的worker节点列表。最后,将演示如何配置nginx upstream反向代理实现高可用的master集群,配置systemctl...

第10章 课程总结

本章中,将带领大家回顾整个课程,也给大家提出一些简单可行的课后练习题,包括任务超时限制,任务失败告警。分布式任务调度还有很多细节可以打磨,大家一定要多多动脑动手呦!

下载地址:  百度网盘


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK