服务超时之后如何做兜底
这篇按踩坑笔记来写,因为 服务超时之后如何做兜底 我现在更容易记住“错在哪”,而不是“定义长什么样”。 先记住这句话兜底要明确返回的是降级结果,而不是假装成功。 很多问题不是不会用,而是用得太顺手了,顺手到把边界条件给省掉了。 这类问题一般怎么出现我脑子里会先放这个场景:给用户画像接口加缓存兜底。 一开始看着都像是个小问题,真正麻烦的是它往往不是立刻报错,而是跑一阵子、数据一多、并发一上来才暴露。 这次我想盯住的坑 读接口可返回缓...
日志链路 ID 帮我少走了多少弯路
这篇我想按“排查记录”来写,主题是 日志链路 ID 帮我少走了多少弯路。这种写法比纯概念文更适合我自己回看。 现象先别急着解释链路 ID 让一次请求在多层日志中能被串起来。 先把现象钉住,比急着下结论有用。很多时候真正的关键不是“答案是什么”,而是“我是怎么一步步排到这里的”。 我会先看哪几件事 入口生成 traceId 跨服务透传 header 异步任务要手动带上下文 带入一个排查场景用过滤器和 MDC 给接口日志加 trac...
网关层应该承担哪些职责
今天不想写长文,先把 网关层应该承担哪些职责 这块拆成几条短一点的问答。面试里经常会被连续追问,如果只背一句定义,第二问基本就卡住了。 先说我自己的结论网关适合处理跨服务的入口能力,不适合写业务细节。 我现在会先把这类题分成“定义是什么、为什么这样设计、代码里怎么用、容易翻车在哪”四层去答。这样比死背一段话稳很多。 快问快答 统一认证。我现在的理解:先记结论,再回到代码里找一个能验证它的场景。 路由转发。我现在的理解:先记结论,再...
OpenFeign 调用失败怎么排查
这篇按踩坑笔记来写,因为 OpenFeign 调用失败怎么排查 我现在更容易记住“错在哪”,而不是“定义长什么样”。 先记住这句话远程调用失败要从网络、序列化、超时和下游错误分层排查。 很多问题不是不会用,而是用得太顺手了,顺手到把边界条件给省掉了。 这类问题一般怎么出现我脑子里会先放这个场景:模拟库存服务超时并给订单服务加降级。 一开始看着都像是个小问题,真正麻烦的是它往往不是立刻报错,而是跑一阵子、数据一多、并发一上来才暴露。...
Sentinel 限流降级入门实践
这篇我想按“排查记录”来写,主题是 Sentinel 限流降级入门实践。这种写法比纯概念文更适合我自己回看。 现象先别急着解释用规则把流量控制从业务代码中抽离出来。 先把现象钉住,比急着下结论有用。很多时候真正的关键不是“答案是什么”,而是“我是怎么一步步排到这里的”。 我会先看哪几件事 资源名要稳定 降级返回要符合业务语义 规则变更要可观察 带入一个排查场景给商品查询接口加一个简单限流规则。 如果这是线上问题,我通常会先保留日...
限流是在保护系统还是保护用户体验
这篇按踩坑笔记来写,因为 限流是在保护系统还是保护用户体验 我现在更容易记住“错在哪”,而不是“定义长什么样”。 先记住这句话限流不是拒绝用户,而是在过载时保持核心功能可用。 很多问题不是不会用,而是用得太顺手了,顺手到把边界条件给省掉了。 这类问题一般怎么出现我脑子里会先放这个场景:给短信验证码接口设计用户维度限流。 一开始看着都像是个小问题,真正麻烦的是它往往不是立刻报错,而是跑一阵子、数据一多、并发一上来才暴露。 这次我想盯...
接口幂等设计的几种方案
今天不想写长文,先把 接口幂等设计的几种方案 这块拆成几条短一点的问答。面试里经常会被连续追问,如果只背一句定义,第二问基本就卡住了。 先说我自己的结论幂等的目标是同一请求多次执行结果可控。 我现在会先把这类题分成“定义是什么、为什么这样设计、代码里怎么用、容易翻车在哪”四层去答。这样比死背一段话稳很多。 快问快答 天然幂等可以靠状态判断。我现在的理解:先记结论,再回到代码里找一个能验证它的场景。 提交类接口可用请求号。我现在的理...
消息重试、死信队列和人工补偿
今天把 消息重试、死信队列和人工补偿 补成一篇正常一点的学习笔记,不写大而全,就记我这轮最想吃透的部分。 一句话先立住失败处理要分清临时失败和永久失败。 我这次真正记住的点 网络抖动适合重试 参数错误不该无限重试 死信消息要能告警和回放 为什么我会专门记这块因为它很容易出现一种错觉:看资料的时候觉得自己会了,真到写接口、改 SQL、配事务、看线程池参数时又开始发虚。 我现在尽量把知识点挂到一个具体场景上:设计优惠券发放失败后的死...