# @clickup/distributed-pacer 中文文档

规范地址：https://npmcn.com/package/%40clickup/distributed-pacer/

版本：2\.10\.296
npm 元数据更新时间：2026-10-14T03:51:40.421Z
中文译文更新时间：2026-11-10T01:40:06.338Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40clickup/distributed-pacer
原文对照：https://npmcn.com/package/%40clickup/distributed-pacer/?lang=original
项目主页：https://github.com/clickup/distributed-pacer#readme
源码仓库：https://github.com/clickup/distributed-pacer

弃用说明：This package is no longer maintained

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：101 kB，60 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：3 个
- 首次发布：2024-08-24T01:23:42.356Z
- 最新版本发布：2024-08-24T01:23:42.605Z
- 近 30 天下载量：5259（2026-10-10 至 2026-11-08，npm 官方下载统计）
- 已发布版本数：1（近 12 个月 0 个）

## 中文简介

一个货币意识的 Redis 后置的速率限制器 带有相差延迟的预测和Token Bucket 突起处理 .

## 安装

```sh
npm install @clickup/distributed-pacer
```

也可以使用：`pnpm add @clickup/distributed-pacer`、`yarn add @clickup/distributed-pacer`、`bun add @clickup/distributed-pacer`

## README

# 分布- 间隔 : 一种货币意识 Redis 后置的速率限制器, 并预导速度延迟和 Token Bucket 暴发处理

另见 [完整的 API 文档](https://github.com/clickup/distributed-pacer/blob/master/docs/modules.md)。 。 。 .

![CI run](https://github.com/clickup/distributed-pacer/actions/workflows/ci.yml/badge.svg?branch=main)

## 静坐

安置控制同时客户执行某些业务的速度。 这个 引入客户请求之间的故意拖延。 速度的首要目标 确保业务率(如发出请求)不 超过一定阈值(如QPS-"每秒清点").

使用大小写 :

-   **外出请求.** Pacing 通常被客户用来管理费率 他们向规定费率限额的外部服务发送请求.
-   **装入管理.** 在外部服务可能存在的情况下 对交通突飞猛进的敏感度, 速度有助于分配负载 更平均的时间.

通知“距离”一词通常用于从 客户端(在不丢弃的情况下减缓请求流量),而“速率” 限制”是用于服务器上收到的请求(拒绝不符合同 页:1.

### 平稳使用示例

```ts
import { DistributedPacer } from "@clickup/distributed-pacer";
import { Redis } from "ioredis";
import { setTimeout } from "timers/promises";

const myIoRedis = new Redis();

async function mySendApiRequest() {
  // sends an API request somewhere
}

async function myWorkerRunningOnMultipleMachines() {
  while (true) {
    const lightweightPacer = new DistributedPacer(myIoRedis, {
      key: "myKey",
      qps: 10,
      maxBurst: 1, // optional
      burstAllowanceFactor: 0.5, // optional
    });
    const outcome = await lightweightPacer.pace(1 /* weight */);

    console.log(outcome.reason);
    await setTimeout(outcome.delayMs);

    await mySendApiRequest();
  }
}
```

### 如何运作

`DistributedPacer` 分散一些同时工作的工人或 将进程统一到未来,以满足期望的下游QPS 没错 执行的灵感来自Leeky Bucket 腾讯算法.

一般用例是在发送时引入一些人工后压 请求外部服务,以避免其超载,例如:

-   将发出的请求发送到一些外部API,以达到其费率限制 .
-   保护当地数据库不与同时撰写的文字重叠 多个工人.

想象一下我们有一个时间机器, 我们可以发送请求(事件)到准确的 提供了未来时间的时刻。 为了向未来发出请求 Redis的Lua脚本 返回那一刻的时间戳, 然后工人需要 以调用延迟( ) 以唤醒此时 。 我们也储存了最后一刻 未来到我们先前发出请求的地方,所以下一个请求将出现(如果它们 将越来越远.

另一个类比是在日历中预定一次会议。 当新的请求 到了,它不是立即执行,而是排在日历上 根据QPS津贴.

因此,在返回之后 `delayMs` 请求将在 上次请求后最少1分/ QPS; 因此, 它将满足目标 QPS (英语). 此外,如果过去在1分/QPS秒以内没有请求,则 现在,那么 `delayMs` 返回的将是 0.

### 粪便津贴

想象一下,每个呼叫 `pace(weight)` 添加 `weight` 将水倒入桶中 `maxBurst` 音量,每秒, `1/qps*burstAllowanceFactor` 漏水情况 出桶以恒速出(但取出起搏器闲置时才出出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出桶出. 在桶上没有关于未来的请求。 如果 桶尚未满( 其水印在下方) `maxBurst` 级别),然后是 已返回 `delayMs` 将会是0, 这样工人就可以继续 请求 马上 否则,速度就会开始出现。 也就是说,我们只有速度 导致桶子溢出的请求( Leaky Bucket 算法).

默认值为 `burstAllowanceFactor` 少于1,这迫使 暴发的津贴所得略慢于目标QPS.

## 限制费率

虽然间距是本模块的主要使用例,但它也支持"速率" 限制”模式,其中预期超过配额的请求将被拒绝 (而不是被拖延). 这对处理有用 _收到_ 请求 服务器(与请求的间距相反) _来源_ (从工人那里).

用于 `DistributedPacer` 在速率限制模式中,呼叫 `rateLimit()` 方法打开 这个 逻辑上,它的工作方式与 `pace()`但是当它返回时 非零 `delayMs`它不会改变雷迪斯的状态,假设 请求会被拒绝,不会对 `maxBurst` 津贴.

利用Leaky Bucket算法的功率(或与此相对应的) Bucket),将一个非零值传递到 `maxBurst`。带有默认值(即 0),不允许突袭,因此请求需要不减入 比起来 `1/qps` 中间数秒.

### 限速使用示例

免责声明:这里,我们只用快递作为示例:显然有一个 用于 Express 速率限制使用大小写的准备中软件模块。 使用 `DistributedPacer` 其他应用程序,如GraphQL处理、WebSockets, 内部IO服务等.

```ts
import { DistributedPacer } from "@clickup/distributed-pacer";
import { Redis } from "ioredis";
import express from "express";

const myIoRedis = new Redis();

express()
  .get('/', (req, res) => {
    const lightweightPacer = new DistributedPacer(myIoRedis, {
      key: "myKey",
      qps: 10,
      maxBurst: 20,
    });
    const outcome = await lightweightPacer.rateLimit(1 /* weight */);

    if (outcome.delay > 0) {
      console.log(outcome.reason);
      res.status(429).send(`Rate limited, try again in ${outcome.delay} ms.`);
    } else {
      res.send("Hello World!")
    }
  })
  .listen(port);
```

## 业绩

这个模块很便宜,可以在您的应用中被放入关键路径.

`DistributedPacer` 对象轻而易举,所以可以经常创建 您想要的(即使是每个请求).

每次打给 `pace()` 或者说 `rateLimit()` 给 Redis 造成一次往返( 它运行 a) 自定义Lua函数),而该调用的时间是O(1).

如果您需要使用多个密钥, 您可以使用组合模式中的 Redis 来扩展 这些密钥跨越多个 Redis 节点( 通过实例 `Redis.Cluster` 改为 `DistributedPacer` 建筑师).

## 常见问题

### @clickup/distributed-pacer 是什么？

一个货币意识的 Redis 后置的速率限制器 带有相差延迟的预测和Token Bucket 突起处理 \.注意：该包已被作者标记为弃用——This package is no longer maintained

### 如何安装 @clickup/distributed-pacer？

在项目目录运行 npm install @clickup/distributed-pacer，或使用 pnpm add / yarn add / bun add。

### @clickup/distributed-pacer 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @clickup/distributed-pacer 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @clickup/distributed-pacer 可以商用吗？

@clickup/distributed-pacer 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @clickup/distributed-pacer 的下载量有多少？

根据 npm 官方下载统计，@clickup/distributed-pacer 在 2026/10/10 – 2026/11/08 这 30 天内被下载 5,259 次，日均约 175 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @clickup/distributed-pacer 还在维护吗？

最新版本 2\.10\.296 发布于 2024/08/24（2 年前）；至今共发布 1 个版本，其中过去 12 个月发布了 0 个；首次发布于 2024/08/24。作者已将其标记为弃用，新项目建议寻找替代方案。

