”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 生产准备清单

生产准备清单

发布于2024-08-05
浏览:220

Production Readiness Checklist

我一直在研究多个项目,我已将应用程序从 PoC 转移到生产环境。
这些是我为自己和我的团队准备的清单,以确保我们做好生产准备。
这里检查表是重点,因为应用程序采用 Python 编程语言并通过 Kubernetes 部署到 AWS。
并非所有这些都是强制性的,但它们是我发现最有用的。

1. 警报和指标

  • [ ] 是否针对基础设施问题设置了警报(例如内存或 CPU 使用率增加、服务不可用)?
  • [ ] 是否为关键的应用程序特定逻辑故障设置警报?
  • [ ] 我们可以查看基础设施和资源使用情况的历史数据(过去几个小时/几天)吗?
  • [ ] 是否有实时监控仪表板?

2. 仪表板和SOP

  • [ ] 是否有处理警报和已知问题的 SOP 文档?
  • [ ] 是否有适用于常见场景的操作手册?
  • [ ] 是否有适当的事件响应计划?

3. 待命映射和节奏

  • [ ] 是否有针对应用程序级问题的待命人员映射?
  • [ ] 是否有针对基础设施相关问题的待命人员映射?
  • [ ] 是否有明确的轮换时间表和升级政策?

4. 部署

  • [ ] 是否已确定合适的实例类型(GPU 或 CPU)?
  • [ ] 是否已指定所需的服务器类型?
  • [ ] 是否支持故障转移的多可用区?
  • [ ] 是否支持多区域?
  • [ ] 是否针对流量高峰设置了自动缩放(例如 HPA、Keda)?
  • [ ] 是否为服务器配置了健康检查?
  • [ ] 资源限制是否已定义并记录?
  • [ ] 是否有蓝绿或金丝雀部署策略?
  • [ ] 是否有明确的回滚计划和程序?

5. 可观察性和追踪性

  • [ ] 是否有显示相关指标的仪表板(例如请求计数、HTTP 状态代码、使用情况)?
  • [ ] 我们可以端到端跟踪单个请求以进行调试吗?
  • [ ] 是否有日志聚合和分析系统?
  • [ ] 是否实现了分布式跟踪?

6.负载测试

  • [ ] 是否已执行容量规划来确定服务器的负载处理能力?
  • [ ] 是否有明确的性能基准?
  • [ ] 是否进行了压力测试?

7. 质量

  • [ ] 是否有自动化单元测试?
  • [ ] 是否有自动化集成测试?
  • [ ] 是否执行静态代码分析(例如复杂性检查)?
  • [ ] 代码覆盖率是否经过测量并处于可接受的水平?
  • [ ] 是否有生产健全性测试用例?
  • [ ] 是否有 CI/CD 管道?
  • [ ] 是否定期进行安全扫描和漏洞评估?

8. 发布

  • [ ] Swagger/OpenAPI 文档是否可用并且是最新的?
  • [ ] 是否有 API 和版本的版本控制系统?
  • [ ] 是否有已建立的沟通渠道用于定期维护?
  • [ ] 是否有变更管理流程?
  • [ ] 功能标志是否用于逐步推出新功能?

9. 灾难恢复和业务连续性

  • [ ] 备份和恢复程序是否已到位并经过测试?
  • [ ] 有数据复制策略吗?
  • [ ] 是否已定义恢复时间目标 (RTO) 和恢复点目标 (RPO)?
  • [ ] 是否定期进行灾难恢复演习?

10. 合规性和安全性

  • [ ] 数据在静态和传输过程中是否加密?
  • [ ] 访问控制和身份验证机制是否到位?
  • [ ] 是否定期进行安全审核?
  • [ ] 应用程序是否符合相关行业标准(例如 GDPR、HIPAA)?

11. 文档

  • [ ] 系统架构文档是否可用并且是最新的?
  • [ ] API 文档是否完整且最新?
  • [ ] 操作程序是否记录在案?
  • [ ] 是否有全面的故障排除指南?
版本声明 本文转载于:https://dev.to/soumendrak/production-readiness-checklist-1io5?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    For Each Loop vs. Iterator: Efficiency in Collection TraversalIntroductionWhen traversing a collection in Java, the choice arises between using a for-...
    编程 发布于2025-07-12
  • 人脸检测失败原因及解决方案:Error -215
    人脸检测失败原因及解决方案:Error -215
    错误处理:解决“ error:((-215)!empty()in Function Multultiscale中的“ openCV 要解决此问题,必须确保提供给HAAR CASCADE XML文件的路径有效。在提供的代码片段中,级联分类器装有硬编码路径,这可能对您的系统不准确。相反,OPENCV提...
    编程 发布于2025-07-12
  • Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    在ASP.NET async void void async void void void void void的设计无需返回asynchroncon而无需返回任务对象。他们在执行过程中增加未偿还操作的计数,并在完成后减少。在某些情况下,这种行为可能是有益的,例如未期望或明确预期操作结果的火灾和...
    编程 发布于2025-07-12
  • 如何使用Python理解有效地创建字典?
    如何使用Python理解有效地创建字典?
    在python中,词典综合提供了一种生成新词典的简洁方法。尽管它们与列表综合相似,但存在一些显着差异。与问题所暗示的不同,您无法为钥匙创建字典理解。您必须明确指定键和值。 For example:d = {n: n**2 for n in range(5)}This creates a dicti...
    编程 发布于2025-07-12
  • 在Python中如何创建动态变量?
    在Python中如何创建动态变量?
    在Python 中,动态创建变量的功能可以是一种强大的工具,尤其是在使用复杂的数据结构或算法时,Dynamic Variable Creation的动态变量创建。 Python提供了几种创造性的方法来实现这一目标。利用dictionaries 一种有效的方法是利用字典。字典允许您动态创建密钥并分...
    编程 发布于2025-07-12
  • `console.log`显示修改后对象值异常的原因
    `console.log`显示修改后对象值异常的原因
    foo = [{id:1},{id:2},{id:3},{id:4},{id:id:5},],]; console.log('foo1',foo,foo.length); foo.splice(2,1); console.log('foo2', foo, foo....
    编程 发布于2025-07-12
  • Python中嵌套函数与闭包的区别是什么
    Python中嵌套函数与闭包的区别是什么
    嵌套函数与python 在python中的嵌套函数不被考虑闭合,因为它们不符合以下要求:不访问局部范围scliables to incling scliables在封装范围外执行范围的局部范围。 make_printer(msg): DEF打印机(): 打印(味精) ...
    编程 发布于2025-07-12
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符提取最后一行,在Postgresql中,您可能需要遇到与在数据库中的每个不同标识相关的信息中提取信息的情况。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: ...
    编程 发布于2025-07-12
  • 为什么HTML无法打印页码及解决方案
    为什么HTML无法打印页码及解决方案
    无法在html页面上打印页码? @page规则在@Media内部和外部都无济于事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: bo...
    编程 发布于2025-07-12
  • 您如何在Laravel Blade模板中定义变量?
    您如何在Laravel Blade模板中定义变量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配变量对于存储以后使用的数据至关重要。在使用“ {{}}”分配变量的同时,它可能并不总是最优雅的解决方案。幸运的是,Blade通过@php Directive提供了更优雅的方法: $ old_section =“...
    编程 发布于2025-07-12
  • 在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在JTable中维护jtable单元格渲染后,在JTable中,在JTable中实现自定义单元格渲染和编辑功能可以增强用户体验。但是,至关重要的是要确保即使在编辑操作后也保留所需的格式。在设置用于格式化“价格”列的“价格”列,用户遇到的数字格式丢失的“价格”列的“价格”之后,问题在设置自定义单元格...
    编程 发布于2025-07-12
  • Python环境变量的访问与管理方法
    Python环境变量的访问与管理方法
    Accessing Environment Variables in PythonTo access environment variables in Python, utilize the os.environ object, which represents a mapping of envir...
    编程 发布于2025-07-12
  • 如何解决AppEngine中“无法猜测文件类型,使用application/octet-stream...”错误?
    如何解决AppEngine中“无法猜测文件类型,使用application/octet-stream...”错误?
    appEngine静态文件mime type override ,静态文件处理程序有时可以覆盖正确的mime类型,在错误消息中导致错误消息:“无法猜测mimeType for for file for file for [File]。 application/application/octet...
    编程 发布于2025-07-12
  • 对象拟合:IE和Edge中的封面失败,如何修复?
    对象拟合:IE和Edge中的封面失败,如何修复?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    编程 发布于2025-07-12
  • 如何在无序集合中为元组实现通用哈希功能?
    如何在无序集合中为元组实现通用哈希功能?
    在未订购的集合中的元素要纠正此问题,一种方法是手动为特定元组类型定义哈希函数,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    编程 发布于2025-07-12

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3