如何安全可靠的处理后台任务

在越来越多的应用智能化,很多后台功能不能及时反馈给用户,但是又不影响用户的体验,大量的任务后台化,由服务器处理完之后再反馈给用户。

随着这种功能的广泛应用,任务到底有没有执行成为维护的难题,毕竟很多小公司开发和维护是一体的。

为了解决这种任务式的难题,特借鉴了张宴的架构思想:轻量级开源简单队列服务 HTTPSQS 1.2 版本发布[原创][张宴]

在这基础上,思考了几个问题:

1. HTTPSQS未记录任务信息

2. 任务失败后HTTPSQS数据被覆盖丢失

3. 任务处理过程中被中断又没有被catch到异常(导致变成脏任务)

4. 任务被重复put (多次执行,毫无意义)

在这基础上面辅助使用了Mysql+HTTPSQS+Mutex的模式来实现应用的稳定,任务处理并发性。

简单一架构图如下:

Mutex Task :使用redis实现的一种互斥锁,主要功能用于并发、任务重复执行的控制。

流程步骤:

1. 同时在mysql和Httpsqs插入任务,任务的标识为WAIT。

2. 后台SERVICE从HTTPSQS中读取数据

3. Mutex Task任务标识为DOING

4. Mysql Task任务标识为DOING

5. 业务逻辑处理

6. 处理完毕,业务处理失败:Mutex Task为ERROR同时Mysql Task为ERROR。

辅助程序:

1. ERROR Task重新入HTTPSQS,执行以上步骤,根据业务需要控制重试次数,可扩展Mutex Task来实现重试次数

简单二架构图如下:

流程步骤:

1. 在mysql插入任务,任务的标识为WAIT。

2. 辅助程序put任务进入HTTPSQS,Mysql Task标识为READY。

2. 后台SERVICE从HTTPSQS中读取数据

3. Mutex Task任务标识为DOING

4. Mysql Task任务标识为DOING

5. 业务逻辑处理

6. 处理完毕,业务处理失败:Mutex Task为ERROR同时Mysql Task为ERROR。

辅助程序:

1. 辅助程序put任务进入HTTPSQS,Mysql Task标识为READY。

2. ERROR Task更改任务状态ERROR => WAIT,辅助程序自动按照新任务执行。执行以上步骤,根据业务需要控制重试次数,可扩展Mutex Task来实现重试次数。

架构2已应用于正式环境。

正式环境实施有以下状况出现:

1. 任务DOING状态,由于PHP异常机制不是很完善,可以还原当时环境,测试修正。

2. 任务为READY状态,由于Mutex Task的控制,该任务为重复任务,是否继续执行看业务需要。

3. SERVICE无需写成while(true){//doing task} ,可以使用CRON定时+执行次数控制,可以并发,可以防止主程序僵死状态。

特推荐 Mutex Task (源码) :

Cache应用/任务Mutex,用于高并发任务处理经过多个项目使用

特推荐 Abstract Service (源码) :

  可私信oShine索取

时间: 2024-12-12 13:46:37

如何安全可靠的处理后台任务的相关文章

在ASP.NET应用中执行后台任务

为什么要在ASP.NET应用中执行后台任务? 主要是考虑使用后台任务来处理CPU或IO密集的计算. 下面是一些常见的后台任务: 大量的提醒和新闻邮件发送 图片和视频处理(比如批量创建缩略图.格式转换) 从外部文件导入大量数据或导出数据(RSS聚合) 文件操作(创建归档.清理临时文件.日志文件维护) 定时生成自动化报告 数据库维护 -- ASP.NET不知道任何后台线程比如一个计时器或者其他,它只知道和request相关的操作.事实上,在后台长时间的运行某些任务实在不是web server该做的事

快速入门系列--WCF--06并发限流、可靠会话和队列服务

这部分将介绍一些相对深入的知识点,包括通过并发限流来保证服务的可用性,通过可靠会话机制保证会话信息的可靠性,通过队列服务来解耦客户端和服务端,提高系统的可服务数量并可以起到削峰的作用,最后还会对之前的事务知识做一定补充. 对于WCF服务来说,其寄宿在一个资源有限的环境中,为了实现服务性能最大化,需要提高其吞吐量即服务的并发性.然而在不进行流量控制的情况下,并发量过多,会使整个服务由于资源耗尽而崩溃.因此为相对平衡的并发数和系统可用性,需要设计一个闸门(Throttling)控制并发的数量. 由于

TCP可靠传输的保证

我们知道传输层提供最主要的两种协议,TCP和UDP,其中TCP是保证可靠传输,为什么他要保证可靠传输呢,IP说:当然是我不能,我只提供尽力而为的服务,不保证你能不能交付,不保证能不能正确的交付,不保证能不能按顺序交付.要不然干嘛要你保证呢.说的好有道理,我呵呵一笑. 那么可靠数据传输到底能保证什么呢? 1.不错:就是传输的数据包没有错误 2.不丢:传输的数据包不丢失 3.不乱:传输的数据包顺序要保持正确的交付. 可靠传输协议凭什么能做出这样的保证呢? 1.差错检测:TCP将保持它首部和数据的检验

如何可靠的对接微信、支付宝条码支付

场景 餐厅提供了网络点餐服务,用户通过微信能很方便的进行点餐并支付,享受餐厅提供的各种餐饮服务.其中可靠的支付服务是其中的核心环节之一,如果支付出了问题,对餐厅或用户都是一个损失,甚至会引起纠纷.如何避免发生这样的问题或者是把发生这样问题的概率降到最低,那就需要结合业务特点和使用场景来仔细分析隐藏的问题. 下面以微信支付中的2种支付场景来解析一下对接过程中遇到的问题以及如何解决 条码支付 对于支付宝和微信的条码支付,都是没有支付成功回调的.这点必须注意,那么基于这个特点,服务器对接了条码支付,就

FutureNet可靠么?是谁对接进大陆的?

FutureNet可靠么?是谁对接进大陆的?FutureNet薇咨询:xo228228,FutureNet,FutureNet公司合法吗?FutureNet公司背景简介.FutureNet是传销吗?FutureNet合法吗?FutureNet传销骗局带图,FutureNet是传销吗?FutureNet怎么样?FutureNet好不好?为什么要选择FutureNet呢?FutureNet有什么优势呢?FutureNet怎么样?FutureNet怎么注册?FutureNet怎么加入?FutureNe

高德API+.NET解决租房问题(可能是最可靠房源:上海互助租房)

作者:李国宝链接:https://zhuanlan.zhihu.com/p/22113421来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. PS:最近点赞和关注的小伙伴有点多,感觉我都变得勤奋多了. 次标题:上海专版-互助租房高德搜房 房源来源: 互助租房(http://www.huzhumaifang.com/Renting/index.html) 互助租房微博(http://weibo.com/u/5389952376) 微博简介: 简介: 这里是新浪微博“互

微服务架构下的数据一致性:可靠事件模式

主页:http://www.howardliu.cn/ 博客:微服务架构下的数据一致性:可靠事件模式 在<微服务架构下的数据一致性:概念及相关模式>中介绍了在微服务中实现数据一致性的三种方式,包括可靠事件模式.业务补偿模式.TCC模式.本文重点说一下可靠事件投递. 1. 可靠事件模式 可靠事件模式属于事件驱动架构,微服务完成操作后向消息代理发布事件,关联的微服务从消息代理订阅到该事件从而完成相应的业务操作,关键在于可靠事件投递和避免事件重复消费. 可靠事件投递有两个特性:1)每个服务原子性的完

可靠软件与可信软件的区别

软件可靠性是指在给定时间内,特定环境下软件无错运行的概率. 软件可靠性包含了以下三个要素: 1.规定的时间 软件可靠性只是体现在其运行阶段,所以将“运行时间”作为“规定的时间”的度量. “运行时间”包括软件系统运行后工作与挂起(开启但空闲)的累计时间.由于软件运行的环境与程序路径选取的随机性,软件的失效为随机事件,所以运行时间属于随机变量. 2.规定的环境条件 环境条件指软件的运行环境.它涉及软件系统运行时所需的各种支持要素,如支持硬件.操作系统.其它支持软件.输入数据格式和范围以及操作规程等.

《云计算架构技术与实践》连载15:2.3.2~2.3.6 弹性伸缩、高性能、用户体验、高安全、高可靠

版权全部,未经华为书面许可,请勿转载或转发. 2.3.2 弹性伸缩 弹性伸缩要求以同样架构,支撑从最少几个计算与存储节点.到最大10万甚至是100万级的计算与存储节点集群规模,且保证数据中心容量扩展过程中的业务连续性及业务服务不中断,或中断时延最短. 这里的弹性伸缩扩展能力应该体如今: l  管理节点弹性伸缩能力. l  数据中心资源的弹性伸缩能力: l  所承载云租户业务的计算集群弹性伸缩能力: l  承载用户数据信息及系统卷镜像的存储集群的弹性伸缩能力 l  连接计算与存储集群资源的网络弹性