智能客户端移交
提示
来自deepseek解释
原文链接:https://redis.io/docs/latest/develop/clients/sch/
智能客户端移交(Smart client handoffs,简称 SCH) 是 Redis Cloud 和 Redis Software 服务器的一项功能,允许它们在计划中的服务器维护即将发生之前主动通知客户端。这使得客户端能够重新连接或以其他方式优雅地响应,而不会造成明显的服务中断。
SCH 主要在需要升级服务器软件或硬件时发挥作用。它提供两个主要功能来帮助客户端在维护期间避免服务中断:
- 宽松超时:升级往往会影响服务器的整体性能。提前通知升级可使客户端调整其命令超时以考虑这一点,避免过早中止命令。
- 预移交:升级还涉及将 Redis 分片迁移到新节点,这不可避免地会断开客户端与现有节点的连接。然而,通过提前获知断开连接的通知,客户端可以缓冲命令、连接到新节点,然后恢复缓冲的命令,而不会中止其中任何一条。结果,用户不会看到服务中断。这种透明的重连到新端点的过程被称为预移交。
SCH 不适用于阻塞连接。这包括用于阻塞操作的连接,如 BLPOP 以及 pub/sub 订阅。所有非阻塞操作均可安全地与 SCH 一起使用。
Redis 客户端库中的 SCH 支持
如果您选择 RESP3 协议(这是 SCH 的要求),则在连接过程中客户端会自动启用 SCH。但是,您可以配置一些参数,例如维护期间使用的超时时间。
下表列出了支持 SCH 的 Redis 客户端库,以及添加了对基本连接和 OSS Cluster API 连接支持的版本。
| 客户端 | 基本连接 | OSS Cluster API | 客户端地理故障转移 |
|---|---|---|---|
| redis-py | v7.0.0 | v7.2.0 | 禁用 |
| node-redis | v5.9.0 | v5.11.0 | 禁用 |
| Lettuce | v7.0.0 | - | 禁用 |
| go-redis | v9.16.0 | v9.18.0 | 禁用 |
当客户端配置了客户端地理故障转移时,SCH 当前被禁用。这两项功能的集成计划在未来的版本中实现。
Redis 服务器产品中的 SCH 支持
Redis Cloud
SCH 在 Redis Cloud 上得到全面支持并默认启用,但以下情况除外:
这些服务目前不支持预移交,但在数据库版本升级期间您仍然可以获得宽松超时的好处。所有其他配置均完全支持宽松超时和预移交。
Redis Software
您必须通过使用 v1/cluster REST API 请求将 client_maint_notifications 选项设置为 true,在自管理的 Redis Software 服务器上显式启用 SCH。下面的示例展示了如何使用 curl 命令行实用程序执行此操作:
curl -k -X PUT -H "accept: application/json" \
-H "content-type: application/json" \
-u "test@redis.com:test123" \
-d '{ "client_maint_notifications": true }' \
https://localhost:9443/v1/clusterRedis Software 使用宽松超时来避免数据库版本升级期间的命令失败。Redis Software 从 v8.0.2 开始支持 SCH,从 v8.0.16 开始支持 OSS Cloud 和 OSS Cluster API。
预移交的支持程度取决于您使用的具体升级方法,如下表所示。
| 升级方法 | SCH 支持 | 预期行为 |
|---|---|---|
| 滚动升级 | 完全 | 依次添加新节点并移除旧节点。SCH 预移交和宽松超时大大减少了升级期间的中断。 |
| 原地升级 | 部分 | 宽松超时可减少错误,但没有预移交。升级期间替换进程时会发生断开连接,因此客户端应依赖自动重连,但这会造成短暂的服务中断。 |
| 维护模式 | 完全 | 在硬件或操作系统修补操作期间完全支持 SCH。预移交和宽松超时可最大程度地减少对应用程序的影响。 |
Redis Enterprise for Kubernetes
Kubernetes 集群目前不支持 SCH。
Redis Open Source
Redis Open Source 目前不支持 SCH。