这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
《互联网产品的服务端架构·交易、增长与平台化》2.1 下单、支付与履约
从一笔“下单成功、付款却按旧价”的客诉切入,拆解下单时用户、商品、库存、价格快照与风控五道校验的先后顺序,说明支付与履约为什么是两条链路。给出用 int64 分计价、逐项检测乘法和累加溢出的 Go 实现与测试,并复盘价格快照缺失导致的资损与对账差额。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
从一笔“下单成功、付款却按旧价”的客诉切入,拆解下单时用户、商品、库存、价格快照与风控五道校验的先后顺序,说明支付与履约为什么是两条链路。给出用 int64 分计价、逐项检测乘法和累加溢出的 Go 实现与测试,并复盘价格快照缺失导致的资损与对账差额。
从「拾光集市」大促后库存快照与流水对不上、对账任务重跑导致同一笔差异被回补两次的事故出发,梳理库存漂移的常见来源,说明为什么对账必须以流水而不是快照为准、回补为什么要用业务唯一键保证幂等,并附可运行的 Go 差异计算与容差判定代码,以及覆盖双向漂移的表驱动测试。
配置是客户端与玩法之间的层间契约,不是策划附件。本节用纯 TypeScript 为关卡、卡牌与活动表定义 schema,把字段类型、引用目标、可读层与兼容窗口写成可执行约束;再用 schema 版本与客户端构建号解析出每个玩家应加载的那一版,并给出旧版本退役前双版本共存的发布顺序。
以「拾光集市」限量 200 份手冲套装在大促中支付失败、库存被永久占用的事故为线索,对比下单即扣、支付后扣与预扣确认三种时机的超卖与占用风险,说明可用库存与预留库存为什么要分开、超时释放如何收尾,并给出可运行的 Go 扣减、确认、释放函数与完整生命周期测试。
从「拾光集市」一次上架生成两个 SKU、同一属性组合被卖成两份库存的事故出发,拆解商品、SPU 与 SKU 各自该放什么,说明属性组合为什么要排序、转义并生成稳定 Key,价格为什么必须落在 SKU 上,并附可运行的 Go 校验函数与表驱动测试。
卷三目录:13 章从商品、库存、订单、支付与对账,讲到优惠券、会员、活动秒杀、邀请裂变、实验配置、用户触达、开放平台、国际化与运营后台,最后用下单到对账的端到端链路收口;每节配可运行的 Go 代码与失败场景,并给出四条阅读路径与三条质量指标。
卷三前言:说明读者对象、13 章的组织方式、每章的统一结构、可运行 Go 实验工程的包划分、代码分级、金额与时区约定、数字口径、三种阅读路径、代码阅读顺序与表格读法,以及如何验证自己真的读懂了交易链路;文中全部 Go 代码均可在本地逐字节复现。
《裂隙战场》《群岛纪元》《泡泡工坊》都要回答属性从哪里来、按什么顺序合成、哪些成长迁移必须拒绝。本节把基础、装备、buff、赛季四层拆开,讨论整数化合成、快照指纹、实时与懒计算的分界,并给出带非法迁移测试的 growthfsm 可运行包与边界。
卷三序:当产品开始收钱、发券、做活动、拉新,服务端的判断标准从「能不能看到」变成「每一笔钱和每一个库存能否解释、能否对账、能否重放」;这一卷写给正在做交易、营销与增长系统的后端工程师与技术负责人,用对账差异与秒杀事故说明状态、流水与补偿的约束。
把卷二各章的判断整理成可直接使用的检查清单:发布与审核、可见性、Feed、互动计数、评论、IM、推送、搜索、推荐各有一组可勾选项,每项写明检查什么、为什么检查、不通过时用户会看到什么,并按 P0/P1/P2 分级,适合方案评审与上线前自查。
把卷二各章的阈值、窗口、上限与默认值集中成表:内容分层、审核时限、推拉门槛、排序权重、频控窗口、评论折叠、消息去重、在线判定、推送降级与搜索滞后各自给出起点值与标定方法,并标明哪些是代码常量、哪些是案例假设,附不同规模下的调整趋势与监控指标对应表。
把卷二涉及的内容、媒体、审核、关系、评论、计数、会话、消息、已读与索引整理成一张可对照的数据模型:每张表列出关键字段、类型、索引与写入方,并说明哪些字段可以冗余、哪些必须由单一服务负责写入,附冗余字段判定表、迁移顺序建议与常见建模错误对照。
收口卷二:用 Feed 新鲜度、消息到达率与未读准确率三个指标判断内容社交系统是否变好,解释为什么平均延迟不能作为唯一指标,给出 Aggregate 与 Meets 的最近秩 P95 实现、阈值测试、真实输出,并用一段话把读者交接给卷三的交易、增长与平台化。
以多端联调时手机未读归零、平板仍显示 3 的事故写起:说明单测为什么抓不到会话 ID 不一致,如何从用户动作出发用 net/http/httptest 真跑登录、发消息、另一端接收、已读与未读归零,给出 Run 与 RequestStep 的 Go 实现、测试和真实输出。
从「回声」一次发布因通知失败整条回滚的事故写起:拆解发布、Feed 分发、互动与通知四个阶段的同步异步边界和失败语义,给出 Flow、Step 与 Validate 的 Go 实现、表驱动测试与真实运行输出,并整理链路编排的常见错误与边界。
冷启动不是“没有特征就随机”,而是要有明确的兜底链和降级条件,否则新用户会看到空白首页。本文用 Choose 函数实现个性化、热榜、新鲜内容与编辑精选的顺序降级,并给出新用户首页空白的真实失败场景与测试。顺序与健康判定必须可观测、可回放、可演练。
三个可直接复制的模板:JCStress 0.16 的 Maven 工程含 proc full、可序列化 Result 与 toString 约定;JMH 1.37 的 pom 与基准类给出 -wi/-i/-w/-r/-f 参数和误差列读法;无第三方依赖的开环压测程序给 p50/p90/p99/p999 与拒绝计数。全部在本机实跑并贴真实输出。
按「我要知道什么」组织:线程用 Thread.print 与 dump_to_file 分开看平台线程和虚拟线程,JFR 用 jcmd 启动、view 读视图、configure 把 pin 阈值归零,内存看 class_histogram 与 GC 日志,CPU 用 macOS 的 top -pid 与 ps -M 替代 vmstat/pidstat,并单列本机不可用清单。
以 libraryd 借阅链路为被测系统,给出 64/256/1024 三档并发加单热点场景的完整验收报告:先写死 p99、错误率、吞吐、CPU 与 GC 判据,再用 111 行探针在 10 核 M1 Pro、负载 63 的本机实测,附原始输出、判定代码、遗留风险和可直接套用的模板。
把 Code Review 从「看一眼」变成可阻断的流程:给出 20 条按后果分级的评审问题,每条包含为什么问、怎么验证、什么级别,讲清与卷二 15.3 检查清单的分工,并附三段式评审样例、ThreadLocal 泄漏的真实取证输出与一个可运行的评审闸门。