文章 557
评论 5
浏览 215274
SpringBoot 微服务优雅停机失败:K8s 滚动更新丢请求?PreStop 钩子+连接排空机制实战

SpringBoot 微服务优雅停机失败:K8s 滚动更新丢请求?PreStop 钩子+连接排空机制实战

公司 K8s 每次发版都有几个 502。查了监控,规律很明显——总是在旧 Pod 被 kill 的那几秒。原来是 K8s 滚动更新的时候,先发 SIGTERM 给旧 Pod,然后立刻把流量切到新 Pod。但旧 Pod 上还有正在处理的请求——SIGTERM 一来,进程直接退,请求半途而废。前端就 502 了。 Spring Boot 2.3 以后支持优雅停机,但光配 server.shutdown=graceful 还不够。K8s 的流量切换和 Pod 停机之间有时间差——你得让 Pod 在被 kill 之前有足够时间把正在处理的请求跑完。 问题拆解:K8s 发版一分钟内发生了什么 K8s 滚动更新流程: T+0s 新 Pod 创建,等待就绪 T+5s 新 Pod Ready → 加入 Service Endpoint T+5s K8s 发 SIGTERM 给旧 Pod T+5s 旧 Pod 上的请求还在跑 → 但 Service 已经不分配新请求了 T+5s 旧 Pod 收到 SIGTERM → Spring 开始优雅停机 ├─ 不再接受新请求 ├─ 等待正在处理的请求完成(30....

100个微服务100种日志格式:排一次故障要开10个面板,直到统一了

100个微服务100种日志格式:排一次故障要开10个面板,直到统一了

去年我们团队跑了差不多半年微服务,拆分得挺爽——订单、支付、库存、物流、用户中心,每个服务独立开发独立部署。架构图上画得漂漂亮亮。 直到有一次线上故障,把我整破防了。 一个下单请求超时,从网关一路追下去:Gateway → 订单服务 → 库存服务 → 支付服务 → 回调通知。五个服务,五个开发者写的日志,五种不同的格式。 订单服务的日志长这样: 2026-06-15 14:23:11.456 [http-nio-8080-exec-3] INFO c.o.s.OrderService - 订单创建成功,订单号: ORD20260615001 库存服务的日志长这样: [INFO] 2026/06/15 14:23:12.789 - StockServiceImpl: 扣减库存成功 [skuId=SKU8823, qty=1] 支付服务的日志干脆连时间戳格式都不一样: {"level":"info","msg":"支付回调处理完成","tradeNo":"TRD20260615001","time":"2026-06-15T14:23:13.456+08:00"} 我在 Kibana....

微服务架构下 Spring Session 与 Redis 分布式会话实战全解析

微服务架构下 Spring Session 与 Redis 分布式会话实战全解析

作者:服务端技术精选 标签:Spring Boot · Spring Session · Redis · 微服务 难度:中级 前言 你是否遇到过这样的场景: 用户在服务 A 登录成功,跳转到服务 B 时却提示未登录 多个服务部署在不同服务器,用户刷新页面后 Session 丢失 水平扩展后,新增的服务器无法访问用户 Session 单点登录(SSO)需求,需要跨系统共享登录状态 这些问题在单体应用中不存在,但在微服务架构中却是常见痛点。传统的 HTTP Session 存储在服务器内存中,无法在多个服务之间共享。 今天要介绍的「Spring Session + Redis 分布式会话」方案,将彻底解决这个问题——多服务共享会话,水平扩展无障碍。 一、传统会话的痛点 场景重现 你的系统从单体应用拆分为微服务架构: 单体应用: ┌─────────────────────────────────┐ │ Nginx │ │ ┌───────────────────────┐ │ │ │ 单体应用 │ │ │ │ (Session 存在内存) │ │ │ └─────────────....

微服务架构设计的5个黄金法则:从单体到分布式系统的实战经验

微服务架构设计的5个黄金法则:从单体到分布式系统的实战经验

微服务架构设计的5个黄金法则:从单体到分布式系统的实战经验 一、为什么你的微服务架构总是"翻车"? 上周,一位朋友找我吐槽:他们公司花了半年时间,把一个单体应用拆成了20多个微服务,结果系统反而更慢了,部署更复杂了,开发效率也下降了。 更糟糕的是,上线后三天就出了两次生产事故,最后不得不回滚到原来的单体应用。 这样的场景,你是不是也遇到过? 微服务架构确实很香,但为什么很多人一上手就"翻车"? 今天,我想和大家分享5个在实战中总结出来的黄金法则,帮助你避开微服务架构设计的那些坑。 二、黄金法则一:不要为了微服务而微服务 痛点分析 很多团队在技术选型时,看到别人都在搞微服务,觉得自己不搞就落伍了。于是不管三七二十一,先把单体应用拆了再说。 结果呢?拆出来的微服务之间调用链路复杂,数据一致性难以保证,运维成本直线上升。 正确做法 微服务不是目的,而是手段。 在决定是否采用微服务架构之前,先问自己这几个问题: 团队规模:开发团队是否已经大到需要拆分?(通常建议10人以上) 业务复杂度:业务逻辑是否复杂到单体应用难以维护? 部署频率:是否需要不同模块独立部署? 技术异构:是否需要不同模块使用....

SpringBoot + Sentinel + Nacos:微服务熔断、降级、限流一体化防护实战

SpringBoot + Sentinel + Nacos:微服务熔断、降级、限流一体化防护实战

大促活动来了,流量暴涨,系统直接被压垮了?或者某个服务响应慢,导致整个调用链雪崩?再或者第三方服务挂了,结果把你的系统也拖垮了?这就是微服务架构下的防护难题。传统的单体应用防护方式已经无法满足微服务架构的需求。今天我们就来聊聊如何用SpringBoot + Sentinel + Nacos构建一个完整的微服务防护体系,实现熔断、降级、限流一体化防护。

SpringBoot + SkyWalking + Prometheus:微服务全链路监控与性能压测闭环方案

SpringBoot + SkyWalking + Prometheus:微服务全链路监控与性能压测闭环方案

线上系统突然变慢,但不知道是哪个服务出了问题?用户投诉接口响应时间长,但排查起来像大海捞针?服务之间调用关系复杂,出了问题根本不知道从哪开始查? 这就是微服务架构下的监控难题。传统的单体应用监控方式已经无法满足微服务架构的需求。今天我们就来聊聊如何用SpringBoot + SkyWalking + Prometheus构建一个完整的微服务监控体系,实现全链路追踪和性能压测闭环。

从入门到实践:玩转分布式链路追踪利器SkyWalking

从入门到实践:玩转分布式链路追踪利器SkyWalking

相信很多后端同学都遇到过类似的场景:用户投诉响应慢,但查看单个服务日志都正常,问题到底出在哪?在复杂的微服务架构下,一次用户请求可能经过十几个甚至几十个服务,传统的监控手段已经无法满足需求。今天咱们就聊聊,如何用Apache SkyWalking这个分布式链路追踪利器,让你的微服务架构变得"透明"!

服务端开发博客:后端架构、高并发、性能优化与微服务实战教程