把 Shell 脚本写稳:失败处理、临时目录与清理清单

可靠 Shell 脚本

Shell 脚本常常从一两行命令开始,后来慢慢变成构建、发布、备份、迁移和运维入口。它的问题也在这里:看起来只是“把命令串起来”,一旦变量为空、管道中间失败、临时文件没清理,影响就会被放大。写稳 Shell 脚本,不是把 Bash 语法背全,而是给失败路径、输入边界和资源清理留出明确位置。

Read More

数据库连接池别乱调:容量、排队、超时与背压清单

数据库连接池别乱调

很多服务的数据库故障,并不是 SQL 变慢才开始的,而是连接池先被打满,请求继续排队,应用线程被占住,最后把局部慢查询放大成整站超时。连接池不是越大越安全,它更像一个阀门:放得太小会限制吞吐,放得太大又会把数据库推到极限。要把它用稳,需要同时设计容量、排队、超时和背压。

Read More

用 Git Worktree 并行开发:少切分支,少 stash,少污染工作区

用 Git Worktree 并行开发

开发时最打断节奏的场景,往往不是写新功能,而是新功能写到一半,线上突然要修一个小 bug;或者正在做代码审查,本地又必须回到干净的 main 复现问题。反复 stash、切分支、装依赖,会让工作区越来越混乱。git worktree 的思路很朴素:同一个仓库可以挂出多个工作目录,每个目录检出不同分支,但共享同一份 Git 对象库。这样你可以保留当前现场,同时在另一个目录里处理热修复或评审。

Read More

把异步任务跑稳:队列、幂等消费者与死信治理清单

异步任务可靠性设计

很多系统一开始把耗时逻辑丢进队列,只是为了让接口更快返回。等业务量上来后,真正难处理的往往不是“怎么入队”,而是任务重复执行、卡在半路、持续失败、人工不知道该不该重放。异步任务要跑稳,需要把队列、消费者、数据库状态和告警流程放在一起设计,而不是只换一个更强的消息中间件。

Read More

依赖更新别靠手感:锁文件、版本范围与 CI 闸口清单

依赖更新治理

项目刚启动时,依赖更新看起来只是顺手执行一次 npm updatepip install -Ugo get -u。但项目一旦进入多人协作和持续发布,依赖就会变成一条隐形供应链:版本范围决定会装到什么,锁文件决定实际运行什么,CI 决定能不能把变化放进主干。把这三件事管住,依赖更新才不会从“维护动作”变成“随机事故”。

Read More