验证迁移

仅在行为、安全性、性能、可观测性和回退关口通过后才移动流量。

在切换之前,请执行以下验证步骤:

  1. 重放捕获的事件并比较预期输出、错误、状态代码、标题、正文方案、对象元数据、下游写入、副作用、日志和预警行为。
  2. 运行负载和故障测试,包括 p95/p99 持续时间、最长持续时间、内存空间、冷启动敏感路径、峰值并发、积压或队列持续时间、重试风暴、下游速率限制和容量症状。
  3. 测试格式错误的有效负载、重复事件、中毒消息、下游不可用、权限拒绝、密钥轮换、网络故障、超时行为、循环防护和回退条件。

切换到 OCI 函数

仅在行为、安全性、性能、可观测性和回退关口通过后才移动流量。

要切换到 OCI 函数,请执行以下步骤:

  1. 确认功能、性能、安全性和操作验证关口已过。
  2. 记录切换所有者、回滚所有者、成功标准、回滚触发器和预期恢复时间。
  3. 在切换窗口期间冻结不相关的应用程序更改。
  4. 尽可能将有限且可观察的工作量部分路由到 OCI Functions
  5. 监视业务输出、错误、超时、延迟、限制、积压和下游故障。
  6. 仅在商定的观察期过后才增加流量。
  7. 停止切换并在所需的成功标准失败时执行回退计划。
  8. 只有在应用程序和操作所有者接受生产结果之后,才开始下一个迁移波次。

如果基于百分比的路由不可用,则按触发器、存储桶、队列、区域或其他受控工作负载边界限制初始风险。

迁移后验证

确认迁移的工作负载满足其架构、行为、性能、安全性和操作要求。

要在迁移后进行验证,请执行以下步骤:

  1. 工作量角色、源库存、目标体系结构、替代方案、风险评级、服务限制和目标调用行为均有记录。
  2. 触发器、依赖性、安全性、网络和操作清单已足够完整,可供审核者重现目标决策。
  3. 捕获的事件生成预期状态代码、标头、正文方案、对象元数据、下游写入、副作用、日志和错误行为。
  4. 每个触发器都有有效负载格式、重试、失败、排序、批处理行为、幂等性、重复传送、死信或失败路由以及中毒消息(如果适用)的测试。
  5. p95/p99 持续时间,最长持续时间,内存空间,冷启动敏感路径,并发峰值,积压或队列存活时间,超时计数,限制或 429 行为以及下游速率限制满足工作负载要求。
  6. 并发控制可保护下游系统,避免重试风暴或无限制的积压增长。
  7. 允许的服务调用成功,被拒绝的路径安全失败。源代码、映像、日志、环境转储、CI 输出、堆栈跟踪或错误消息中不存在密钥。
  8. 通过批准的网络路径可以访问必需的专用和外部依赖项。在流量移动之前完成日志、度量、预警、仪表盘、跟踪、运行手册、回滚触发器、所有者、步骤、预期恢复时间和最终审批。

关于常见迁移问题和缓解措施

避免这些常见的迁移设计、集成和操作故障。
  • 将所有 Lambda 函数都相同:在选择目标之前,按角色、触发器、相关性、运行时行为、流量配置文件和操作需求对每个函数进行分类。
  • 过早选择 OCI 函数:在重构代码之前验证有效负载、超时、内存、依赖项、调用、并发、网络和集成是否合适。
  • 假设事件有效负载相同:在连接生产触发器之前构建 OCI 处理程序适配器并重放捕获的源事件。
  • 忽略层和本机依赖项:将依赖项打包到 OCI 函数映像或共享基础映像中,然后测试映像大小、启动、本机库和依赖项版本。
  • IAM 转换过于宽泛:将观察到的运行时操作映射到最少权限的 OCI 策略和测试拒绝的路径,而不仅仅是快乐路径访问。
  • 队列或流语义不同:设计显式幂等性、重试、部分故障、故障目标、排序和背压处理。
  • 对象事件导致循环:使用单独的输入和输出前缀或过滤器,并验证创建、更新、删除、重试、复制和循环预防行为。
  • 操作被推迟:在生产流量移动之前启用日志、度量、预警、仪表盘、运行手册、故障测试和回滚检查。