A realtime distributed messaging service
- 持久化的任务与消息队列
- 任务的调度处理框架
- 任务的跟踪与管理,任务监控
- 支持定时任务的分发与管理
- 支持redis协议作为总线数据输入,充分利用业务端成熟的redis扩展,对业务端友好,迁移和改造成本低
- 通过fastcgi协议与后端通信,与实际的业务逻辑解耦,方便的支持php和golang等多种语言接入
- 数据的输入和输出对于长连接友好,解决LNMP解决方案,长连接情况下,由于集群连接过多给后端服务造成压力,通过代理方式与最终的后端服务做连接复用,对输入不限制长连,对输出维持有限长连接
- 总线队列支持常规的生产者和消费者模式,消息可以按订阅关系重复消费
- 全链路监控策略,可以获取流水线作业的操作序列,完整自描述其关系
- 队列拥塞状态监控,通过与消费者协议交互,反馈处理异常的队列,计算队列消费者处理能力,动态扩容消费进程
- 总线支持定时任务的设置和管理,动态控制和迁移定时任务,解决常规的crontab的管理问题
- 总线队列支持平滑重启,平稳恢复所有任务
1.业务服务器可以与bus总线实例混合部署也可以独立部署,混合部署时可以优先访问本地总线服务器,独立分离部署可以与总线服务用域名进行通信 2.总线服务器与php-fpm交互可以通过本地也可以通过网络
- 业务服务器将任务加入到总线服务
- 总线服务存储任务到存储
- 将总线任务传输给cgi进程
- cgi进程返回处理结果
- 总线移除处理任务
名词解释:
名词 | 解释 | 备忘 |
---|---|---|
任务队列(Queue) | 总线可以按需要分为多个队列,是任务的载体 | 每个队列可以对应一组任务 |
任务(Job) | 业务加入到指定队列的数据,每个任务要选择加入一个队列,通常任务与队列一一对应。任务分为多个类型,每个任务涉及多个属性 | 正常是一个待处理JSON数据 |
FIFO任务 | 该任务是强时序任务,按照先入先出的方式交付给消费者进程处理,并不能保证处理完成时间一致 | |
可重复消费任务 | 可被多个订阅者重复消费 | |
任务属性 | 执行失败是否可以重试,重试多少次后放到重试队列,多少次失败放入失败队列,是否放到对应的重试队列等细节控制参数,任务优先级 | |
通道(channel) | 为任务消费者提供一个通道,多个消费者可以订阅不同的通道重复消费队列中的数据 | 所有队列都有一个默认通道,每一个通道是一份独立的数据拷贝,要求通道需要对队列服务进行单独操作进行创建 |
重试通道 | 指定通道响应失败的数据,允许配置重试 | 重试成功后移除,重试失败后保留在失败通道不再重试 |
失败通道 | 重试超过一定次数,移动到失败通道 | 失败通道的数据可以通过命令行移动到重试通道 |
接口名称 | 说明 | 协议 | 备注 |
---|---|---|---|
添加任务 | 向总线添加任务 | redis:LPUSH | 向队列添加任务 |
删除任务 | 将总线中未执行的某个任务标记为删除 | http/redis:LREM | 删除指定任务 |
修改任务配置 | 修改执行任务对应的配置 | http/redis:HMSET | 如:重试次数,重试间隔,任务执行超时时间 |
队列配置接口 | 修改指定队列对应的配置 | http/redis:HMSET | 如:队列对应的引擎,存储认证信息,消费fastcgi端口 |
队列查询接口 | 查询队列的执行状态 | http/redis:HGETALL | 如:队列长度,对应辅助队列长度,输入QPS,输出QPS,并发数 |
配置参数 | 含义 | 类型 | 备注 |
---|---|---|---|
chunk | 合并多条job传输给消费者 | int | 可以指定一次传输和处理的条数,便于优化使用操作后端资源 |
retryTimes | 重试的次数 | int | 最大重试设置为10 |
retryInterval | 重试间隔 | int | 每条数据的重试间隔 |
waitTimeout | 等待队列响应时长 | int | 数据响应的等待时长,这个waitTimeout要配合chunk使用 |
job数据结构 获取方式: cgi进程通过获取 $SERVER["job"]获取,内容如下: job是抽象给应用层概念,在sdk中有表示,底层透明
字段 | 说明 |
---|---|
jobid | 添加时生成的唯一id |
channel | 来自的channel,默认是default |
content | 透传内容 |