[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-gray-release-for-smb-zh-CN":3,"blog-adjacent-gray-release-for-smb-zh-CN":29,"blog-related-gray-release-for-smb-zh-CN":64},{"id":4,"slug":5,"title":6,"excerpt":7,"content":8,"cover":9,"tone":10,"author":11,"publishedAt":12,"updatedAt":12,"readingMinutes":13,"featured":14,"tags":15,"category":19,"seoSettings":28},36,"gray-release-for-smb","中小项目怎么做灰度发布","没有庞大的基础设施，也可以用简单办法把发布风险降到可控。","\u003Cp>灰度发布听起来是大厂才做的实践。实际上，只要用户量超过一百，就有必要考虑发布策略。我们服务的大多是几十到几百人的内部系统，下面这套做法一直在用。\u003C\u002Fp>\n\u003Ch2>三个层次的灰度\u003C\u002Fh2>\n\u003Cp>按账号灰度。选定两三个部门的账号先使用新版本，其他部门保持旧版，问题出现时影响面有限。\u003C\u002Fp>\n\u003Cp>按功能开关。新功能默认关闭，通过配置对指定用户开放，出问题只需关闭开关，不用回滚代码。\u003C\u002Fp>\n\u003Cp>按时间窗。发布安排在业务低峰期，并提前通知关键用户，避免在月末结算时上线。\u003C\u002Fp>\n\u003Ch2>配套的两件事\u003C\u002Fh2>\n\u003Cp>发布清单：数据库变更、配置项、依赖版本逐项确认，任何一项没准备好就不发布。\u003C\u002Fp>\n\u003Cp>回滚预案：明确回滚由谁执行、需要几分钟、数据是否可逆。没有回滚方案的发布等同于赌博。\u003C\u002Fp>\n\u003Cp>灰度不是技术炫技，而是对客户业务的基本尊重。多花半小时准备，能省掉一整夜的排查。\u003C\u002Fp>","","cyan","佳益方圆团队","2026-08-06T15:18:00+08:00",1,false,[16,17,18],"发布","运维","风险控制",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},0,"engineering","技术专栏","架构设计、性能优化、AI 集成与跨端方案等一线技术实践，由研发团队持续分享。","cpu","blue","article",60,{},{"previous":30,"next":47},{"id":31,"slug":32,"title":33,"excerpt":34,"content":9,"cover":9,"tone":25,"author":11,"publishedAt":35,"updatedAt":35,"readingMinutes":13,"featured":14,"tags":36,"category":40},15,"retro-of-a-failed-project","一个失败项目的完整复盘","我们接过一个注定失败的项目：需求模糊、决策人多、预算与期望严重不匹配。","2026-08-08T14:05:00+08:00",[37,38,39],"创业","失败","复盘",{"id":41,"parentId":20,"slug":42,"name":43,"description":44,"icon":45,"cover":9,"tone":25,"kind":26,"sortOrder":46,"count":20},6,"founder-notes","创业手记","创始团队在经营、管理与产品上的思考，记录一家软件公司的成长过程。","pen-tool",10,{"id":48,"slug":49,"title":50,"excerpt":51,"content":9,"cover":9,"tone":10,"author":11,"publishedAt":52,"updatedAt":52,"readingMinutes":13,"featured":14,"tags":53,"category":57},56,"form-design-tradeoffs","表单设计：少一个字段多一成完成率","每个字段都有成本。设计表单的本质是决定哪些信息现在必须要。","2026-08-04T15:18:00+08:00",[54,55,56],"表单","产品设计","B 端",{"id":58,"parentId":20,"slug":59,"name":60,"description":61,"icon":62,"cover":9,"tone":25,"kind":26,"sortOrder":63,"count":20},2,"product-thinking","产品思维","需求分析、用户体验与产品设计方法论，以及从业务问题到产品方案的思考过程。","lightbulb",50,[65,76,87],{"id":66,"slug":67,"title":68,"excerpt":69,"content":9,"cover":9,"tone":10,"author":11,"publishedAt":70,"updatedAt":70,"readingMinutes":13,"featured":14,"tags":71,"category":75},30,"integration-api-pitfalls","企业系统集成：接口对接最容易踩的五个坑","接口文档写得再全，真正对接时仍然会卡在字段约定、超时和重复推送这些细节上。","2026-10-17T09:00:00+08:00",[72,73,74],"系统集成","接口","工程实践",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},{"id":13,"slug":77,"title":78,"excerpt":79,"content":9,"cover":9,"tone":10,"author":11,"publishedAt":80,"updatedAt":81,"readingMinutes":58,"featured":82,"tags":83,"category":86},"why-enterprise-systems-age","为什么企业系统会在三年后开始“老化”","系统上线时功能齐全，三年后却处处别扭。问题往往不在代码，而在交付时被忽略的那些变化。","2026-10-16T09:30:00+08:00","2026-10-18T15:58:14.648+08:00",true,[84,85],"系统演进","架构设计",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},{"id":88,"slug":89,"title":90,"excerpt":91,"content":9,"cover":9,"tone":25,"author":11,"publishedAt":92,"updatedAt":92,"readingMinutes":13,"featured":14,"tags":93,"category":97},31,"idempotent-design-basics","幂等设计：重复提交不只是用户手抖","网络重试、消息重投、用户连点，都会让同一个请求到达多次。幂等应该设计在接口里。","2026-10-05T10:13:00+08:00",[94,95,96],"接口设计","幂等","可靠性",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20}]