searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Apache Pulsar 生产消费限速机制与实现

2023-07-28 02:51:03
193
0

一、背景

Apache Pulsar,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、跨区域复制、具有强一致性、高吞吐、低延迟及高可扩展性等数据存储特性。
当巨量的流量请求短时间内推送过来时,合理的生产消费限速机制,可以避免服务被冲垮,维持系统的稳定性。除此之外,也可以利用生产消费限速机制,指定不同的消息实例规格,满足不同客户的需求。
 

二、机制设计

Apache Pulsar 引入了一个新资源:Resourcegroup,可以灵活地管理 Pulsar 集群下的 Tenant 和 Namespace 的资源分配,从而实现Tenant 和 Namespace 级别的限速。

2.1 Resourcegroup

Resourcegroup主要包含以下4个属性:
  1. byte-publish-rate:基于Byte的生产速率限制
  2. msg-publish-rate:基于消息数的生产速率限制
  3. byte-dispatch-rate:基于Byte的消费速率限制
  4. msg-dispatch-rate:基于消息数的消费速率限制
默认情况下不进行修改的值都是不作限制的,只有创建或更新 Resourcegroup 内的相应指标为具体数值时才会执行相应的限制策略。
Resourcegroup 实现的限速有以下特点:
  1. 非严格限制速率,短时间内允许存在波动。
  2. 限速存在tenant、namespace、topic多个层级,但不允许多个层级同时设置限速以实现分层限速逻辑
  3. 在一个层级的限速,并不影响下一层级的流量分配
  4. 限速无法跨集群

2.2 限速实现

首先,Apache Pulsar 建立一个非持久化主题,名为:non-persistent://pulsar/system/resource-usage,每个Broker会定期将自身的流量配额情况上报到该主题,从而实现相互通信。接着,每一个Broker在启动时,会启动一个ResourceGroupService,该服务主要是定期执行两个任务,分别是aggreagteLocalUsagePeriodicTask 和 calculateQuotaPeriodicTask,aggreagteLocalUsagePeriodicTask负责定期聚合所有已知 Broker的流量使用情况,calculateQuotaPeriodicTask则是负责定期计算所有 ResourceGroup 的流量配额。
当客户端发送生产或消费请求时,服务端对应的ResourceGroup就会创建一个 RateLimiter,RateLimiter会进行一个判断,如果流量还未达到限速,就可以通过 API 读写 BookKeeper 内数据,如果达到了限速就返回,直到下一个限速周期的到来。具体的流程可以参考如下:
0条评论
0 / 1000
f****n
3文章数
0粉丝数
f****n
3 文章 | 0 粉丝
f****n
3文章数
0粉丝数
f****n
3 文章 | 0 粉丝
原创

Apache Pulsar 生产消费限速机制与实现

2023-07-28 02:51:03
193
0

一、背景

Apache Pulsar,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、跨区域复制、具有强一致性、高吞吐、低延迟及高可扩展性等数据存储特性。
当巨量的流量请求短时间内推送过来时,合理的生产消费限速机制,可以避免服务被冲垮,维持系统的稳定性。除此之外,也可以利用生产消费限速机制,指定不同的消息实例规格,满足不同客户的需求。
 

二、机制设计

Apache Pulsar 引入了一个新资源:Resourcegroup,可以灵活地管理 Pulsar 集群下的 Tenant 和 Namespace 的资源分配,从而实现Tenant 和 Namespace 级别的限速。

2.1 Resourcegroup

Resourcegroup主要包含以下4个属性:
  1. byte-publish-rate:基于Byte的生产速率限制
  2. msg-publish-rate:基于消息数的生产速率限制
  3. byte-dispatch-rate:基于Byte的消费速率限制
  4. msg-dispatch-rate:基于消息数的消费速率限制
默认情况下不进行修改的值都是不作限制的,只有创建或更新 Resourcegroup 内的相应指标为具体数值时才会执行相应的限制策略。
Resourcegroup 实现的限速有以下特点:
  1. 非严格限制速率,短时间内允许存在波动。
  2. 限速存在tenant、namespace、topic多个层级,但不允许多个层级同时设置限速以实现分层限速逻辑
  3. 在一个层级的限速,并不影响下一层级的流量分配
  4. 限速无法跨集群

2.2 限速实现

首先,Apache Pulsar 建立一个非持久化主题,名为:non-persistent://pulsar/system/resource-usage,每个Broker会定期将自身的流量配额情况上报到该主题,从而实现相互通信。接着,每一个Broker在启动时,会启动一个ResourceGroupService,该服务主要是定期执行两个任务,分别是aggreagteLocalUsagePeriodicTask 和 calculateQuotaPeriodicTask,aggreagteLocalUsagePeriodicTask负责定期聚合所有已知 Broker的流量使用情况,calculateQuotaPeriodicTask则是负责定期计算所有 ResourceGroup 的流量配额。
当客户端发送生产或消费请求时,服务端对应的ResourceGroup就会创建一个 RateLimiter,RateLimiter会进行一个判断,如果流量还未达到限速,就可以通过 API 读写 BookKeeper 内数据,如果达到了限速就返回,直到下一个限速周期的到来。具体的流程可以参考如下:
文章来自个人专栏
云原生消息
3 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0