写在前面
以下每一条都来自真实的踩坑教训,按"违反时的代价"从高到低排列。
正文
- 配置与代码分离。数据库地址、密钥永远不进代码仓库,环境变量或配置中心管理。泄漏一次就足够致命。
- 所有外部调用必须设超时。HTTP 客户端、数据库驱动、Redis 客户端,默认不设超时的库都会在对方卡死时拖垮你。
- 日志要能定位问题。关键链路打 traceId;日志带上下文(参数、耗时、结果状态);ERROR 只留给需要人工介入的事。
- 重试要配合幂等。网络抖动重试是应该的,但下游接口必须幂等,否则一次超时重试就是两笔订单。
- 分支合并前必须过 CI。编译、单测、lint 三件套卡在合并前,而不是部署后。坏代码进 main 的成本是卡在分支上的十倍。
- 数据库变更走迁移脚本。手动改表结构的环境,迟早和代码版本不一致导致无法回滚。
- 命名宁可长而清楚。
retryCountForPaymentGateway好过n。代码写一次,读很多次。 - 删掉的代码就删干净。注释掉的旧代码放两周就没人敢删了,Git 历史本来就是备份。
- 上线变更要可回滚。每次发布前问自己一句:出问题怎么退?回答不了的发布不上。
- 文档跟着代码走。接口文档、部署步骤过时比没有更糟。CI 里加文档检查或用代码即文档的工具。
一条隐藏规则
规范本身不重要,重要的是全组用同一套。风格不一致的代码库,维护成本比任何单个坏习惯都高。