面试记录 2026-10-11
题目:什么是Dubbo的优雅停机,怎么实现的?
难度:low
标签:spring/dubbo, difficulty/low
评分:⭐⭐⭐☆☆(3/5)
我的回答
它大多是用来做 RPC 调用的,它的优雅停机理论上应该是指在调用时把,在,优雅停机,在停机时把已经在途的请求都处理完成,而不是直接停机。
点评
优点:
- 核心概念说对了:优雅停机 = 处理完在途请求再停机,而不是直接停
- 理解 Dubbo 是 RPC 框架,停机要处理"在途请求"
不足:
- 漏掉了 Dubbo 优雅停机的具体实现三步:摘除服务 → 等待连接关闭 → 关闭服务
- 漏掉了注册中心摘除的具体机制(从 ZK/Nacos 下线)
- 漏掉了 shutdownhook 和 SIGTERM 信号处理
补充:
- Dubbo 优雅停机三步:先从注册中心摘除服务(防止新请求进来)→ 等待已连接的请求处理完成 → 关闭服务
- 通过 shutdownhook 注册 JVM 关闭钩子,捕获 SIGTERM 信号触发停机流程
- 设置等待超时时间(如 30 秒),超时后强制关闭
完整讲解
第一部分:知识重点剖析
核心考点定位:考察微服务框架的优雅停机机制,理解如何避免服务重启导致请求丢失。
知识点拆解:
- 优雅停机的定义:服务停机前,先处理完所有在途请求,再关闭服务,避免请求丢失
- Dubbo 优雅停机三步:
- Step 1:从注册中心摘除服务(ZK/Nacos 下线,防止新请求进来)
- Step 2:等待已连接的请求处理完成(设置超时时间,如 30 秒)
- Step 3:超时后强制关闭服务
- 实现机制:
- JVM shutdownhook 注册关闭钩子
- 捕获 SIGTERM 信号(kill -15)触发停机流程
- Dubbo 内置的优雅停机扩展点
- 常见场景:
- 服务发布/更新(滚动更新)
- 服务器维护
- 容器化部署(K8s Pod 重建)
第二部分:考察方向与延伸递进
考察方向:
- 深度:理解优雅停机的核心机制(摘除 + 等待 + 关闭)
- 广度:关联微服务发布流程、容器化部署、滚动更新
- 应用:能设计服务发布的平滑方案(蓝绿部署、金丝雀发布)
延伸递进面试题:
- Dubbo 优雅停机和 Spring Boot 优雅停机有什么区别?
- 解答要点:Dubbo 侧重 RPC 连接处理,Spring Boot 侧重 HTTP 连接处理
- K8s 中如何实现 Dubbo 服务的优雅停机?
- 解答要点:preStop hook + readinessProbe + shutdownhook 配合
- 优雅停机等待超时了怎么办?
- 解答要点:设置合理的超时时间,超时后强制关闭,配合监控告警
第三部分:面试者参考回答(三步法口语化,300-400 字)
【一句话结论】
面试官您好,Dubbo 优雅停机是停机前先摘除服务、处理完在途请求再关闭,避免请求丢失。
【三点展开】
第一,核心目标是避免请求丢失。服务停机前,先处理完所有在途请求,再关闭服务,而不是直接停。
第二,实现三步走。先从注册中心摘除服务(ZK/Nacos 下线,防止新请求进来),然后等待已连接的请求处理完成(设置超时时间,如 30 秒),最后关闭服务。
第三,通过 JVM shutdownhook 实现。捕获 SIGTERM 信号(kill -15)触发停机流程,Dubbo 内置优雅停机扩展点自动执行三步。
【一句边界】
当然,优雅停机只解决"在途请求"问题,如果请求处理超过超时时间(如 30 秒),会强制关闭,需要配合监控告警和合理的超时设置。