消息队列应用场景
2018-02-10 12:26
274 查看
消息队列(Message Queue),简称MQ,是一种跨进程的通信机制,用于上下游之间传递消息。那些场景需要用到MQ呢?
1 典型应用场景一 数据驱动的任务依赖
什么是任务依赖?举个例子,许多互联网公司会在凌晨进行数据统计任务,任务之间有一定的依赖关系。Task2需要Task1的输出结果作为输入,Task3又需要Task2的结果作为输入。Task1,Task2,Task3就有任务依赖关系,必须Task1先执行,Task2再执行,Task3最后执行。
对于这类需求,常见的实现方式是使用cron人工排任务执行时间表。
task1 0:00执行,经验执行时间50分钟
task2 1:00执行,(为task1预留10分钟bufffer),经验执行时间也是50分钟
task3 2:00执行,为task2预留10分中buffer
这种做法有明显的坏处:
如果有一个任务的执行超过了预留的buffer时间,将会得到错误的结果,因为后置任务不清楚前置任务是否执行成功,此时要手动重跑任务,有可能要重排任务执行时间表。
总任务的执行时间很长,总是预留很多buffer,如果前置任务提前完成,后置任务不会提前开始。
如果一个任务被多个任务依赖,这个任务将会成为关键路径,排班表很难体现依赖关系,容易出错。
如果有一个任务的执行时间要调整,将会有多个任务的执行时间要调整。
优化方案是采用MQ解耦
1)task1准时开始,结束后发一个"task1 done"的消息
2)task2订阅"task1 done"的消息,收到消息后的第一时间启动执行,结束后发一个"task2 done"的消息
3)task3同理
采用MQ的优点:
1)不需要预留buffer,上游任务执行完,下游任务会在第一时间被执行
2)依赖多个任务,被多个任务依赖都很好处理,只需要订阅相关消息即可
3)有任务执行时间变化,下游任务都不需要调整执行时间
需要特别说明的是MQ只用来传递上游任务执行完成的消息,并不用于传递真正的输入输出数据
2 典型应用场景二
1 典型应用场景一 数据驱动的任务依赖
什么是任务依赖?举个例子,许多互联网公司会在凌晨进行数据统计任务,任务之间有一定的依赖关系。Task2需要Task1的输出结果作为输入,Task3又需要Task2的结果作为输入。Task1,Task2,Task3就有任务依赖关系,必须Task1先执行,Task2再执行,Task3最后执行。
对于这类需求,常见的实现方式是使用cron人工排任务执行时间表。
task1 0:00执行,经验执行时间50分钟
task2 1:00执行,(为task1预留10分钟bufffer),经验执行时间也是50分钟
task3 2:00执行,为task2预留10分中buffer
这种做法有明显的坏处:
如果有一个任务的执行超过了预留的buffer时间,将会得到错误的结果,因为后置任务不清楚前置任务是否执行成功,此时要手动重跑任务,有可能要重排任务执行时间表。
总任务的执行时间很长,总是预留很多buffer,如果前置任务提前完成,后置任务不会提前开始。
如果一个任务被多个任务依赖,这个任务将会成为关键路径,排班表很难体现依赖关系,容易出错。
如果有一个任务的执行时间要调整,将会有多个任务的执行时间要调整。
优化方案是采用MQ解耦
1)task1准时开始,结束后发一个"task1 done"的消息
2)task2订阅"task1 done"的消息,收到消息后的第一时间启动执行,结束后发一个"task2 done"的消息
3)task3同理
采用MQ的优点:
1)不需要预留buffer,上游任务执行完,下游任务会在第一时间被执行
2)依赖多个任务,被多个任务依赖都很好处理,只需要订阅相关消息即可
3)有任务执行时间变化,下游任务都不需要调整执行时间
需要特别说明的是MQ只用来传递上游任务执行完成的消息,并不用于传递真正的输入输出数据
2 典型应用场景二
相关文章推荐
- 消息队列应用场景
- 消息队列的应用场景总结
- 消息队列应用场景
- 消息队列的应用场景
- NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例
- 【转】NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例
- 消息队列应用场景
- NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例
- Redis作为消息队列服务场景应用案例
- Redis作为消息队列服务场景应用案例
- 挨踢部落坐诊第四期:Java消息队列的应用场景和作用
- Kafka 分布式消息队列的特点及应用场景
- 转载:消息队列应用场景
- NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例
- 消息队列应用场景介绍
- NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例
- 消息队列应用场景
- 消息队列(MQ)简介与应用场景
- PHP(Mysql/Redis)消息队列的介绍及应用场景案例
- 消息队列应用场景