1.1 Pulsar是什么
Pulsar是一个分布式发布、订阅(pub-sub)消息的平台,具有非常灵活的消息传递模型以及跨语言的客户端API。Pulsar也是一个集消息传递、消息存储、轻量化函数式计算于一体的流数据平台。Pulsar采用了计算与存储分离的架构,支持云原生、多租户、持久化存储、多机房跨区域数据复制等,具有高一致性、高吞吐、低延时及高可扩展性等流数据存储系统特性。
说到Pulsar就不得不提到BookKeeper了。BookKeeper是从Apache孵化出的一个分布式日志存储系统。2011年BookKeeper作为ZooKeeper的子项目孵化,并在2015年成为Apache的顶级项目。起初,BookKeeper是一个预写日志(Write Ahead Log, WAL)系统,经过几年的发展,BookKeeper的功能日趋完善,可以为Hadoop分布式文件系统(HDFS)的NameNode提供高可用和多副本功能,为日志流服务DistributedLog提供存储支持。BookKeeper也可为消息系统Pulsar提供存储服务。Pulsar通过合理运用BookKeeper的诸多优势,如低延迟写入、读写I/O分离、水平可扩展性等,成为一个可靠的消息队列系统。
2013年雅虎创建了Pulsar,并于2016年将Pulsar捐给了Apache软件基金会。Pulsar在2018年成为Apache的顶级项目[1],并被雅虎日本、腾讯、智联招聘、Bigo、百度等[2]国内外知名公司广泛使用。在实践中,Pulsar解决了企业诸多痛点,下面将通过两个例子进行介绍。
雅虎日本是雅虎和软银合资成立的一家日本互联网公司,其运营的网站是在日本最受欢迎的门户网站之一。雅虎日本的互联网服务在日本市场占主导地位。2019年,雅虎日本就支持100多个应用,并拥有超过150 000台服务器。雅虎日本的多个数据中心使用Pulsar来支持大量内部应用,如内容更新通知、邮寄服务的工作队列、日志管道等[3]。之所以雅虎日本会使用Pulsar,是因为只有高性能、可扩展、稳定的消息队列服务才能满足海量用户的需求,还因为它需要提供多租户功能来满足众多服务的需求。此外,雅虎日本拥有众多数据中心,对跨地域复制有强烈的需求,这也需要Pulsar的支持。
腾讯计费系统(米大师)是孵化于腾讯内部,用于支撑千亿级营收的互联网计费平台,它汇集了国内外主流支付渠道,可提供账户管理、精准营销、安全风控、稽核分账、计费分析等多种服务[4]。该系统承载了公司的每天数亿收入大盘,为来自180多个国家或地区的100多万结算商户、万级业务代码提供服务,托管账户总量超过300亿个,是一个全方位的一站式计费平台[5]。在该系统中,需要通过消息队列提供高一致、高可用的消息通道能力,结合事务状态表最终使各种异常收敛。因此腾讯计费系统对分布式消息队列提出的要求为高一致性、高可用性、海量存储及快速响应。因为Pulsar原生具有高一致性、存储和服务分离架构的扩容友好性,同时支持多种消费模式和多域部署模式,相比Kafka[6]、RocketMQ[7]等消息队列更有优势,所以腾讯技术团队选择基于Pulsar构建腾讯计费系统的消息队列能力。
为了在腾讯计费场景中更好地应用Pulsar,腾讯技术团队对Pulsar做了一些功能优化,如延迟消息和定时重试,并回馈给社区。