1 分钟

Werner Vogels 的“你构建,你运维”详解

“你构建,你运维”将软件交付与服务所有权结合起来,涵盖实用值班、SLO、事故响应和更安全的发布。

Werner Vogels 的“你构建,你运维”详解

“你构建,你运维”真正是什么意思

“你构建,你运维”意味着,创建服务的团队要持续对它在生产环境中的表现负责。设计、交付、可靠性、支持和运营改进属于一项连贯的工作,而不是在彼此脱节的部门间转交。

按这种方式工作的团队,不只是编写程序和完成部署。他们会关注生产信号、响应故障、控制运营风险,并决定何时可靠性工作应优先于功能开发。直接面对生产环境会形成短反馈闭环:糟糕的告警、脆弱的发布和令人困惑的恢复流程,都会成为构建者既有理由也有权限去修复的问题。

交付和运营是一项责任

这种运营模式把传统组织里经常分开的活动整合起来。一个服务团队通常负责五个方面:

  • 设计、测试、部署和维护服务
  • 监控面向用户的可靠性、性能和容量
  • 响应事故并沟通其影响
  • 管理安全发现、依赖项和运营成本
  • 改进程序、自动化、文档和恢复流程

这并不要求每位开发者都成为网络、数据库和基础设施专家。它要求团队具备足以诊断自身软件的运维知识,并在需要更深专业能力时,得到平台专家和文档化升级路径的支持。

权限必须与责任相匹配

没有生产环境可见性、安全控制和处理问题的时间,团队就无法负责任地运营服务。如果管理者安排了寻呼值班,却不给日志访问权、部署控制权、容量设置权限或路线图中的空间,他们转移的是压力,而不是所有权。

真正的问责包括暂停发布、关闭有问题的功能、回滚版本、请求帮助,以及安排能防止再次发生事故的工作。还需要为维护留出明确预算。在功能计划已经排满的情况下,可靠性不能长期只能靠业余时间维持。

问责不等于归咎

问责意味着负责响应和改进,而不是找一个人惩罚。大多数严重故障都涉及多个条件:冒险的假设、薄弱的测试覆盖、缺失的限制、触发太晚的告警,或从未演练过的恢复步骤。

以归咎为导向的文化会掩盖信息,因为人们会先保护自己。学习型文化会奖励尽早升级和准确报告。故障后的问题不应是最后一次变更是谁做的,而应是为什么工程系统允许一次变更给客户造成如此大的伤害。

这一理念从何而来

Amazon 首席技术官 Werner Vogels 在解释 Amazon 的服务所有权模式时推广了这句话。这个理念把软件视为持续运营的服务,而不是开发者完成后再移交给其他部门的项目。

这句话之所以令人难忘,是因为它用六个词概括了一项组织变革。对生产环境负责的团队会作出不同的设计决策。他们会在客户因缺失而受到影响前,关注有用的遥测数据、可预期的故障行为、受控部署和恢复路径。

这句话背后的服务思维

服务思维通过生产结果,而不是发布是否完成来衡量成功。测试通过和部署成功固然重要,但两者都无法证明用户能以预期的速度和可靠性完成工作。

随着互联网服务转向持续交付和全天候使用,这一区别更加明显。大型发布事件让程序变更与反馈之间相隔太久。更小的发布、稳定的团队所有权和直接的生产信号,让故障更容易隔离,经验也更容易落实。

它与 DevOps 的关系

“你构建,你运维”与 DevOps 兼容,但两者不能互换。DevOps 涵盖更广泛的文化和技术实践,目的是减少开发与运维之间的摩擦。Vogels 的表述作出了一项明确承诺:构建者在部署后仍保留责任。

组织可以自动化交付流水线,同时保留严格的生产环境交接。它也可以设立中央运维团队,同时让产品团队真正负责诊断、修复和服务的长期健康状况。决定性因素是问责和决策权落在哪里,而不是组织架构图上出现了哪些部门名称。

为什么服务所有权会改变交付方式

服务所有权把生产证据放在同一个作出设计和优先级决策的团队中,从而改善交付。工程师能在仍清楚记得当初判断依据时,看到自己选择带来的运营成本。

在接力式模式下,开发者可能在发布数天后才通过工单得知服务变慢。日志可能已经过期,部署背景可能缺失,运维团队也许知道症状,却不了解对应的程序路径。每次交接都会丢失信息并增加等待时间。

直接所有权改变了激励机制。一个反复被嘈杂告警叫醒的团队,会有理由修复告警或消除其根因。一个必须恢复失败部署的团队,会有理由让回滚更安全。一个要支付基础设施账单的团队,会有理由检查浪费资源的查询和过高的资源请求。

更快交付来自更小的风险

当每次发布都容易观察、限制和撤销时,团队可以更频繁地发布。小变更缩小了排查范围。金丝雀部署和功能控制能限制影响范围。自动恢复步骤缩短了从发现回归问题到恢复服务之间的时间。

这里的速度不是取消控制,而是让控制可重复且成本低。人工审批会议可能拖慢每次发布,却发现不了细微的生产故障。自动化测试、策略检查、分阶段放量和实时服务指标,能在仍可改变结果的时点提供证据。

重复事故会成为规划依据

反复出现的故障会暴露团队必须纳入计划的工作。呼叫量、错误预算消耗、恢复时间和重复的人工干预,显示运营债务在哪里累积。

只有团队能据此行动,这种反馈才会有效。如果每个迭代在事故发生前就排满了,组织实际上已经决定不给预防工作留容量。寻呼系统只会记录问题,无法帮助系统变好。

团队在生产环境中负责什么

负责服务的团队要在服务整个生命周期内对明确结果负责,包括依赖其他系统的行为。所有权不意味着控制每一个依赖项,而是理解这些依赖、设定预期、发现其影响,并通过约定渠道升级处理。

可靠性和性能

可靠性所有权始于用户旅程。某个进程可以仍在运行,但客户可能收到错误、等待太久或看到过期数据。因此,团队应衡量成功的结果,而不能把主机健康状况当成服务正常的证明。

性能同样应以用户为中心。平均延迟可能掩盖少数非常慢的请求,因此团队常查看百分位数,并将重要操作分开衡量。结账、搜索、登录或数据导出可能各自需要指标,因为一个汇总服务数字可能掩盖其中某项的失败。

成本、安全和数据

运营所有权包括控制资源使用、响应安全发现,以及在数据整个生命周期中保护数据。一个靠无限消耗计算资源来达到延迟目标的服务,算不上运行良好。一个恢复很快却丢失已接受写入的服务也是如此。

团队应了解主要成本驱动因素、密钥和访问模式、备份策略、保留义务及恢复目标。专家可以提供控制措施和评审,但服务团队仍要正确使用这些控制措施。

支持与产品行为

客户支持是生产反馈闭环的一部分。支持人员往往比自动监控更早发现令人困惑的状态、部分故障和误导性的错误信息。服务负责人需要有明确方式接收这些报告、评估严重程度并提供有用的状态信息。

负责支持不要求开发者回答每一段客户对话。它要求支持与工程之间有顺畅连接,并提供足够的诊断细节,以识别受影响的操作、时间、账户背景和可见症状。

明确的团队和边界

每个生产服务都需要一个明确指定的负责团队,即使有多个团队贡献程序。其记录应说明服务的作用、支持哪些用户旅程、保存哪些数据、依赖项、可靠性目标,以及如何联系当前响应人员。

组件边界上可以存在共享责任,模糊不清则不行。事故期间,人们需要知道谁能决策、谁能部署,以及每个依赖项由哪个团队负责。“每个人都负责”通常意味着没有人拥有最终决定权。

不透支团队的值班

健康的值班系统会为紧急、可处理且影响用户的问题呼叫正确的人,并给予他们足够支持以安全恢复。它不是对耐力的考验,也不是从小团队榨取无偿产能的方式。

围绕可持续覆盖设计轮值

轮值规模决定每个人多久携带一次寻呼器,以及团队能提供多少恢复时间。需要持续覆盖的服务,必须有足够受训响应人员来应对休假、疾病和同时发生的事故。当人员无法支持这种模式时,管理者应缩小服务范围,采用工作时间覆盖并约定升级方式,或安排共享的二线轮值。

可行的政策应明确:

  • 一线和二线响应人员,以及清晰的交接时间
  • 严重级别阈值和预期确认时间
  • 平台、安全、数据和管理方面的升级联系人
  • 干扰性呼叫后的补偿或恢复时间
  • 培训、跟班班次和定期响应演练

任何响应人员都不应独自面对陌生且高影响的故障。二线人员可以协助调查、沟通或找来合适领域的专家,让一线人员专注于缓解影响。

只为不能等待的行动呼叫

一次寻呼应表示某种威胁用户或数据、需要立即人工处理的情况。如果等到下一个工作时段不会改变结果,这个信号应进入工单或定期评审。

简单的严重级别模型可以区分完全中断、明显劣化和不紧急缺陷。严重程度应考虑受影响用户、持续时间、数据风险、安全暴露和可用替代方案。支付路径中小幅上升的错误率可能应立即呼叫,而内部报表出现同样情况可能只需建工单。

每次寻呼都需要负责人、有用的摘要、相关背景和初步响应方式。仅基于 CPU 或内存的告警往往缺少这种关联。与失败请求、延迟任务或耗尽的可靠性预算相关的告警,能让响应人员更清楚为什么必须行动。

把呼叫量当作工程数据

理想趋势是无必要呼叫更少,必要呼叫处理更快。团队应审查呼叫频率、工作时间外的干扰、误报、重复原因和人工恢复耗时。

嘈杂告警应被修正、降级或移除。重复的人工缓解措施应变成自动化或系统变更。如果呼叫量持续很高,轮值反映的是产品和工程问题,而不是承担轮值人员韧性不足。

SLO、SLI、SLA 与错误预算

获得更多构建额度
分享你的作品,或邀请队友和同行,以降低构建成本。

服务级别指标和目标把可靠性变成可衡量的产品决策。它们让团队能够讨论服务是否足够可靠,而不必依赖印象,也不必处处要求完美。

这些术语承担不同职责

SLI 是一项测量结果,例如成功请求的比例,或在截止时间前完成的任务比例。SLO 是在规定期间内对该结果设定的内部目标。SLA 是一项对外承诺,若表现低于合同阈值,可能规定补救措施。

有用的 SLI 描述用户在意的事件,并定义哪些事件算成功。例如,低于延迟上限的成功请求、返回结果的有效搜索,或在承诺时间前完成的定期导出。若主机可用而用户操作失败,主机正常运行时间的指标就较弱。

从用户需求选择目标

SLO 应根据故障后果和周边依赖的可靠性设定。把每项服务都设为 99.999% 会增加成本和复杂性,却无法证明用户因此受益。工作时间使用的管理工具与支付授权服务,不应默认继承相同目标。

测量窗口也很重要。按时间计算时,99.9% 的月度可用性目标允许 0.1% 的不可用时间,在 30 天的月份中等于 43 分 12 秒。基于请求的目标则从符合条件的事件中计算预算。团队应记录计算方法,避免一个百分比掩盖相互冲突的解释。

有用的目标应说明:

  • 面向用户的事件以及成功的判定标准
  • 纳入和排除的流量,以及排除理由
  • 目标百分比和测量窗口
  • 测量来源以及缺失数据的处理方式
  • 当消耗过快时的行动策略

错误预算把可靠性与规划连接起来

错误预算是在 SLO 窗口内允许服务不成功的数量。它不是可以浪费的配额,而是一个决策工具,用来判断服务当前能承受多少交付风险。

处于预算安全范围内的团队,可以在正常防护下继续计划发布。预算快速消耗时,应触发更小范围的发布、依赖项改进、容量调整,或暂时转向可靠性工作。预算耗尽时,可以暂停高风险发布,直到服务恢复到受控状态。

消耗速率比等待月度最终结果更有用。它显示预算被消耗的速度,能发现严重但短暂的事故,或较慢却持续的劣化。寻呼策略可以结合短、长观察窗口,让团队快速响应,又不因短暂测量噪声叫醒人。

生产就绪与更安全的发布

生产就绪意味着,服务在接入真实用户流量前可以被观察、恢复、保护和支持。功能并非只要在测试环境中正常路径可用,就算准备就绪。

建立最低运营要求

具体清单取决于风险,但每项服务都应回答相同的实际问题:谁负责?团队如何知道用户受影响?响应人员第一步能做什么?数据如何恢复?不良发布如何停止?

简明的就绪评审应覆盖:

  • 与面向用户行为相关的仪表板和告警
  • 常见故障和升级条件的运行手册
  • 备份恢复测试、保留规则和恢复目标
  • 容量假设、资源限制和依赖行为
  • 部署控制、回滚流程和访问限制

清单应记录证据,而不是邀请自动批准。“已启用备份”不如最近一次恢复演练的日期和结果有说服力。“可以回滚”不如经过演练、已知耗时的流程,以及处理不兼容数据变更的计划有说服力。

在部署期间限制影响范围

渐进式交付会在新版本证明自身表现时,减少受影响用户数量。金丝雀发布将一部分受控流量导向变更,并把相关指标与上一版本比较。功能控制可将程序部署与用户暴露分开,并能在不替换整个发布的情况下关闭有问题的路径。

这些方法需要退出条件。团队应定义哪些测量结果允许扩大范围,哪些需要暂停,哪些会导致自动或手动撤回。功能控制也需要负责人和移除日期,因为遗留控制会形成难以测试的组合。

回滚并不总是安全。发布可能包含数据库迁移、消息格式变更或旧版本无法理解的外部副作用。此时团队需要兼容的分阶段迁移,或经过测试的向前修复流程。恢复设计应属于发布计划,而不是故障后才在事故聊天中临时讨论。

测试容量和故障行为

负载测试检查容量假设能否经受真实流量、数据规模和并发度。有效测试会模拟消耗稀缺资源的操作,而不是以任意速率发送简单请求。

故障测试检查依赖超时、实例不可用、连接中断、凭据过期、队列满载和部分网络故障。目的是确认服务会以受控方式失败、遵守数据规则,并产生响应人员需要的信号。只测试故障而不检查告警行为和恢复流程,只回答了一半问题。

事故响应与复盘

有效的事故响应通过明确角色、受控缓解和定期沟通快速恢复服务。深入诊断可在用户影响停止后继续。

使用可重复的响应流程

第一响应人员确认信号、判断可能范围并指定严重级别。重大事故应有负责协调决策的事故负责人、指导调查的技术负责人,以及发布一致更新的沟通负责人。小团队可以合并角色,但职责仍应清晰可见。

实用流程分为五步:

  • 发现并确认对客户或数据的影响
  • 指定严重级别、角色、沟通节奏和共享时间线
  • 通过回滚、功能控制、扩容、隔离或流量限制缓解影响
  • 通过面向用户的指标,而不是仅看组件状态,验证恢复
  • 保留证据并安排学习复盘

缓解措施应优先选择能恢复服务的最低风险操作。响应人员无需在关闭新功能或回到已知兼容版本前,先得到完整的因果解释。但他们需要记录决策和观察结果,便于后续分析基于证据进行。

沟通有用事实

事故更新应说明用户遇到了什么、哪些功能受影响、团队正在做什么,以及下一次更新何时发布。猜测会造成混乱,沉默则会让支持团队和客户自行编造解释。

内部沟通也需要同样的纪律。单一事故频道或记录应包含决策、时间戳、组织系统内运营证据的链接和角色分配。可以有并行讨论,但重要发现应回到共享时间线。

为预防而写复盘

无责复盘会记录客户影响、发现过程、事件顺序、促成条件、恢复过程和后续工作。无责不意味着含糊,而是考察在当时可获得的信息和控制条件下,为什么某项行动看起来合理。

分析应超越最后的触发点。如果一次部署导致中断,有价值的问题包括:为什么测试漏掉了该行为,为什么影响范围会扩大,为什么检测花了那么久,以及为什么恢复需要这些步骤。“人为错误”会在分析触及组织能够改变的条件前就让它停止。

每项行动项都需要负责人、截止日期和可验证结果。工作可能包括回归测试、部署防护、更加明确的限制、告警调整、自动化或运行手册修正。团队应审查逾期事项,只有预防性变更实际运行后才能关闭。

支持服务所有权的工具

放心上线
当试点准备好面向真实用户时,使用自定义域名上线。

服务负责人需要能看到用户影响、跨依赖追踪行为、控制发布和保留事故工作记录的工具。工具可以缩短调查和恢复时间,但不能替人决定谁对结果负责。

可观测性应回答运营问题

日志解释离散事件,指标展示随时间变化的行为,追踪把跨服务边界的工作串联起来。它们共同应能回答:用户是否受影响、延迟或故障从何处开始、发生了什么变化,以及缓解措施是否有效。

集中式结构化日志比散落在各机器上的自由文本更容易搜索和关联。指标应覆盖延迟、流量、错误和饱和度,也应覆盖已完成交易等产品结果。当一个请求跨越多个独立部署的服务时,分布式追踪尤其有用。

保留期限必须符合调查需要和隐私规则。永久保存每个事件会带来成本和数据暴露,保存太少则可能抹去调查缓慢或延迟报告故障所需的证据。团队应按数据类型定义保留期,并在遥测数据离开应用前移除密钥或敏感字段。

所有权元数据必须保持最新

服务目录或开发者门户可以记录负责团队、响应排班、依赖项、仪表板、运行手册、源代码位置和可靠性目标。它的价值来自准确性,而不是目录规模。

所有权元数据应成为创建服务和团队移交流程的一部分。没有负责人,服务就不应进入生产环境;组织重组时,应在原团队撤出前更新运营记录。自动检查可以发现缺失字段,但人仍要负责验证边界。

自动化应消除重复的人工风险

标准部署流水线、遥测默认配置、事故模板和恢复操作,可减少团队之间的差异。自动化与应用程序一样值得评审和测试,因为有问题的恢复脚本或过宽的部署权限可能扩大事故影响。

当自动化失效时,团队应保留可理解的人工路径。目标是受控运营,而不是依赖一个无人能解释的按钮。

平台团队的作用

平台团队通过提供共享能力和安全默认设置,让服务所有权变得可行,同时产品团队仍对产品服务结果负责。平台本身也是产品,有用户、可靠性目标、支持预期和负责团队。

提供有退出路径的标准通道

标准通道可包括服务模板、交付流水线、身份控制、密钥管理、运行时配置、健康检查、遥测和已批准的部署模式。这些默认设置减少了每个产品团队必须自行设计的专业配置。

当这条路径比自定义方案更容易,且团队能看清它的限制时,采用率会上升。特殊工作负载总会存在。文档化的例外流程应评估风险和支持需求,不应强迫每个服务采用不合适的设计。

防护栏应阻止已知危险状态,例如暴露的密钥或没有负责人的部署,同时向团队快速反馈。每次日常变更都要排工单队列,只是把旧交接搬进新部门,削弱直接责任。

区分共享服务与产品所有权

平台团队可能运营身份验证基础设施、编排环境、制品仓库或可观测性系统。产品团队仍要负责应用如何使用这些服务,包括超时、降级行为、权限和用户可见的故障。

平台团队负责共享能力的可用性和支持,使用该能力的团队负责集成以及通过产品作出的承诺。当共享故障可能同时影响多个服务时,两方都需要兼容的 SLO 和升级路径。

衡量平台是否减少工作量

平台应减少搭建时间、部署工作量、运营差异和可避免事故。仅看采用率并不足够,因为团队可能被迫使用一个带来大量摩擦的平台。

有用的反馈包括创建生产就绪服务所需时间、部署失败原因、支持需求、升级工作量,以及开发者对常见任务的满意度。平台团队应把这些结果当作产品输入,而不是假定功能越多就一定越能改善所有权。

托管服务、无服务器系统和 AI 生成的代码

使用托管基础设施或生成的代码会改变运营边界,但不会免除应用责任。服务商可能运营硬件和运行时组件,而产品团队仍负责配置、数据、集成行为和对用户的承诺。

托管不代表不会故障

托管数据库仍可能发生区域中断、配额限制、慢查询、连接耗尽或不兼容的维护行为。服务团队必须了解服务商保证什么、还能使用哪些控制措施,以及依赖变慢或不可用时应用如何表现。

无服务器系统减少了一些服务器管理任务,却带来其他问题,包括并发限制、冷启动、事件重试、执行时间限制,以及与调用模式相关的成本。相关指标和运行手册应反映这一模式,而不是照搬基于主机的清单。

第三方 API 也需要同样对待。团队需要超时、重试限制、熔断行为、依赖监控,以及决定如何降级运行。无限重试会把一个依赖问题变成整个应用的资源耗尽。

生成的软件仍需负责人

AI 辅助和氛围编程工具可以缩短从想法到可用软件的路径,但生产责任仍属于发布结果的个人或团队。生成的代码必须满足同样的评审、测试、访问控制、可观测性、数据处理和恢复要求。

在生成前进行规划尤其有价值,因为模糊边界可能产生在演示中可用、却难以运营的软件。在把应用视为生产就绪前,先定义用户、数据所有权、依赖项、故障行为、部署模式和服务目标。

源代码访问同样重要。团队需要可行的方法来检查行为、修复缺陷、评审依赖,并在工具或模型变化后继续运营。创建时的便利不应让生产负责人失去运行应用所需的控制权。

常见失败模式与合理调整

选择合适套餐
随着责任范围扩大,选择适合团队的套餐,从免费版到企业版。

当组织分配运营职责,却不改变人员配置、权限、架构或规划时,这个模式就会失败。口号会沦为寻呼负担的理由,而不是学习体系。

需要纠正的失败模式

以下几种模式应立即关注:

  • 开发者承担值班,却无法安排永久性修复
  • 服务所有权分散在多个团队,没有最终决策者
  • 告警报告响应人员无法采取行动的症状
  • 共享依赖造成使用方团队无法影响的故障
  • 救火获得认可,预防工作却无人看见

补救措施取决于具体情况。管理者可以预留容量、明确所有权、调优告警、定义共享服务协议,或投入平台工作。为一个失灵的轮值再增加一名响应人员,只会分散伤害,无法减少根因。

受监管环境

职责分离、受审计的访问、正式审批和受控的生产变更,可以与服务所有权共存。产品团队可以继续对可靠性结果负责,同时通过经过评审的流程和获批角色执行变更。

有用的调整包括预先批准的事故操作、记录在案的紧急访问、敏感操作的同伴授权,以及向获授权操作人员升级的演练流程。合规应定义控制措施和证据,不应让谁负责诊断服务或纠正工作变得不清楚。

遗留单体应用

紧密耦合的单体应用可能无法按技术组件清晰划分所有权。可以从用户旅程、定期任务、数据领域或团队能识别和衡量的业务能力开始建立运营所有权。

最初的工作通常应是更好的遥测、更安全的部署、依赖映射和更清晰的事故角色。在这些实践形成前就把程序拆成服务,可能增加运营面,却无法解决责任问题。

小团队与全球覆盖

小公司可能无法为每项服务配置独立轮值,也无法提供持续的本地覆盖。它可以将相关服务归入一个轮值,为低风险系统定义工作时间支持,使用托管基础设施,并为严重事件预留管理层升级机制。

对于全球组织,接力式覆盖可减少夜间干扰,但交接需要当前事故状态、明确的所有权转移和共享流程。地域分布本身无法解决责任不清的问题。

如何逐步采用该模式

采用这一模式最好从范围有限的试点开始,先证明运营实践有效,再在组织中扩大。一份全公司公告无法创建所有权记录、可用告警或可持续的轮值。

从一个合适的服务开始

选择一个有明确用户结果、已知依赖、风险可控,并且团队愿意同时负责变更和生产行为的服务。不要从最脆弱的共享系统开始,因为其问题可能压垮学习过程。

记录服务边界、负责团队、生产联系人、面向用户的指标、首个 SLO、主要故障模式和恢复控制措施。在设定轮值前,审查当前呼叫负担和近期事故,让人员决策反映真实需求。

建立最低运营体系

试点需要足够的结构,才能让责任安全且可衡量。建立仪表板、可执行的告警、运行手册、严重级别规则、升级路径、事故角色和发布恢复方式。在事故发生前测试访问权限,包括任何紧急授权流程。

用真实的故障场景安排一次响应演练。让响应人员诊断影响、选择缓解措施、沟通状态并验证恢复。相比真实中断,演练能更安全地暴露权限缺失和说明不清的问题。

使用 30/60/90 天节奏

前 30 天,明确所有权,建立指标和 SLO,记录常见故障的响应方式,并创建初始轮值。在宣布试点上线前,审查服务架构和数据恢复需求。

第 31 至 60 天,调优嘈杂告警,开展事故演练,测试恢复与回滚,并审查每次呼叫。为团队预留容量,消除这段时间发现的重复人工工作。

第 61 至 90 天,将结果与基线比较,纠正工作负荷问题,并为下一个团队打包有用的默认配置。只有在试点无需依赖日常救火即可运行时,才扩展到一两个更多服务。

跟踪结果,而不是仪式

采用指标应显示该模式是否改善交付和运营。有用的衡量包括部署频率、变更失败率、恢复服务时间、SLO 表现、呼叫量、工作时间外的中断和重复事故原因。

数字需要背景。更低的部署频率可能意味着变更更大、发布冻结或需求减少。呼叫数量下降可能意味着可靠性变好,也可能只是告警被关闭。改变政策前,应综合审查各项指标,并将它们与客户影响联系起来。

团队健康也应纳入评审。跟踪轮值公平性、睡眠中断、未填补的覆盖、花在运营工作上的时间,以及复盘行动是否获得容量。服务可以达到 SLO,却耗尽维护它的人,这不是可持续的运营状态。

定义扩展门槛

当服务的所有权明确无误、响应人员拥有安全访问权限、告警可执行、常见故障有流程、恢复已测试,并且管理层为预防工作投入资源时,它就适合采用这一模式。团队应被允许基于具体证据说“还没准备好”。

扩展时应复用标准,但不能机械复制目标。每项服务都要根据用户、故障后果、架构和支持承诺制定可靠性目标与覆盖方式。运营原则保持一致,具体实施则反映实际风险。

Koder.ai 如何融入其中

Koder.ai 可以帮助团队创建和运营 Web、服务器和移动应用,但服务负责人仍需定义可靠性要求和生产流程。该平台采用聊天界面和多种代理,帮助技术与非技术用户通过自然语言指令创建软件。

它的规划模式可帮助团队在实现前描述应用边界、依赖项、数据需求和运营验收标准。快照和回滚提供恢复控制,团队可以将其纳入发布和事故流程。导出源代码可保留对实现的访问,便于评审、测试和持续负责。

Koder.ai 支持部署、托管和自定义域名。应用可使用 React 构建 Web 界面,使用 Go 和 PostgreSQL 构建后端,并使用 Flutter 开发移动应用。这些能力可以缩短搭建时间,但团队仍需为每个生产应用配置监控、告警阈值、访问权限、备份、事故角色和面向用户的目标。

平台提供免费版、专业版、商业版和企业版。团队应根据部署、支持、治理和协作需求选择套餐,而不能把价格当作运营模式的替代品。其基于 AWS 的全球基础设施,也能在数据隐私和跨境传输要求提出需求时,支持按国家部署应用。

合理的试点应从规划一个范围有限的应用开始,指定其负责人,定义可衡量的用户结果,并记录团队将如何发现和撤销失败发布。只有当交付后的服务可观测、可恢复并有人负责时,构建和部署速度才会成为持久优势。

常见问题

“你构建,你运维”是什么意思?

它指创建服务的团队在发布后仍要负责。他们监控服务、响应事故、提升可靠性,并确保用户能在生产环境中顺利使用服务。

谁推广了“你构建,你运维”?

Amazon 的首席技术官 Werner Vogels 推广了这句话,用它描述一种模式:软件团队把应用当作持续运营的服务,而不是上线后就交给其他部门的项目。

这是否意味着每位开发者都必须成为运维专家?

不是。开发者需要具备足以诊断和改进自身服务的运维知识,但平台、安全、数据库和基础设施专家仍会提供共享系统和更深入的支持。

负责服务的团队需要哪些权限?

团队需要在承担责任的同时拥有实际控制权,包括生产环境可见性、安全的部署权限、回滚或功能开关、升级路径,以及为可靠性工作预留的计划时间。

服务所有权是否等同于因故障责怪开发者?

不是。问责意味着团队负责响应和预防工作。有效复盘会检查测试不足、防护缺失、告警过晚或恢复步骤不清晰等促成因素,而不是责怪某一个人。

团队怎样安排值班而不让人精疲力竭?

只有在立即行动能防止或减少用户损失、数据损害时才呼叫人员。把不紧急的问题放进工单或定期评审,并把反复出现的呼叫当作需要彻底修复的工程工作。

SLI、SLO 和 SLA 有什么区别?

SLI 衡量与用户相关的结果,例如成功请求数。SLO 为该结果设定一段时间内的内部目标。SLA 是对外承诺,若表现低于约定水平,可能包含合同约定的补偿措施。

服务所有权如何让发布更安全?

小而可观测的发布能降低风险。采用分阶段放量、功能开关、明确的退出条件,以及经过验证的回滚或向前修复方案。部署期间检查面向用户的指标,不要只看基础设施健康状况。

托管服务或 AI 生成的代码是否能免除生产责任?

托管平台减少了一些基础设施工作,但应用团队仍负责配置、数据处理、依赖行为、用户影响、监控和恢复。生成的代码同样需要评审、测试、访问控制和运行方案。

团队应该如何开始采用这种模式?

从一个边界清晰、有明确用户结果且团队愿意负责的服务开始。指定负责人,定义指标和初始 SLO,建立可执行的告警与运行手册,测试恢复流程,再把经验推广到更多服务。

Related posts