[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-gray-release-for-smb-zh-CN":3,"blog-related-gray-release-for-smb-zh-CN":29,"blog-adjacent-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,{},[30,41,53],{"id":31,"slug":32,"title":33,"excerpt":34,"content":9,"cover":9,"tone":10,"author":11,"publishedAt":35,"updatedAt":35,"readingMinutes":13,"featured":14,"tags":36,"category":40},30,"integration-api-pitfalls","企业系统集成：接口对接最容易踩的五个坑","接口文档写得再全，真正对接时仍然会卡在字段约定、超时和重复推送这些细节上。","2026-10-17T09:00:00+08:00",[37,38,39],"系统集成","接口","工程实践",{"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":42,"title":43,"excerpt":44,"content":9,"cover":9,"tone":10,"author":11,"publishedAt":45,"updatedAt":46,"readingMinutes":47,"featured":48,"tags":49,"category":52},"why-enterprise-systems-age","为什么企业系统会在三年后开始“老化”","系统上线时功能齐全，三年后却处处别扭。问题往往不在代码，而在交付时被忽略的那些变化。","2026-10-16T09:30:00+08:00","2026-10-18T15:58:14.648+08:00",2,true,[50,51],"系统演进","架构设计",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},{"id":54,"slug":55,"title":56,"excerpt":57,"content":9,"cover":9,"tone":25,"author":11,"publishedAt":58,"updatedAt":58,"readingMinutes":13,"featured":14,"tags":59,"category":63},31,"idempotent-design-basics","幂等设计：重复提交不只是用户手抖","网络重试、消息重投、用户连点，都会让同一个请求到达多次。幂等应该设计在接口里。","2026-10-05T10:13:00+08:00",[60,61,62],"接口设计","幂等","可靠性",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},{"previous":65,"next":82},{"id":66,"slug":67,"title":68,"excerpt":69,"content":9,"cover":9,"tone":25,"author":11,"publishedAt":70,"updatedAt":70,"readingMinutes":13,"featured":14,"tags":71,"category":75},15,"retro-of-a-failed-project","一个失败项目的完整复盘","我们接过一个注定失败的项目：需求模糊、决策人多、预算与期望严重不匹配。","2026-08-08T14:05:00+08:00",[72,73,74],"创业","失败","复盘",{"id":76,"parentId":20,"slug":77,"name":78,"description":79,"icon":80,"cover":9,"tone":25,"kind":26,"sortOrder":81,"count":20},6,"founder-notes","创业手记","创始团队在经营、管理与产品上的思考，记录一家软件公司的成长过程。","pen-tool",10,{"id":83,"slug":84,"title":85,"excerpt":86,"content":9,"cover":9,"tone":10,"author":11,"publishedAt":87,"updatedAt":87,"readingMinutes":13,"featured":14,"tags":88,"category":92},56,"form-design-tradeoffs","表单设计：少一个字段多一成完成率","每个字段都有成本。设计表单的本质是决定哪些信息现在必须要。","2026-08-04T15:18:00+08:00",[89,90,91],"表单","产品设计","B 端",{"id":47,"parentId":20,"slug":93,"name":94,"description":95,"icon":96,"cover":9,"tone":25,"kind":26,"sortOrder":97,"count":20},"product-thinking","产品思维","需求分析、用户体验与产品设计方法论，以及从业务问题到产品方案的思考过程。","lightbulb",50]