feature flags详解:暗中上线,一键发布
feature flags详解:让功能先暗中上线,再拨动开关发布,先对10%的用户灰度开启——无需重新部署,发布日也不慌乱,一个人也能像团队一样稳稳交付。
feature flags详解:feature flag就是存放在数据库而不是代码里的开关——功能先“暗中”上线到生产环境(已部署但不可见),之后你只要为某位内测客户、10%的用户或所有人拨动开关,就能把它发布出去。无需重新部署,无需改代码,发布日也不必慌乱。
对独立创始人来说,flag的意义在于:“发布”不再是一次令人胆战心惊的部署,而是你喝着咖啡就能做出的决定。下面讲讲它们如何运作、你真正会用到的四种方式,以及让它们适得其反的错误。
feature flags详解:feature flag到底是什么
没有flag时,控制谁能看到某个功能就得改代码。经典的临时办法是这样的:“如果用户的邮箱以那位内测客户的域名结尾,就显示新功能。”这条规则的每次改动都是一次代码改动,每次代码改动都是一次部署。配置散落在五个不同的地方,没有任何审计记录,能拨动开关的人就是知道这个临时办法藏在哪里的人。
feature flag把这个决定移到了数据里。flag是一个有名字的开关——“new_dashboard: off”——存放在你的设置系统中,与时区、主题之类的设置放在一起。你的代码只问一个问题:这个flag对这位用户是否开启?在仪表盘里改变答案,产品行为就会立刻改变——无需部署。flag与其余设置处于同一层级结构:全局默认值,可按组织覆盖,可按用户覆盖。
暗中上线,用开关发布
最大的思维突破在于:部署和发布是两个不同的事件,而flag正是把它们分开的东西。
部署,意味着你的代码到达了服务器。发布,意味着用户能看到它。没有flag时,这两者是同一时刻——这就是发布让人觉得危险的原因,也是创始人把做完的工作捂上好几周、等一个“合适”日子的原因。有了flag,你可以把功能做到一半就以隐藏状态部署,部署十次也无妨。它随每次发版一起上线,在生产环境中接受测试,只有你能看到。准备好之后,发布只是拨动一个开关——如果部署仍然让你害怕,这个模式能消除大部分恐惧。
它也改变了你的营销。当发布不再有成本,你就不会再把全部赌注押在一个大日子上,而是开始持续交付一系列由flag把关的小型发布——这正是微发布背后的引擎。
创始人实际使用flag的四种方式
| 用途 | 具体做法 |
|---|---|
| 内测权限 | 只为特定组织开启某个功能——最友好的客户先试用 |
| 灰度发布 | 先对10%的用户开启,观察错误,再扩大到所有人 |
| A/B测试 | 一半用户看到版本A,另一半看到版本B——由数据选出赢家 |
| 紧急关闭开关 | 某个功能在生产环境出了问题——几秒内把它关掉,然后从容地修复 |
请注意,这些既是工程工具,也是产品和营销工具。内测权限是一场销售对话(“想抢先体验吗?”)。灰度发布是风险管理。A/B测试是定价页优化。紧急关闭开关是睡眠保险。
12 周企业职业生涯从来都不是计划申请加入 Solopreneur Accelerator。立即申请 →凌晨2:47,为什么需要flag
一个来自我自己生产系统的真实故事:凌晨2:47,手机因错误率警报震动。某个接口失败,用户受到影响。两个选择——迷迷糊糊地调试,或者两次点击回滚到上一个版本。我选了回滚。90秒修复,继续睡觉,早上再好好调试。
回滚是一件钝器:它会撤销该次发版中的一切——出问题的功能,以及一起上线的另外三个好功能。feature flag则是外科手术式的。如果出问题的东西在flag后面,你只需关掉那一个功能,让这次发版的其余部分继续运行。最好的情况是,你根本不用面对凌晨2:47的选择:灰度发布意味着只有10%的用户看到过这个bug,flag一关,大多数客户根本不知道发生过什么。
让flag适得其反的错误
- 没有默认值。你添加了新flag,却没定义它对现有用户意味着什么——他们得到一个未定义的答案,应用出现你无法复现的异常。每个flag发布时都要带上明确的默认值。
- 没有审计记录。产品行为突然变了,没人知道谁在什么时候拨动了什么。每次flag的变更都应记录:谁、什么、旧值、新值、时间戳——没有历史记录的flag是调试的噩梦。
- 任何人都能拨动任何开关。flag是生产环境的控制手段。更改组织级别的flag应该需要管理员权限,就像更改该组织的计费一样。
- 每次请求都用数据库查询来检查flag。flag检查时时刻刻都在发生;它们必须来自在flag变更时刷新的缓存,而不是每次加载页面都新查一次。
从第一天起就需要flag吗?
比你想的更早。你不需要花哨的flag产品——在自己的数据库里建一张flag表,再用一个简单的管理界面来维护,就是任何规模下支撑这一切的模式。它是你设置系统的一部分,而AI能根据一份好的规格说明很快把它构建出来;flag机制本身只需几小时的工作,算不上一个项目。
回报从你第一个让你紧张的功能就开始了。第一次你在周二暗中上线某样东西,整个星期在生产环境里测试,然后在周一拨动开关“发布”它——你会想,没有这个,一个人怎么做产品。
本书The Solopreneur RevolutionLuis Gonçalves 讲述如何在不辞职的情况下用 AI 打造独立创业者事业。获取本书 →常见问题
feature flag和设置有什么区别?
设置存放的是偏好——时区、主题、货币。feature flag存放的是关于可用性的决定:这个功能是否开启,对谁开启?它们存在于同一个层级系统中(全局默认值 → 组织覆盖 → 用户覆盖),所以flag机制通常作为你设置系统的一部分来构建。
feature flag和回滚有什么区别?
回滚把你的整个部署恢复到上一个版本——有效,但会把好的改动和坏的一起撤掉。flag只关掉某一个具体功能,其余一切继续运行。两者你都需要:回滚是紧急刹车,flag是你首先使用的精准控制。
feature flags会拖慢应用吗?
只要有缓存就不会。flag检查时时刻刻都在运行,所以答案必须来自在flag变更时刷新的缓存——绝不能每次加载页面都新查一次数据库。做得对的话,成本基本为零。
非技术背景的创始人能管理feature flags吗?
这正是重点所在。flag把发布决定从代码移到了仪表盘:你决定谁在什么时候看到什么,而无需触碰部署。你来指挥发布节奏——今天10%,周一面向所有人——就像安排一封简报的发送时间一样。
你到底被困得有多深?
完成职场窒息指数——这项免费测评告诉你是否已准备好成为独立创业者。