当前位置: 首页 > news >正文

摘流(Traffic Draining)介绍(在服务实例下线前,先停止接收新的请求,但继续处理已在进行中请求,直到处理完成或超时,然后安全退出)preStop、readinessProbe

文章目录

  • 一文讲透「摘流」:优雅下线服务的关键能力
    • 一、什么是摘流?
    • 二、为什么需要摘流?
      • 1️⃣ 请求中断
      • 2️⃣ 数据不一致
      • 3️⃣ 上游重试风暴
    • 三、摘流的核心流程
    • 四、Kubernetes 中的摘流机制
      • 1️⃣ `readinessProbe` —— 摘流的开关
      • 2️⃣ `preStop hook` —— 主动触发摘流
      • 3️⃣ `terminationGracePeriodSeconds` —— 等待时间
      • 4️⃣ 完整时间线
    • 五、摘流 vs 熔断 vs 限流
    • 六、生产最佳实践
      • ✅ 1. readinessProbe 必须可控
      • ✅ 2. preStop 必须存在
      • ✅ 3. 网关/负载均衡要配合
      • ✅ 4. 长请求要特别处理
      • ✅ 5. 监控摘流效果
    • 七、一个典型配置示例
    • 八、总结

一文讲透「摘流」:优雅下线服务的关键能力

在微服务与云原生架构中,服务的优雅关闭(Graceful Shutdown)是稳定性设计的重要一环。而“摘流”,正是实现这一能力的核心手段之一。

很多系统在发布、扩缩容或故障处理时,如果没有做好摘流,就可能出现请求丢失、用户报错、数据不一致等问题。本文将系统讲解什么是摘流、为什么需要它、以及在 K8s 中如何落地。


一、什么是摘流?

摘流(Draining / Traffic Draining)指的是:

在服务实例下线前,先停止接收新的请求,但继续处理已在进行中的请求,直到处理完成或超时,然后再安全退出。

可以理解为一个“缓冲阶段”:

  • ❌ 不再接新流量
  • ✅ 把手头的活干完
  • ✅ 再优雅退出

二、为什么需要摘流?

如果没有摘流,服务直接被杀掉(例如 Pod 被删除),会出现:

1️⃣ 请求中断

用户请求处理中,Pod 突然退出:

  • HTTP 502 / 504
  • 连接 reset
  • 用户体验极差

2️⃣ 数据不一致

典型场景:

  • 订单写一半
  • 消息消费未确认
  • 分布式事务中断

3️⃣ 上游重试风暴

服务异常退出会导致:

  • 网关 / 客户端重试
  • 瞬时流量放大
  • 雪崩风险

👉 摘流的本质,是把“硬切”变成“软切”


三、摘流的核心流程

一个完整的摘流过程通常如下:

1. 标记实例为不可接收新流量 2. 从负载均衡 / 网关摘除 3. 等待已有请求处理完成 4. 超时兜底(强制退出)

在实际系统中,这个流程通常涉及:

  • API Gateway(如 Kong / Nginx)
  • Service Mesh(如 Istio)
  • Kubernetes Service / Endpoint
  • 应用自身逻辑

四、Kubernetes 中的摘流机制

1️⃣readinessProbe—— 摘流的开关

readinessProbe:httpGet:path:/healthz/ready

👉 核心作用:

  • 控制 Pod 是否接收流量

  • 当返回失败时:

    • Pod 会从 Service Endpoint 移除
    • 不再接收新请求

📌摘流关键点:
在下线时,让 readiness 变为失败,即可触发摘流。


2️⃣preStop hook—— 主动触发摘流

preStop:exec:command:["sleep","5"]

作用:

  1. Pod 即将终止时触发
  2. 给系统一个“缓冲时间”

典型流程:

preStop 开始 ↓ readiness = false(摘流) ↓ 等待负载均衡生效(如 Kong 同步) ↓ sleep 5s

👉 示例:

等待 Kong 摘流后再开始关闭


3️⃣terminationGracePeriodSeconds—— 等待时间

terminationGracePeriodSeconds:30

作用:

  • 给 Pod 足够时间完成:

    • 摘流
    • 请求处理
    • 资源释放

推荐:

  • ≥ 30 秒

4️⃣ 完整时间线

结合以上配置,一个 Pod 的摘流流程如下:

kubectl delete pod ↓ 触发 preStop hook ↓ readinessProbe 失败(停止接流量) ↓ K8s / 网关更新路由(摘流) ↓ 等待已有请求完成 ↓ 到达 terminationGracePeriodSeconds ↓ 进程退出

五、摘流 vs 熔断 vs 限流

很多人容易混淆这几个概念:

概念作用场景
摘流下线实例时停止接新请求发布 / 缩容
限流控制请求速率高并发保护
熔断失败时快速失败依赖异常

👉 一句话总结:

  • 摘流:我不想再接请求了
  • 限流:我接不过来了
  • 熔断:我已经坏了

六、生产最佳实践

✅ 1. readinessProbe 必须可控

建议:

  • 支持“主动降为不健康”

  • 例如:

    • 接收到 SIGTERM 后返回 503

✅ 2. preStop 必须存在

否则:

  • Pod 直接被杀
  • 摘流来不及传播

✅ 3. 网关/负载均衡要配合

例如:

  • Kong / Nginx / Envoy
  • Service Mesh(Istio)

要确保:

  • Endpoint 变化能及时同步

✅ 4. 长请求要特别处理

例如:

  • WebSocket
  • 大文件上传
  • 流式接口

策略:

  • 设置最大处理时间
  • 超时兜底

✅ 5. 监控摘流效果

关注指标:

  • in-flight requests(正在处理请求数)
  • 5xx 错误率
  • 请求中断数

七、一个典型配置示例

spec:terminationGracePeriodSeconds:30containers:-name:appreadinessProbe:httpGet:path:/healthz/readyport:8080initialDelaySeconds:15periodSeconds:5livenessProbe:httpGet:path:/healthz/liveport:8080lifecycle:preStop:exec:command:["sleep","5"]

八、总结

摘流不是一个“可选优化”,而是:

生产级系统的基础能力

它解决的是:

  • 发布不中断
  • 扩缩容无感知
  • 故障可控

一句话总结:

摘流 = 优雅拒绝新请求 + 安全处理旧请求


如果你在做:

  • Kubernetes 运维
  • 微服务治理
  • API 网关(如 Kong)
  • Service Mesh

那摘流是必须掌握的核心能力之一。

http://www.jsqmd.com/news/736231/

相关文章:

  • 从代码到产品:工程师如何系统培养设计品味提升开发质量
  • 2026川渝地区黄砂岩厂家权威名录:自贡石材厂家、自贡花岗石厂家、芝麻灰花岗石厂家、芝麻白花岗石厂家、芝麻黑花岗石厂家选择指南 - 优质品牌商家
  • PINN不止一种用法:从Self-adaptive到Bayesian,5种变体帮你搞定不同难题
  • 印刷企业管理系统技术演进与数智化落地深度解析:印刷报价系统/印刷报价软件/印刷生产管理软件/印刷行业软件/报价ERP系统/选择指南 - 优质品牌商家
  • 告别手动排版!这款免费卡牌批量生成工具让你的桌游设计效率提升300%
  • 微软RAG-Time项目解析:构建生产级检索增强生成应用的最佳实践
  • 为什么三甲医院IT科连夜禁用旧版VSCode?揭秘2026.1.3合规引擎强制启用的4层签名链:代码→提交→构建→部署全链路不可篡改审计
  • AI也迎来“高考”,机器人领域不断突破,AI应用发展持续推进
  • SpringBoot 日志分组
  • wechatapi iPad协议:私域批量操作的唯一解
  • GitHub开源项目进度追踪插件:自动化进度条与看板集成实战
  • LLM微调实战:使用LLM-Finetuning-Toolkit高效微调Mistral-7B模型
  • 告别逐帧标注!用SAM+TAM零代码搞定视频多目标跟踪与分割(保姆级实战)
  • EdgeRemover:彻底告别Microsoft Edge的3种专业方案
  • 第2篇:应付百万并发商品系统之需求文档
  • 从同步阻塞到毫秒级响应:PHP 9.0 + Swoole 5.1 + LangChain-PHP构建企业级AI助手,7步完成生产就绪配置
  • RK3568项目实战:用4G模块打造你的户外物联网网关(ECM模式真香)
  • 保姆级教程:在Ubuntu 20.04上用TensorFlow 2.6和RTX 2080Ti复现RandLA-Net(SemanticKITTI数据集)
  • 轻量级爬虫框架easyclaw:快速上手与实战指南
  • ch32v003记录2,串口通信例程
  • 不止是改密码:深度挖掘麒麟KYLINOS恢复模式的隐藏玩法与安全边界
  • 多智能体系统性能优化:架构选择与错误控制策略
  • 离散扩散模型原理与Duo++优化实践
  • CF1666E 题解
  • 《文字定律》下册第三篇 (走向三级文明的人和AI)
  • 猫抓浏览器插件终极指南:高效嗅探网页视频音频资源的免费开源工具
  • MECOOL KP1智能投影仪评测:Android TV与1080P画质体验
  • EASY-HWID-SPOOFER:3大核心技术深度解析与实战指南
  • 还在吃预制菜的年轻人,被硬生生地逼成了宠物营养师
  • VMware Workstation 17保姆级教程:手把手教你安装Ubuntu 22.04.3 LTS服务器版(含SSH配置与Root登录)