返回主页
Spring Cloud Gateway 路由节点健康检查盲区:实例假在线导致 502?主动探测 + 权重动态剔除!
公司微服务上了 Spring Cloud Gateway,一切正常直到有一天运维发现某个下游服务挂了,Gateway 还是把流量往那台死掉的实例上发,前端一阵 502。查了注册中心,Nacos 上那台实例的状态还是 UP。原来是服务进程虽然活着,但业务线程池被耗尽了,所有请求都在排队超时。Nacos 的心跳包是单独的线程处理的,业务线程池死了不影���心跳,所以注册中心一直认为它是健康的。 这就是"假在线"——健康检查过了不代表服务能用。今天聊聊怎么在 Ga ......
路由节点
健康检查
主动探测
权重动态剔除
| 2026-06-11 0 评论 70 浏览
网关全局请求 ID 生成:日志排查靠猜?X-Request-ID 统一注入 + 全链路透传!
公司线上出了个支付异常,三四个微服务都有日志,但各打各的,谁也不知道哪条日志和哪条日志是同一个请求。运维在 ELK 里翻了一个小时,靠着时间戳和 userId 硬猜,最后猜错了版本,回滚到错误的代码上又出了一波事故。要是每条日志头上都有一个贯穿全链路的请求 ID,一秒就能搜出这个请求的完整轨迹。 X-Request-ID 不是什么新技术,但落地起来细节不少。谁生成、怎么传、下游怎么接、日志怎么打,任何一个环节断了,链路就断了。今天把这些细节串起来。 谁负责 ......
网关
全局请求ID
日志排查
X-Request-ID
| 2026-06-11 0 评论 71 浏览
WebSocket 优雅停机与连接迁移:服务发版用户频繁掉线?平滑过渡 + 状态保持方案!
公司的在线客服系统用的是 WebSocket。每次发版滚动更新,旧 Pod 一停,挂在上面的几千个 WebSocket 连接全断。前端虽然做了自动重连,但重连期间用户发了一条消息,没收到回复,以为客服不理他,直接给了差评。更糟糕的是,客服正在输入的内容也丢了——WebSocket 断了,会话状态没了。 WebSocket 跟 HTTP 不一样。HTTP 是无状态的,请求断了重试一次就好。WebSocket 是长连接,一旦断了,连接上的状态全丢。发版又是必然事 ......
WebSocket
优雅停机
连接迁移
频繁掉线
| 2026-06-10 0 评论 49 浏览
RabbitMQ 消费者内存暴涨防护:未 ACK 消息堆积撑爆 JVM?Prefetch 限制 + 自动降级策略!
隔壁组一个 RabbitMQ 消费者服务,每隔几天就 OOM 重启一次。查了 heap dump,发现 Delivery 对象占了 80% 的堆内存——全是未 ACK 的消息。根因是他们用的是默认的自动 ACK,后来改成了手动 ACK 防止消息丢失,但忘了设 prefetch。RabbitMQ 一股脑把所有消息都推给了 Consumer,Consumer 处理不过来,消息在堆内存里越堆越多,直到撑爆。 RabbitMQ 的 Push 模式有个很容易忽略的坑: ......
RabbitMQ
消费者内存暴涨
消息堆积
Prefetch限制
| 2026-06-10 0 评论 47 浏览
规则执行上下文串号排查:并发请求下变量互相覆盖?ThreadLocal 精准隔离 + 清理钩子!
公司的风控系统出了个诡异的 bug。用户 A 在页面上看到自己被拒绝了,但查日志发现规则里引用的是用户 B 的订单金额。两个人完全不相干,数据却串了。排查了两天,最后定位到 QLExpress 的 DefaultContext 被当成了单例 Bean,所有请求共享同一个 context 对象,并发请求下变量互相覆盖。 这种 bug 的特征很典型——低并发时一切正常,压测或者高峰期才出现,而且数据是"偶尔串"而不是"一直错"。如果你问 QA 能不能复现,他们的 ......
规则执行
并发请求
变量互相覆盖
ThreadLocal
| 2026-06-09 0 评论 49 浏览
RocketMQ Tag/SQL92 过滤实战:客户端拉取无效消息浪费带宽?Broker 端精准过滤,网络开销降 70%!
公司做物流系统,订单状态变更通过 RocketMQ 广播。刚开始只有一个消费者,所有消息照单全收。后来业务拆分,多了十几个微服务各自订阅感兴趣的消息。问题来了——每个服务都从 Broker 拉全量消息,然后自己过滤。一天几千万条消息,每个服务实际需要的不到 10%,90% 拉过来就扔了。内网带宽跑满,消息堆积,消费延迟越来越大。 这个问题特别容易被忽视。因为消息队列用起来太简单了,Producer 发、Consumer 收,中间不用管。但当你有了十几个 Co ......
RocketMQ
过滤实战
Broker
精准过滤
| 2026-06-09 0 评论 65 浏览
QLExpress 规则单元测试框架:上线前自动跑 1000 条用例,拦截逻辑错误!
运营在后台配了一条规则:orderAmount > 10000 && userLevel == 'VIP' 标记为大额订单。配完觉得没问题,直接上线。半小时后客服被用户打爆——所有 VIP 用户的订单都被拦截了,不管金额大小。排查下来发现是规则里多打了个 >,本来应该是 <。就一个字符,损失了几十万。 规则引擎的优点是灵活——运营可以随时改规则,不用开发介入。但灵活的另一面是危险:没有编译器帮你检查,一个手误就上线了。 今天 ......
QLExpress
规则单元测试框架
拦截逻辑错误
| 2026-06-08 0 评论 51 浏览
脚本引擎 Metaspace OOM 防护:动态规则频繁加载导致内存泄漏?ClassLoader 隔离 + 定时回收!
公司有个规则引擎服务,每天运营要更新几百条风控规则。QLExpress 每次执行规则都会编译生成一个匿名类,然后装进 JVM 的 Metaspace。运行了两周之后,服务开始频繁 Full GC,再后来直接 Metaspace OOM 崩了。重启能续命两周,但规则数量只增不减,两周变成十天,十天变成一周,最后每天都得重启。 这个问题在脚本引擎场景下几乎必现。GroovyShell、QLExpress、Aviator,甚至 Nashorn,只要是"动态编译 → ......
脚本引擎
MetaspaceOOM防护
动态规则
内存泄漏
| 2026-06-08 0 评论 56 浏览
令牌桶限流突发流量处理:瞬间峰值超过阈值?预热机制+弹性令牌补充,不误杀正常请求!
朋友公司做秒杀,限流用的是固定窗口计数器——每分钟最多 1000 个请求。每次秒杀开始的瞬间,前 0.5 秒冲进来 800 个请求,计数器直接打满,后面 59.5 秒的正常用户一个都进不来。更要命的是,这个计数器在第 60 秒重置,第 61 秒又是一波 800 个请求冲进来。限流器没有挡住流量洪峰,反而把正常用户拦在了门外。 固定窗口的问题是它不管流量分布。1000 个请求挤在前 5 秒和均匀分布在 60 秒里,对它来说是一样的——反正超了就拒。但业务上, ......
令牌桶
限流
突发流量处理
瞬间峰值
| 2026-06-07 0 评论 54 浏览
数据库连接池泄露检测:连接未归还导致耗尽?HikariCP leakDetectionThreshold 精准定位!
运营说后台管理页面打不开了。查日志,全是 HikariPool-1 - Connection is not available, request timed out after 30000ms。连接池配了 20 个连接,监控显示全部是 active,一个 idle 都没有。等了十分钟也没恢复——不是流量高,是连接被人借走没还。重启能好,但过两天又犯。 连接泄露比内存泄露更难排查。内存泄露至少还有 heap dump 可以分析,连接泄露你只能看到连接池满了,但 ......
数据库
连接池泄露
检测耗尽
HikariCP
| 2026-06-07 0 评论 64 浏览
启动慢排查指南:Bean 初始化耗时 2 分钟?Profile 分析+懒加载优化,提速 50%!
公司一个微服务,启动一次要两分多钟。每次发布都是煎熬——CI/CD 等两分钟,滚动更新每起一个新 Pod 又是两分钟,发个版十分钟起步。他们以为是 Spring Boot 就这样,直到有一天我在控制台加了一行 -Dspring-startup-analyzer,发现有个 Bean 的 @PostConstruct 里竟然在同步加载全量字典数据,光它一个就花了 40 秒。 Spring Boot 启动慢这件事,大多数时候不是你 Bean 太多,而是有几个 Be ......
Bean初始化
启动慢排查
profile
懒加载优化
| 2026-06-06 0 评论 95 浏览
热点 Key 自动发现与本地缓存:Redis 热键打爆?Caffeine 二级缓存+过期抖动防雪崩!
大促的时候,运营在首页挂了一个爆款商品。瞬间几十万用户涌进来,同一个商品详情接口被疯狂调用。Redis 里这个商品的缓存 Key 被打到单节点 QPS 上限,响应时间从 1ms 飙升到 50ms,Redis 线程池打满,带着其他 Key 的请求也一起慢了。一块热铁掉进水里,整锅水都烫了。 这就是典型的热点 Key 问题。一个 Key 太热,把 Redis 单节点打穿了。因为 Redis 是单线程处理命令的,一个慢不会拖累别的,但如果请求量超过这个单节点的处理 ......
热点Key
本地缓存
Redis
Caffeine
| 2026-06-06 0 评论 99 浏览
日志异步落盘阻塞优化:Logback AsyncAppender 队列满丢弃日志?CallerRuns 策略保关键日志!
去年双十一,隔壁组出了个事故。交易系统在高并发的时候偶发超时,运维翻日志找原因,结果发现那个时间段的 ERROR 日志全是空的。排查了一圈才搞明白——Logback 设了 AsyncAppender,队列满了之后,新来的日志直接被丢弃了。问题日志没留下来,复盘都无从下手。 异步日志本来是提升性能的好东西,但如果没搞懂它"队列满了怎么办",关键时刻它会把你最需要的那条日志扔掉。 今天聊聊怎么用好 Logback 的异步日志——既不让日志拖慢业务线程,也不让关 ......
日志异步
阻塞优化
Logback
AsyncAppender
| 2026-06-05 0 评论 87 浏览
Prometheus 指标采集性能损耗:每秒万次采集拖慢应用?采样率调整+Pushgateway 缓冲!
公司在做压测的时候发现一个奇怪的现象:QPS 跑到 8000 的时候,接口响应时间有个规律性的毛刺——每隔 15 秒,P99 延迟就会跳一下,从 50ms 飙到 200ms,持续一两秒又恢复正常。查了半天,根因是 Prometheus 来拉指标了。JVM 要遍历所有指标、序列化成文本、再通过网络发出去,这一整套操作每次都要几十毫秒。平时感觉不到,高并发下就成了定时炸弹。 Prometheus 好用,但它的 Pull 模式有个固有的问题:每次抓取,应用程序都要 ......
Prometheus
指标采集
性能损耗
| 2026-06-05 0 评论 87 浏览
图片压缩质量平衡:WebP 格式兼容性差?自动降级 JPEG + 智能画质调整,体积减半!
上个月产品经理跑过来说,用户反馈有些手机上商品图不显示,全是裂图。我第一反应是 CDN 挂了,查了一圈没问题。后来发现是运营上传了一批 WebP 格式的图片,而部分老款 Android 机和 iOS 14 以下的 Safari 根本不支持 WebP。图片存了,用户看不见,等于没存。 WebP 确实是好东西——同样画质下体积只有 JPEG 的 60% 左右,做图片多的业务能省下一大笔带宽。但兼容性这个坑,处理不好就是事故。 今天聊聊怎么既能吃到 WebP 的红 ......
图片压缩
画质调整
| 2026-06-04 0 评论 78 浏览
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
37
»