分布式任务(Worker)处理方案

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dalinsi/article/details/51938802

以下分别给出了3种实现抢宝分布式Worker的方案,其中第3种方案,是种前两种方案的一个整合实现。

1. 方案1:服务化Worker设计

基于soa基础服务实现分布式worker,通用性强,扫描的worker只负责扫描待执行的任务做分发,具体的任务处理交给soa服务端任务处理线程池;目前的Worker配置策略保留,将现有的worker执行方式作为Soa服务化Worker执行流程的降级方法

1.1.部署图

1.2.处理流程图 ##

1.3. 设计优势

1)、Soa Server服务器无状态
2)、任务处理不存在Master/Slave,所有机器都能处理任务
3)、任务分发的负载均衡由soa客户端来处理
4)、可以配置服务的调用不跨机房网络
5)、任务扫描 Worker 服务器需要解决单点问题,可以考虑扫描的Worker实现Master/Slave模型
6)、该分布式Worker设计方案能适用于大部分的业务线。

2. 方案2:基于canal服务Worker设计

数据库接入canal之后,可以由canal直接发送任务表的binLog变化mq消息,业务系统订阅任务变更消息,根据消息体可以查询到待执行的任务;
若任务状态为待执行状态则路由具体的任务执行线程池,并将任务交由线程池处理;
若任务状态为执行成功状态则直接将mq消息消费并返回。

2.1.处理流程图

2.2. 设计优势

1)、服务器无状态
2)、不存在Master/Slave,所有机器都能处理任务
3)、任务立即执行的流程可以从业务代码中解耦
4)、对于时效性要求比较高的业务场景比较适合,任务处理

3. 方案3:分布式Worker设计

业务系统可以结合上面两种Worker的设计方案来实现分布式Worker

3.1.处理流程图 ##

3.2. 服务降级

该方案的服务降级可以分为两层降级:
1)、正常情况下依赖canal处理任务;
2)、若canal不可用依赖服务化扫描Worker;
3)、若soa服务不可用依赖常规的单机任务扫描处理任务。

猜你喜欢

转载自blog.csdn.net/dalinsi/article/details/51938802