老废物乐园

技术债治理:如何在版本迭代中偿还债务

复盘:一次被迫停更的迭代 四月那次版本上线前夜,我盯着依赖图发呆——一个订单核心模块被 27 个地方引用,改一处要回归 40 个用例,测试同学直接摆烂说「这版先别动它」。这不是第一个被技术债拖住的需求。入行第六年,我越来越觉得,技术债不是写烂代码,是「明知该改但一直没改」的累积。 债务识别:先把账算

Administrator Administrator 发布于 2023-04-20

系统容量评估与水位管理

一次没顶住的流量 去年大促,预估峰值 8000 QPS,实际来了 1.4 万,订单服务被打挂 12 分钟。复盘发现:我们的容量评估靠的是"去年×2"的拍脑袋,没有真实压测支撑,对系统的真实拐点一无所知。那天凌晨告警炸了,扩容来不及,限流没配,全靠手动重启扛,资损不小。这次我把容量评估正经做了一遍,把

Administrator Administrator 发布于 2023-02-17

一次系统重构:从 3000 行 Service 到清晰分层

那个 3000 行的 Service 接手交易核心模块时,OrderService.java 有 3128 行,下了 47 个 @Autowired 的 DAO 和远程 client。任何一处改动我都得屏住呼吸。上周一个改下单幂等的小需求,回归测试就跑了三轮,改动 8 行、提心吊胆一整天。更糟的是,

Administrator Administrator 发布于 2022-10-24

DDD 聚合设计实战:从订单系统说起

订单系统重构:一个"订单"对象膨胀到了 3000 行 我们老订单系统里有个 Order 类,承载了下单、改地址、退款、发票、物流查询……所有逻辑,文件 3000 多行,改一处怕动全身。重构时我用 DDD 的聚合(Aggregate)思想重新切分,核心问题其实就一个:聚合边界划在哪。划错了,要么事务跨

Administrator Administrator 发布于 2022-09-29

高并发秒杀系统的设计要点

面试官问:100 万人抢 1000 件商品怎么设计 前阵子做架构分享,被同事用一道经典题考住:"100 万并发抢 1000 件商品,怎么保证不超卖、系统还不挂?"这题看着老,但真要落地,每一层都有坑。我把我们实际做过的秒杀系统的设计要点拆开讲——不是教科书,是踩过坑的版本。 要点一:库存扣减,必须原

Administrator Administrator 发布于 2022-08-29

领域事件与事件溯源实践

对账发现:账户余额和流水对不上 3 分钱 做交易系统最怕"状态对不上"。我们有个积分账户服务,某天对账脚本报:用户 A 的余额是 1200,但流水累加只有 1199.97。差 3 分钱,谁也说不清是哪笔操作漏了。传统的"改余额 + 插流水"两条写,因为中途异常出现过不一致。痛定思痛,我把核心域改成了

Administrator Administrator 发布于 2022-07-14

设计模式在业务系统中的真实应用

重构支付模块时,我把 600 行 if-else 拆成了四个模式 上个月接手支付模块重构。打开 PaymentService.pay() 那一刻我有点懵:一个方法 600 多行,开头十几个 if (channel == WECHAT) ... else if (channel == ALIPAY)

Administrator Administrator 发布于 2022-02-28

一次线上内存暴涨事故的完整复盘

发现:21 点 47 分,Pod 开始被 OOMKilled 2021 年 12 月 28 号晚上,年终大促的预热场。21:47 分监控群开始报: [P1] promotion-service 实例不可用 事件类型:ContainerOOMKilled 命名空间:prod Pod:pro

Administrator Administrator 发布于 2022-01-07

一次大促压测:从 2000 QPS 到 8000 QPS 的优化之路

目标:大促前把商品详情接口压到 8000 QPS 9 月 20 号拿到大促的容量需求:商品详情接口要扛 8000 QPS,P99 控制在 300 ms 以内。第一次压测跑下来只有 2000 QPS,P99 1.2 秒,差了 4 倍。 前后两周五轮优化,最后压到 8200 QPS、P99 178 ms

Administrator Administrator 发布于 2021-09-30

熔断降级与隔离:Resilience4j 实战

现象:优惠券服务挂了,我们的订单服务跟着挂了 7 月 28 号晚上 8 点多,告警炸了。不是优惠券服务告警,是订单服务告警:Tomcat 线程池打满、健康探针失败、K8s 开始杀 Pod。 [P1] order-service / http_server_requests_seconds P99 >

Administrator Administrator 发布于 2021-08-02