查看原文
其他

【新开源报道 3】微信后台团队最近开源力作:PhxQueue分布式队列

2017-09-13 开源最前线

开源最前线(ID:OpenSourceTop) 猿妹 整编

综合自:微信后台团队


本期是新开源报道第 3 期,本期我们要报道的新开源软件 PhxQueue


今日,微信后台团队又一力作开源——PhxQueue。PhxQueue 是一个基于Paxos协议的分布式队列,目前已经在微信内部广泛支持微信支付、公众平台等多个重要业务。

分布式队列 PhxQueue


授权协议:BSD

开发语言:C/C++

操作系统:跨平台

开发厂商:腾讯

Github:https://github.com/Tencent/phxqueue  


PhxQueue 介绍



PhxQueue 目前在微信内部广泛支持微信支付、公众平台等多个重要业务,日均入队达千亿,分钟入队峰值达一亿。其设计出发点是高数据可靠性,且不失高可用和高吞吐,同时支持多种常见队列特性。


PhxQueue 特性


● PhxQueue特性

● 同步刷盘,入队数据绝对不丢,自带内部实时对账

● 出入队严格有序

● 多订阅

● 出队限速

● 出队重放

● 所有模块均可平行扩展

● 存储层批量刷盘、同步,保证高吞吐

● 存储层支持同城多中心部署

● 存储层自动容灾/接入均衡

● 消费者自动容灾/负载均衡


PhxQueue 架构


整体架构




PhxQueue 由下列5个模块组成:


① Store - 队列存储


Store 作为队列存储,引入了 PhxPaxos 库,以 Paxos 协议作副本同步。只要多数派节点正常工作及互联,即可提供线性一致性读写服务。


为了提高数据可靠性,同步刷盘作为默认开启特性,且性能不亚于异步刷盘。


在可用性方面,Store 内有多个独立的 paxos group,每个 paxos group 仅 master 提供读写服务,平时 master 动态均匀分布在 Store 内各节点,均衡接入压力,节点出灾时自动切换 master 到其它可用节点。


② Producer - 生产者


Producer 作为消息生产者,根据 key 决定消息存储路由。相同 key 的消息默认路由到同一个队列中,保证出队顺序与入队顺序一致。


③ Consumer - 消费者


Consumer 作为消费者,以批量拉取的方式从 Store 拉消息,支持多协程方式批量处理消息。


Consumer 以服务框架的形式提供服务,使用者以实现回调的方式,根据不同主题(Topic),不同处理类型(Handler)定义具体的消息处理逻辑。


④ Scheduler - 消费者管理器(可选择部署)


Scheduler 的作用是,收集 Consumer 全局负载信息, 对 Consumer 做容灾和负载均衡。当使用者没有这方面的需求时,可以省略部署 Scheduler,此时各 Consumer 根据配置权重决定与队列的处理关系。


部署 Scheduler 后,Scheduler leader 与所有 Conusmer 维持心跳,在收集 Consumer 的负载信息的同时,反向调整 Consumer 与队列的处理关系。


当 Scheduler leader 宕机了后,Scheduler 依赖下述分布式锁服务选举出新 leader,不可用期间仅影响 Consumer 的容灾和负载均衡,不影响 Consumer 的正常消费。


⑤ Lock - 分布式锁(可选择部署)


Lock 是一个分布式锁,其接口设计非常通用化,使用者可以选择将 Lock 独立部署,提供通用分布式锁服务。Lock 在 PhxQueue 中的作用有如下两点:

● 为 Scheduler 选举 leader;

● 防止多个 Consumer 同时处理一条队列。


Lock 同样也是可选择部署的模块:若部署了 Scheduler,就必须部署 Lock 为 Scheduler 选举出 leader;否则,若业务对重复消费不敏感,可选择不部署 Lock


小结


PhxQueue 在存储层做了很多的努力:实现了 master 自动切换,且仍然保证线性一致,切换期间仍然高可用;保证了同步刷盘的吞吐,其性能不亚于异步刷盘。另外实现了大部分队列实用特性,例如出入队顺序一致、多订阅、限速、消息重放等,适用于各种业务场景。


目前 PhxQueue 已在微信内部大规模使用,也正式开源。微信官方表示将保持 PhxQueue 开源版本与内部版本的一致,欢迎读者试用并反馈意见。


附:新开源报道汇总

《【新开源报道 2】喜大普奔!阿里即将开源 ApsaraCache,云数据库 Redis 版分支

【新开源报道 1】腾讯 Web UI 解决方案 QMUI Web 正式回迁开源



●本文编号28,以后想阅读这篇文章直接输入28即可

●输入m获取文章目录


↓↓↓ 点击"阅读原文" 进入GitHub详情页  

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存