Close

免费试用 Compass

改善您的开发人员体验、为所有服务编制目录,并改善软件运行状况。

Atlassian 如何实现运营准备

学习提高可靠性、安全性和合规性的运营准备最佳实践

Krishna Sai 的头像
Warren Marusiak

高级技术传播者


即使利用 DevOps 等现代项目结构,许多项目仍缺乏基本的关键规划程序,即自动化就绪性评估流程。如果未实现运营准备,软件开发团队则无从得知环境是否为新系统或产品做好了准备。但是,运营准备不应该在临近部署时才实现,而应在创建项目要求和规范时尽早集成,这一点很重要。

什么是运营准备?


软件开发

运营准备是开发团队在服务准备好进行生产部署之前必须满足的一系列要求。这些要求由团队在开发开始之前确定,并且必须在服务准备好进行生产部署之前得到满足。运营准备要求迫使团队从第一天起就将可靠性、安全性和合规性考虑在内。通过事先关注这些需求,团队可以防止服务上线后发生一些面向客户的问题。

团队必须定义运营准备的三个组成部分。首先,团队必须定义一组服务等级。其次,团队必须定义一套服务级别协议。最后,团队必须定义一系列运营准备要求。每个服务等级都有服务级别协议和一项或多项运营准备要求。创建新服务时,需为其分配一个服务等级。服务等级的服务级别协议规定可用性、可靠性、数据丢失和服务恢复方面的要求。一项服务必须满足所有运营准备要求才能在生产环境中上线。

组织徽标
相关资料

什么是 DevOps?

奖杯图标
相关资料

如何实践 DevOps

以下内容详细介绍了 Atlassian 自己的运营准备流程,可以帮助团队启动自己的运营准备流程。但是,每个组织都需要根据工作和环境调整自己的运营准备程序。

定义服务等级


服务等级提供了一种将服务分组到易于理解的存储桶的方法。每个服务等级决定了 SLA 和一组运营准备要求。SLA 和运营准备要求基于相应等级中的服务遇到的使用场景类型。服务等级可以看作是重要的存储桶。特定存储桶中的所有服务同等重要,应以类似的方式对待。一组面向客户的关键服务的要求可能比一组仅影响员工的三级服务更严格。

以下示例服务等级基于 Atlassian 的服务等级:

  • 等级 0:作为一切基础的关键组件
  • 等级 1:产品和面向客户的服务
  • 等级 2:业务系统
  • 等级 3:内部工具

等级 0:关键骨干基础架构

等级 0 服务提供支持基础架构和共享服务组件,是等级 1 服务赖以运行的基础。如果满足以下条件之一,则认为组件是关键组件:

  • 它们是等级 1 服务运行或可供其用户访问所必需的
  • 它们是客户注册等级 1 服务所必需的
  • 工作人员需要它们来支持或执行等级 1 服务的关键操作职能,例如:

- 启动/停止/重启服务
- 执行部署、升级、回滚或热修复
- 确定当前状态(启动/停止/降级)

等级 1:基本服务

等级 1 服务提供重要的业务、客户或产品功能。这些服务是面向客户的服务或业务关键型内部服务。当服务降级或不可用时,公司会蒙受损失,或者无法执行业务关键型功能,和/或失去客户认为核心的功能。等级 1 服务需要全天候支持队伍,关键指标的 SLA 较高,并且有一系列严格的上线要求。

等级 2:非核心服务

等级 2 服务提供不属于核心功能的面向客户的服务。等级 2 服务提供附加价值或额外的用户体验,这些体验可能被视为可有可无或“锦上添花”。

二级服务涵盖以营销功能为主的公共服务,例如企业对外网站等。这类服务不直接向客户提供企业级服务,也不提供团队用来履行其各方面职责的内部服务,例如协作工具、工作跟踪等。

等级 2 服务不一定需要全天候支持队伍,SLA 较低,上线要求较少。

等级 3:仅限内部使用的功能或非关键功能

等级 3 服务为公司或实验性测试服务提供内部功能。该类别还可能包括目前为早期采用者提供的实验性功能服务,这些服务预计在测试期间服务质量可能会下降。此级别为仅尽力支持的服务提供了较低的 SLA 存储桶。

为服务等级定义 SLA


工作流窗口

服务级别协议 (SLA) 定义可用性和可靠性目标以及服务中断事件的响应时间。每个服务等级都有相应的服务级别协议。下表提供了本文中定义的四个服务等级中每个等级的服务级别协议示例。

按服务级别划分的 SLA

等级 0

等级 1

等级 2

等级 3

指标名称

等级 0

服务级别

等级 0

等级 0

等级 1

等级 1

等级 2

等级 2

等级 3

等级 3

可用性

等级 0

99.99

等级 1

99.95

等级 2

99.90

等级 3

99.00

可靠性

等级 0

99.99

等级 1

99.95

等级 2

99.90

等级 3

99.00

数据丢失 (RPO)

等级 0

< 1 小时

等级 1

< 1 小时

等级 2

< 8 小时

等级 3

< 24 小时

服务恢复 (RTO)

等级 0

< 4 小时

等级 1

< 6 小时

等级 2

< 24 小时

等级 3

< 72 小时

可用性

 

 

 

等级 0

等级 1

等级 2

等级 3

每周最多 1 分钟停机时间。每月最多 4 分钟停机时间。

每周最多 5 分钟停机时间。每月最多 20 分钟停机时间。

每周最多 10 分钟停机时间。每月最多 40 分钟停机时间。

每周最多 1 小时 40 分钟停机时间。每月最多 6 小时 40 分钟停机时间。

可靠性

 

 

 

等级 0

等级 1

等级 2

等级 3

请求失败率 1/10,000

请求失败率 1/2,000

请求失败率 1/1,000

请求失败率 1/100

数据丢失 (RPO)

此数字表示发生服务故障时服务将丢失的最大数据量。发生服务故障时,等级 0 服务将丢失少于一小时的数据。

服务恢复 (RTO)

此数字表示服务恢复运行之前的最长时间。等级 0 服务将在不到四小时的时间内完全恢复。

定义运营准备检查


运营准备检查是一项针对特定服务质量执行的通过/未通过测试。它与服务的可用性、可靠性和弹性有关,而与服务功能无关。团队必须定义一组运营准备检查,以用于确定生产就绪程度。这些检查不是普遍性检查。有些检查仅与特定的服务等级相关。等级 0 服务的要求将比等级 3 服务更为严格。下一节提供了一些运营准备检查的示例,可供您作为起点定义自己的检查。

复杂窗口

备份

当服务中断时,团队可能需要使用备份将数据还原到某个时间点。因此,定期备份数据、实施还原过程以及定期测试备份和还原过程非常重要。备份和还原过程应该是可靠、有效的。同时,文档和测试也是关键。

完成定义

  • 实施备份和恢复流程
  • 记录并测试备份和恢复流程
  • 定期测试备份和恢复流程

产能管理

清楚地概述服务可为消费者提供哪些功能。特别是,确定服务对消费者的任何限制。实施性能测试,确保服务在预期限制内运行。

以下是一些需要测试和提供给消费者的信息示例。

  • 服务限制于每秒 X 个要求
  • 服务保证 X 的响应时间
  • 服务的 X 功能跨区域复制或不跨区域复制
  • 消费者不应该 X
    - 使服务超载
    - 上传超过 X 的文件

对于“完成”的定义

  • 确定并记录服务限制
  • 已执行性能测试来验证是否实施了限制

客户意识

可支持性与可靠性和可用性一样是服务质量的重要方面。在服务或服务的新功能上线之前,团队必须为其建立支持流程。可支持性可以包括客户支持流程、变更控制流程、支持运行手册和其他以支持为重点的项目。

客户支持流程

开发人员必须了解当客户联系支持团队寻求支持时会发生什么,他们必须了解他们在支持流程中的责任。这可能包括参与待命轮值或应要求及时解决生产问题。

变更控制流程

并非所有变更都会对客户造成相同的影响。有些变更是客户无法察觉的。例如,一个小小的错误修复。有些变更会导致客户花费大量精力来采用变更,例如完全重写 API。变更控制有助于评估变更可能对客户产生的影响程度。

支持运行手册

运行手册概括介绍服务的工作方式,并详细解释可能出现的问题以及如何解决这些问题。服务会随着时间而变化,因此定期更新运行手册并验证记录的支持程序准确无误,这一点很重要。

对于“完成”的定义

  • 记录对大多数问题的回答,支持团队需要该记录来调查问题
  • 有效的变更控制流程

灾难恢复

灾难的一部分是失去可用区域。服务需要有足够的弹性才能在可用区域出现故障时正常运行。灾难恢复由两个部分组成:第一,开发和记录灾难恢复流程,第二,对记录的流程进行持续测试。灾难恢复需要定期测试。使用记录在案的灾难恢复计划测试应对可用区域故障的能力。

对于“完成”的定义

  • 灾难恢复计划已记录在案
  • 灾难恢复计划已通过测试
  • 计划定期对灾难恢复计划进行测试

日志记录

日志有多种用处,例如检测异常、在服务中断期间或之后进行调查,以及通过使用唯一标识符在服务之间连接相关事件来跟踪恶意活动。日志有很多种类。大多数服务应包含的几个非常有用的日志是:

  • 访问日志
  • 错误日志

对于“完成”的定义

  • 生成了相应的日志
  • 日志存储在易于查找和搜索的地方

逻辑访问检查

逻辑访问检查侧重于如何管理内部用户访问、外部用户访问、服务对服务的访问以及数据加密。服务将如何防止未经授权访问功能和数据?用户权限如何定义、验证、更新和弃用?这些控制措施是否为敏感数据提供了足够的保护?

内部用户

需要思考的一些重要问题包括:如何对内部用户进行身份验证?如何授予/配置访问权限?如何撤销权限?权限升级是如何运作的?定期访问审查和审计的流程是什么?

外部用户

如何为客户处理身份认证?如何授予/配置访问权限?如何撤销权限?权限升级是如何运作的?定期访问审查和审计的流程是什么?

服务对服务

这类似于内部和外部用户。团队必须确定服务将如何相互进行身份验证。例如,通过设置 OAuth 2.0。

加密

团队可能希望对静态和传输中的数据进行加密。说明服务如何管理数据加密。团队如何管理密钥?密钥轮换策略是什么?

对于“完成”的定义

  • 为内部用户、外部用户和服务对服务的访问记录、实施和测试逻辑访问检查
  • 数据静态时加密
  • 数据传输中加密
  • 已实施并测试了加密

发布

部署新版本的服务不得中断超出服务 SLA 中定义的客户流量。所有变更都必须经过同行评审、测试和通过 CI/CD 管道部署。每次部署后,验证部署是否成功且未中断任何功能。最佳做法是部署后自动验证。拥有多个环境,例如测试、试运行、预生产和生产,以便可以测试部署。

对于“完成”的定义

  • 该服务采用零停机部署
  • 在某些环境中,必须先部署和测试服务,然后才能投入生产

安全清单

安全清单是一组用于开发和维护安全基础架构和软件的实践和标准。这些标准可降低隐私侵权和数据泄露的可能性,进而增强了客户的信任。团队必须制定一份安全清单,说明他们正在构建的服务的性质。以下列出了一些示例要求:

对于“完成”的定义

  • 有证据证明服务不存在未解决的关键漏洞或高危漏洞
  • 对所有数据存储使用静态加密
  • 有证据证明服务不允许不安全的 HTTP 连接

服务指标

服务指标提供有关服务的基本健康和诊断信息,使团队能够监控和应对事件。首先定义一组针对每项服务进行监控的指标。然后,在 Datadog 或 New Relic 等工具中使用这些指标创建仪表板。当指标超出界限时发出警报,并在出现警报时发出故障单。

对于“完成”的定义
以下是一些需要测量的事项示例:

  • 延迟:处理请求所花费的时间
  • 流量:外部用户的服务加载量
  • 错误:影响错误或失败的用户数量
  • 饱和度:服务的繁忙程度以及剩余负荷能力
  • 底层资源使用情况:CPU、内存、磁盘
  • 应用内部统计信息,例如队列、计时和流量
  • 服务的使用和核心功能:活跃用户、每分钟操作次数

服务弹性

服务弹性要求决定服务能否处理负载变化和/或各种组件的故障。具有弹性的服务可能会自动扩展并能够承受单节点故障。

自动扩展

如果服务能够自动扩展,请确保自动扩展已正确配置并经过测试。确定哪个指标将触发自动扩展,并进行测试以确保其有效。例如,如果服务需要在磁盘上存储数据,则它可以监控磁盘的可用空间百分比,并在可用空间百分比低于阈值时通过增加存储来自动扩展。

单节点故障测试

最好拥有能够在单节点故障中幸存下来的服务。如果单个服务节点出现故障,该服务应继续运行,但容量可能会减少。要进行此类测试,可终止服务中的至少一个节点,然后观察系统行为。您的服务应该能够应对单节点故障。对于用于模拟单节点故障的环境,必须实施监控。

对于“完成”的定义

  • 有证据证明已实施和测试自动扩展
  • 有证据证明生产和/或试运行环境运行多个节点
  • 有证据证明服务能够承受单节点故障

支持

支持是服务发布后提供支持的过程。团队需要在服务上线前准备好运行手册和操作工具,安排好待命轮值,这样服务遇到问题时便有解决问题的流程。

运行手册

运行手册为待命响应人员提供了所需的相关情境和说明,以便快速响应事件和开展补救工作。

操作工具

按照充分的标准运行服务意味着有待命队伍,并且装备了 Opsgenie 等操作工具,以便在服务出现问题时提醒待命人员。

待命

对于等级 2 和等级 3 服务 - 需要待命队伍

对于等级 1 和等级 0 服务 - 需要全天候待命队伍

对于“完成”的定义

  • 运行手册由支持人员编写并且可供查找
  • 已配置和测试操作工具
  • 待命轮换已安排妥当,出现问题时可以联系相关人员

定义服务等级的运营准备检查


团队定义了一组运营准备要求后,他们必须确定每个服务等级适用哪些运营准备要求。一些运营准备要求适用于所有服务等级,而有些则可能仅适用于等级 0 服务。从最低的服务等级开始,逐步为更高的服务等级添加要求。等级 3 服务可能有一些基本的运营准备要求,而等级 0 服务则要求满足所有运营准备要求。

等级 3 建议的运营准备检查

  • 备份
  • 日志记录
  • 发布
  • 安全清单
  • 服务指标
  • 支持

等级 3 服务从最基本的运营准备要求开始。

等级 2 和等级 1 建议的运营准备检查

  • 备份
  • 灾难恢复
  • 日志记录
  • 发布
  • 安全清单
  • 服务指标
  • 服务弹性
  • 支持

等级 2 和等级 1 服务增加了灾难恢复和服务弹性运营准备要求。值得注意的是,等级 2 和等级 1 服务可能有不同的运营准备要求。不要求各个等级一定要有不同的要求。如果认为特定服务等级需要其他运营准备要求,则添加该要求。等级 2 和等级 1 可能会根据团队的需求而有所不同。

等级 0 建议的运营准备检查

  • 备份
  • 产能管理
  • 客户意识
  • 灾难恢复
  • 日志记录
  • 逻辑访问检查
  • 发布
  • 安全清单
  • 服务指标
  • 服务弹性
  • 支持

等级 0 服务增加了容量管理、客户感知和逻辑访问检查。

我们如何运用运营准备?


定义了服务等级、服务级别协议和运营准备要求后,每个新服务将分配到一个服务等级,并且团队在服务开发过程中需满足运营准备要求。此过程可确保给定服务等级中的所有服务在上线之前都达到相同的标准。

运营准备要求不是一成不变的,可以随着团队要求的变化定期更新。工作项目可以使现有服务符合新要求。根据业务需求,也可以不更新现有服务以符合更新的要求。

生产就绪指示器


构建自动化以验证生产就绪要求很有用。通过自动验证,可以直接为每项服务创建清单,列出适用于某项服务的生产就绪要求。生产就绪要求在得到满足后可以自动划掉。当任何生产就绪要求未得到满足时,生产就绪指示器应为红色。满足所有要求后,生产就绪指示器应为绿色。

在特定服务的登录主页和任何其他有用的位置显示生产就绪指示器。显示生产就绪指示器的一个好位置是 Compass 记分卡。在服务的 Compass 记分卡中添加生产就绪指示器,可以轻松发现这些信息,并为实施最佳实践和确定需要改进的方面提供了一个框架。

总结...


团队需要时间来制定运营准备流程。团队首先定义服务等级和服务级别协议。然后,团队定义一组运营准备要求,并确定每个服务等级适用哪些要求。有了基本框架,每项新服务都可以在标准开发流程中满足运营准备要求,当生产就绪指示器变为绿色,团队将就可以确信,他们的服务已准备好投入生产。

其他链接


有关本文所涵盖主题的更多信息,请访问以下链接。

Warren Marusiak
Warren Marusiak

Warren is a Canadian developer from Vancouver, BC with over 10 years of experience. He came to Atlassian from AWS in January of 2021.


分享此文章
下一主题

推荐阅读

将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。

Devops 示意图

DevOps 社区

Devops 示意图

DevOps 学习路径

地图插图

免费试用

注册以获取我们的 DevOps 新闻资讯

Thank you for signing up