disque基本流程介绍
来源:互联网 发布:asp.net vb 教程 编辑:程序博客网 时间:2024/06/05 05:41
disque基本流程介绍
disque基础
- 整个系统包括3个部分,生产者,disque集群,消费者,生产者将产生的消息(disque中称之为job)加入disque,然后被消费者取走,成功取得job后消费者会回复一个确认消息,基本的API和构架如下
ADDJOB queue_name job [TTL <sec>]
queue_name:队列名
job:消息内容
TTL:失效时间,超过这个时间未被消费者取走,job失效.GETJOB [COUNT <count>] FROM queue1 queue2 ... queueN
COUNT:取出的job数量
queue:队列名ACKJOB jobid1 jobid2 ... jobidN
消费者取得job后的确认回复
- 为了保证可用性,生产者产生的job会在多个节点上存有副本,副本数量由生产者指定。
- at-least-once delivery:只要有一个副本节点可用,保证每个job都可以成功被消费者取走,在出现故障的情况下,消费者可能多次取到相同的job(job重复)
- disque尽量使job按照FIFO的顺序被消费者取得,但由于故障或者负载均衡的需求并不保证这一特性。
- 生产者和消费者可以对集群中的任意节点发出
ADDJOB
(添加job),GETJOB
(取得job),ACKJOB
(确认取得job)。比如,消费者不需要从接到生产者的ADDJOB
命令的节点取出job,同时由于节点故障或者负载均衡的原因,加入和取出的job不一定在同一个节点上完成。 - 为了保证at-least-once delivery,job只会在一个节点上加入队列。
主要流程图
job的状态
- wait-repl:job等待复制过程完成
- active:job复制过程完成尚未进入队列,对于那些接受复制job命令的节点,job状态一开始就为active
- queued:job进入了队列
- acked:收到了消费者确认
ADDJOB流程
1. 客户端向任意节点发送ADDJOB命令
2. Node A将job状态标记为wait-repl,随机地向几个其他节点发出REPLJOB命令,要求其复制job,收到REPLJOB的节点,将job状态标记为active,回复Node A确认收到
3. 当副本节点的数量达到要求,复制过程完成,job在Node A进入队列,状态为queued
4. 回复client addjob完成
GETJOB流程
1. 客户端向任意节点发出GETJOB
2. 若Node A中有满足GETJOB的job,从其队列中取出job,状态标记为acitve
2.1 没有满足要求的job,向其他节点广播NEEDJOB
2.2 包含job的队列所在节点收到NEEDJOB,job出队列,状态为active,向Node A回复job
3. Node A将job回复给client,getjob完成
ACKJOB流程
- 客户端向任意节点发出ACKJOB
- Node A向所有它知道的job的复制节点发出SETACK
- Node B知道的复制节点的数量比A多,回复GOTACK并告知剩下的流程又B完成
- Node B向剩下的复制节点发出SETACK
- 收到所有复制节点的回复
- 向所有复制节点发出DELJOB,要求其删除job,同时在本地删除job
fast ACKJOB
从上面可以看到ACKJOB的流程较为繁琐,在网络情况比较可靠的情况下,可以使用fast ACK
收到Client的ACKJOB后直接全集群广播DELJOB,由于没有GOTACK确认,在网络故障的情况下DELJOB可能会丢失导致Job清理不完全,后续的GETJOB仍然会取到这个job。
0 0
- disque基本流程介绍
- crtmpserver基本流程介绍
- Mybatis基本流程介绍
- LoadRunner基本介绍及简单操作流程
- Struts2的基本流程的详细介绍
- 新手EDM营销的基本流程介绍
- Struts2的基本流程的详细介绍
- Word2vec基础介绍(一):主要概念和基本流程
- 数组、运算符、流程控制的基本介绍及示例
- 基本流程
- SAP-MM-PA精解分析系列之基本介绍(01)-采购基本流程
- 移植u-boot-2012-10到tiny210v2(一)-----基本芯片介绍和启动流程介绍
- 项目开发流程(基本流程)
- 言简意赅介绍:数字IC设计基本流程和所使用的工具
- 介绍的嵌入式软件开发的背景知识,基本逻辑和流程,基本名词、概念和理念
- SIP基本呼叫流程
- Java 基本学习流程
- 信道接入基本流程
- 决策支持系统复习资料
- poj1182食物链
- MJRefresh的用法
- 【编程马拉松】【004-包含一】
- mysql 找不到或无法加载已注册的 .Net Framework Data Provider。
- disque基本流程介绍
- 四种可视化技术对比
- PAT 1002. A+B for Polynomials (25)
- 完全背包问题
- ZZULIOJ 1430 1435
- Android应用组件Activity
- [Vulkan教程] 二: Image & Buffer & 内存管理
- 用户代码未处理MetadataException
- 【动态规划】爬台阶