应用生产就绪指南 – CodesCode
在生产中部署应用程序并不是最终状态,而是软件开发生命周期中非常关键的一阶段
将应用程序部署到生产环境不代表终点,而是软件开发生命周期中非常关键的阶段。在开发新服务、首次部署或发布重大功能更新时,可能会出现很多问题。为了避免任何事故,本指南可以帮助您创建一个部署和管理生产环境应用程序的蓝图。
生产环境准备
- 架构审查:我知道这是在开始开发之前的第一步。但是随着开发的进行,很多事情都会发生变化,文档的架构变得过时了。在最终发布之前,始终保持文档更新和验证是一个好习惯。
- 安全性:安全性是稳健服务的另一个重要支柱。这能确保数据在各个子系统之间存储和共享时的安全。在发布服务之前验证并确保遵循所有良好的安全实践,这将有助于长期的运行。
- 服务仪表盘:在一个地方汇总的一组服务监控仪表板,提供对服务健康和性能的整体视图。这将有助于理解应用程序的各个组件和使用方式。
- 警报:有一些标准警报,如内存、CPU、GPU等(阈值为70%或80%),这些警报将使您的团队了解潜在问题并有助于主动进行干预。这将有助于您采取正确的方法来根据需要扩展应用程序。在发布时存在着某些未知的数据点,为这种指标设定一个任意的值以引发警报是可以接受的。
- 扩展、缓存和延迟:每个应用程序都是为一定数量的用户和一定数量的事务支持而构建的。但是通常我们需要根据使用情况进行扩展或缩小。通过为各种参数设置适当的扩展因素来处理应用程序的扩展和缩小,以避免任何停机时间或对客户的影响是最佳实践。确保实施适当的缓存机制以缓存和使缓存数据失效,这将有助于保持低延迟的SLA。
- 测试版测试:测试版测试为开发环境提供了测试流程、交互和应用程序的端到端工作。这有助于建立信心。
- Gamma测试或用户验收测试:最好是基于实际使用情况来测试应用程序/功能的一组勇敢的用户。这将帮助您在面向更广泛的受众之前对应用程序进行测试。
- 运行手册:有些情况下需要执行某些手动操作以执行某些任务,例如用户入职、迁移现有客户等。这些操作应该被适当地记录下来以避免任何问题。
- 单元测试覆盖率:定义最低覆盖率标准,例如80%或90%,并遵循这一标准编写单元测试。覆盖率越高,出错的机会越小。
- 集成测试:单元测试是捕获函数或代码单元中的任何问题的好方法,但是集成测试将允许您测试整体功能。这也将确保任何未来的更改不会破坏现有功能。
- CM(变更管理)过程:在第8点中提到了运行手册。虽然运行手册定义了执行手动步骤的步骤,但变更管理过程将确保按照正确的步骤进行操作并记录这些更改。这将为任何手动更改建立起一个最佳实践,并避免在生产中出现任何问题。
- CI/CD管道:尽量避免人工干预。完整的CI/CD管道将确保更改得到适当的审查、单元测试和集成测试。
- 开发测试:尽可能对您能想到的所有可能的情景进行开发测试。这将提高交付物的质量,并确保在生产中部署的代码的安全性。
- 事故缓解计划:无论系统设计和开发得有多好,总会存在一些已知或未知的风险。在任何事故发生时,将风险缓解计划记录下来始终是一个好习惯。例如,如果Web服务器崩溃了,如果网页重定向出现问题等。缓解计划将成为团队中任何开发人员在事故发生时快速采取行动的指南。”做最好的准备迎接最坏的情况!”
- 依赖文档:如果您的应用程序依赖于其他应用程序或服务,请进行审查、记录并为场景(例如,如果该服务开始限流,如果该服务停机等)创建缓解计划。
- 日志记录:确保为所有情景(如信息、错误、警告或调试)实施适当的日志记录。此外,请确保日志中不打印关键数据,并在不同阶段实施适当的日志级别。
- 负载测试:对应用程序进行负载测试将为您提供应用程序可能崩溃的数据。这将帮助您实施适当的扩展机制以避免停机时间。
- 回滚机制:如果有错误的部署进入生产环境怎么办?如果有未经测试的代码进入生产环境怎么办?如果在生产中,部署的代码表现不正常怎么办?为了防止这种情况发生,应建立和记录适当的回滚机制以将应用程序还原到以前的已知状态。这将帮助您快速恢复应用程序的先前已知状态。
- A/B测试:在进行一些重大功能更新时,最好根据A/B客户进行指标收集。这些指标将提供关于已发布功能及其采用情况的见解。这将帮助您决定是否向更广泛的受众推出或回滚。
- 发布机制:Alpha、beta、gamma、UAT和生产等是您可以设定的各种阶段,以针对不同类型的客户。但是为了将应用程序或主要功能发布给更广泛的受众,需要制定一个适当的发布策略,如将应用程序发布给某个特定地理用户群、将应用程序发布给某个百分比的用户群、将应用程序发布给某个用户数量等。一旦初始发布成功,就可以考虑如何将其向更广泛的受众推出。
总结
总而言之,详细记录各种数据点不仅可以确保更安全的开发,而且还可以提供更安全的部署和健康的服务。
Leave a Reply