Pulsar的存储计算分离设计:全新的消息队列设计思路

Apache Pulsar是一个开源的分布式消息队列产品,最早是由 Yahoo 开发,现在是 Apache 基金会旗下的开源项目。

Pulsar 的架构和其他消息队列有什么不同?

Pulsar 和其他消息队列最大的区别是,它采用了存储计算分离的设计。存储消息的职责从 Broker 中分离出来,交给专门的 BookKeeper 存储集群。这样 Broker 就变成了无状态的节点,在集群调度和故障恢复方面更加简单灵活。

Pulsar的存储计算分离设计:全新的消息队列设计思路_第1张图片

先来看图中右侧的 Bookie 和 ZK 这两个方框,这两个方框分别代表了 BookKeeper 集群和 ZooKeeper 集群,左侧是Brocker集群。

  • ZK集群,用于选举主节点和保存元数据;
  • BookKeeper 存储消息的地方,有点儿类似 HDFS,是一个分布式的存储集群,只不过它的存储单元和 HDFS 不一样,在 HDFS 中存储单元就是文件,这个很好理解。而 BookKeeper 的存储单元是 Ledger;
  • Brocker集群,不存储消息的无状态路由计算节点,Load Balancer 负责动态的分配,哪些 Broker 管理哪些主题分区。Managed Ledger 这个模块负责管理本节点需要用到的那些 Ledger,当然这些 Ledger 都是保存在 BookKeeper 集群中的。为了提升性能,Pulsar 同样采用用了一个 Cache 模块,来缓存一部分 Ledger。

图中的 Global replicators 模块虽然也会复制消息,但是复制的目的是为了在不同的集群之间共享数据,而不是为了保证数据的可靠性。(因为元数据还是保存再zk集群上)

存储计算分离的设计有哪些优点?

存储计算分离是一种设计思想,它将系统的存储职责和计算职责分离开,存储节点只负责数据存储,而计算节点只负责计算,计算节点是无状态的。无状态的计算节点,具有易于开发、调度灵活的优点,故障转移和恢复也更加简单快速。

这种设计的缺点是,系统总体的复杂度更高,性能也更差。

总结

由于技术的不断迭代和发展,现在很多企业的服务都上云了,很多基础服务也都由几个云服务大厂来提供。随着移动用户越来越多,每天产生的数据量也成指数级增加,这给计算和存储分离提供了很大的基础条件。

对于计算节点的开发者来说,可以专注于计算业务逻辑开发,而不需要关注像数据一致性、数据可靠性、故障恢复和数据读写性能等等这些比较麻烦的存储问题,极大地降低了开发难度,提升了开发效率。

而对于存储系统来说,它需要实现的功能就很简单,系统的开发者只需要专注于解决一件事就可以了,那就是“如何安全高效地存储数据?”并且,存储系统的功能是非常稳定的,比如像 ZooKeeper、HDFS、MySQL 这些存储系统,从它们诞生到现在,功能几乎就没有变过。

把两者的能力单独区分开来,也让他们可以在自己的领域更好的发展。

你可能感兴趣的:(大数据,分布式)