接入指南:受监控部署策略的第三方健康评估机制)
后端DevOps云原生微服务【免费下载链接】spinnakerSpinnaker is an open source, multi-cloud continuous delivery platform for releasing software changes with high velocity and confidence.项目地址https://gitcode.com/gh_mirrors/sp/spinnaker点击查看免费下载Deployment Monitor部署监控器是 Spinnaker Orca 中「受监控部署Monitored Deploy」策略的核心外部组件它由第三方服务实现在部署进行的关键节点接收 Orca 发来的 HTTP 回调并依据对新实例健康状态的分析结果来决定部署是继续、暂停等待、直接完成还是中止回滚。本文以 orca-deploymentmonitor/readme.md 为骨架结合模块源码完整说明部署监控器的三端点接口、请求/响应数据结构、orca.yml注册配置以及 Orca 内部的调用链路读者读完后可以独立实现一个符合规范的 Deployment Monitor 并接入 Orca。一、背景Monitored Deploy 策略与 Deployment Monitor 的定位在 Spinnaker 的部署流程中monitored是一种特殊的高阶部署策略部署不是按固定的容量百分比盲推进而是每完成一个部署步骤后暂停交由外部的健康评估服务判断新实例是否健康、能否继续。这一策略由 MonitoredDeployStrategy.groovy 实现类上标注了ConditionalOnProperty(value monitored-deploy.enabled)即只有启用该配置时策略才生效其中部署前会将容量capacity置为min: 0, max: 0, desired: 0先创建空的新服务器组随后按照deploySteps如 10%、20%、……、100%逐步扩容每一步之间都插入健康评估环节部署过程中会动态编排NotifyDeployStartingStage、EvaluateDeploymentHealthStage、NotifyDeployCompletedStage等合成阶段分别对应下文介绍的三个回调端点。Deployment Monitor 的职责它由第三方如日志监控、金丝雀分析、自定义健康评分服务实现为受监控部署提供「新实例健康/状态」这一输入。Orca 本身不评判健康只负责在正确的时机把部署上下文发给监控器并根据监控器的指令决定下一步动作。二、Deployment Monitor 接口三个必须暴露的 HTTP 端点监控器必须以POST方式暴露三个端点。Orca 侧的接口定义见 DeploymentMonitorService.java这是用 Retrofit 声明的客户端契约public interface DeploymentMonitorService { POST(deployment/starting) CallEvaluateHealthResponse notifyStarting(Body RequestBase request); POST(deployment/completed) CallResponseBody notifyCompleted(Body DeploymentCompletedRequest request); POST(deployment/evaluateHealth) CallEvaluateHealthResponse evaluateHealth(Body EvaluateHealthRequest request); }三个端点相对于baseUrl拼接具体语义如下1.POST /deployment/starting—— 部署启动通知Orca 在受监控部署开始时调用此端点。此时监控器可以中止整个部署——例如当它发现自身并没有被配置为监控当前应用时可以返回abort让部署立即终止避免出现「无人监控却继续灰度」的危险局面。2.POST /deployment/completed—— 部署完成通知Orca 在部署流程结束无论成功或失败时调用此端点。它纯粹是信息性通知监控器的响应会被忽略不会影响流程。请求中携带部署结果状态见下文数据结构。3.POST /deployment/evaluateHealth—— 部署步骤健康评估Orca 每完成一个部署步骤例如扩到 10%后调用此端点。这是受监控部署中最关键的决策点监控器可以在此时返回四种指令之一对应 EvaluateHealthResponse.java 中的NextStepDirective枚举指令JSON 值含义效果wait健康尚无法确定需要更多时间评估例如约需 10 分钟观察新实例日志Orca 等待一段时间后重试代码注释给出的重试间隔约为 30 秒重试总时长受maxAnalysisMinutes约束abort健康状态差终止部署如果用户在阶段配置中请求了回滚将触发回滚continue健康良好按默认逻辑继续下一步部署complete健康极佳或策略要求跳过中间步骤直接部署到 100%注UNSPECIFIED是内部占位值监控器不应返回如果未指定Orca 会走常规异常处理路径。每次evaluateHealth调用还携带currentProgress当前已部署百分比监控器可以据此判断当前处于哪个部署步骤。三、请求与响应的数据结构3.1 通用请求字段RequestBase所有三个端点的请求都包含部署上下文字段定义见 RequestBase.java字段含义来源说明application正在部署的应用名取自执行execution的应用executionId本次流水线执行的 ID同一流水线内多次调用starting / completed / evaluateHealth保持不变例如一条流水线中用受监控策略部署 3 个集群它们的executionId相同stageId阶段 ID始终唯一notifyStarting与evaluateHealth对同一集群部署的stageId不同但对同一部署步骤同一百分比的多次evaluateHealth重试stageId保持不变deploymentId部署 ID对给定集群部署的所有监控调用保持不变源码中取父阶段 IDoldServerGroup旧服务器组名称来自内部阶段数据newServerGroup新服务器组名称同上account新服务器组所属账户同上region新服务器组所在区域同上cloudProvider使用的云提供商同上parameters用户在流水线阶段配置中指定的参数不透明 MapSpinnaker 本身不使用直接透传给监控器一个POST /deployment/starting的请求体示例JSON 序列化后{ application: myapp, executionId: exec-12345, stageId: stage-67890, deploymentId: deploy-24680, oldServerGroup: myapp-v001, newServerGroup: myapp-v002, account: prod, region: us-west-2, cloudProvider: aws, parameters: { allowedErrorRate: 0.5, warmupMinutes: 10 } }3.2evaluateHealth的专属字段EvaluateHealthRequest在RequestBase基础上增加两个字段见 EvaluateHealthRequest.javanewInstances新实例 ID 列表源码中标注了TODO(mvulfson)说明当前实现尚未填充该字段currentProgress当前已部署百分比取自内部阶段数据currentProgress。3.3completed的专属字段DeploymentCompletedRequest见 DeploymentCompletedRequest.java在RequestBase基础上增加status部署状态取值为success/failure/not_performed枚举DeploymentStatusrollback回滚操作的状态取值同上若用户未请求回滚则为not_performed。示例{ application: myapp, executionId: exec-12345, stageId: stage-67890, deploymentId: deploy-24680, oldServerGroup: myapp-v001, newServerGroup: myapp-v002, account: prod, region: us-west-2, cloudProvider: aws, parameters: {}, status: success, rollback: not_performed }3.4evaluateHealth的响应结构EvaluateHealthResponse监控器对/deployment/starting与/deployment/evaluateHealth均返回EvaluateHealthResponse包含两个字段见 EvaluateHealthResponse.javanextStep类型为DeploymentStep见 DeploymentStep.java包含percent希望下一步部署到的百分比、instanceCount实例数、directiveabort/complete/continue/waitstatusReason类型为StatusReason用于说明决策原因见下文。响应示例健康未就绪请求稍后重试{ nextStep: { percent: 10, instanceCount: 3, directive: wait }, statusReason: { message: New instances are still warming up, re-evaluating in ~30s, logSummary: [ 3/3 instances in service, error rate within threshold ], additionalData: [ { key: dashboard, text: View deployment dashboard, link: http://logmonitor.example.com/dashboards/myapp-v002 } ] } }3.5 决策原因说明StatusReason监控器应当尤其是在失败场景下在响应中携带决策原因见 StatusReason.javamessage人类可读的原因描述logSummary日志摘要列表帮助用户理解评估依据additionalData附加数据列表每项包含key、text、link见 StatusAdditionalData.java可携带指向监控面板的超链接。这些信息会展示在 DeckSpinnaker UI中让用户清楚理解部署为何按当前方式推进——例如「因错误率超标而中止」而非看起来毫无理由的失败。四、监控器注册orca.yml中的白名单机制部署监控器必须先注册到orca.yml中才会被使用。这是一种安全机制Orca 不希望部署过程中随意请求未知 URL。配置绑定类为 MonitoredDeployConfigurationProperties.java前缀为monitored-deploySpring Boot 松绑定下文档中的monitoredDeploy写法同样可解析。完整的注册示例继承自原文档monitoredDeploy: enabled: true deploymentMonitors: - id: id1 name: LiveLogMonitor baseUrl: http://logmonitor.aws.com/spinnaker failOnError: false maxAnalysisMinutes: 40 - id: id2 name: LocalTestMonitore baseUrl: http://localhost:8080/v1 failOnError: true maxAnalysisMinutes: 10参数说明结合 DeploymentMonitorDefinition.java 补充源码确认的默认值与额外字段参数含义备注 / 默认值id监控器唯一 ID在阶段 JSON 中通过该 ID 引用必填未注册的 ID 会导致UserException: Deployment monitor not configured, ID: xxxname用户友好名称展示在 Deck UI 中必填baseUrl监控器 API 的基础 URL三个端点拼接在其后如http://host/v1/deployment/startingfailOnError与监控器通信失败时是否视为部署失败并中止部署源码默认值为true原文档建议该值始终为true避免健康评估静默失效maxAnalysisMinutes允许健康评估的最长时间分钟默认值为 30DEFAULT_MAX_ANALYSIS_MINUTES 30超时未得到有效响应将导致部署失败该参数同时约束/starting与/evaluateHealth两个端点的响应时限除上述字段外DeploymentMonitorDefinition.java 还定义了源码级的两个可选字段supportContact支持/联系信息链接展示在 UI 中便于用户在部署失败时快速找到监控器负责人stable标记监控器是否稳定stable false的监控器不会出现在 Deck UI 的下拉列表中但仍可在阶段 JSON 中直接引用相当于灰度准入机制。五、Orca 内部调用链路与验证5.1 客户端工厂DeploymentMonitorServiceProviderDeploymentMonitorServiceProvider.java 负责按注册表创建并缓存监控器客户端启动时打印所有已注册监控器的名称日志getDefinitionById(id)按 ID 查找定义找不到时抛出用户异常防止阶段引用未注册监控器getServiceByDefinition通过ServiceClientProvider基于baseUrl创建 Retrofit 服务实例并以id为键缓存serviceCache同一监控器复用同一客户端连接。在 MonitoredDeployStrategy.groovy 的composeBeforeStages中可以看到部署真正开始前Orca 会先调用deploymentMonitorServiceProvider.getDefinitionById(stageData.deploymentMonitor.id)校验阶段引用的监控器是否已注册——校验失败则提前中止这正是注册白名单机制的落地实现。5.2 阶段级参数与覆盖监控器不仅可以在全局orca.yml注册还可以在单个部署阶段的 JSON 中携带实例级配置见 DeploymentMonitorStageConfig.javaid引用已注册监控器的 IDparameters不透明参数 Map随每个请求透传给监控器见RequestBase.parametersmaxAnalysisMinutesOverride针对本次部署覆盖全局maxAnalysisMinutesfailOnErrorOverride针对本次部署覆盖全局failOnError。这为不同应用/不同流水线使用不同评估策略提供了灵活性。5.3 超时与重试行为从代码注释可以确认完整的等待语义监控器返回wait后Orca 大约等待30 秒~30s后重新调用evaluateHealth重试不能无限进行对于每个监控器健康评估的总时长上限是maxAnalysisMinutes未配置时默认30 分钟若监控器在时限内持续以 HTTP 错误响应或干脆不响应且failOnError true部署将被判定失败并终止。这意味着监控器实现应把「评估中」的状态尽快以wait返回而不是长时间阻塞 HTTP 请求从而把超时控制权留给 Orca 侧。5.4 测试佐证模块内包含单元测试 DeploymentMonitorCapabilitiesSpec.groovy用于验证监控器定义/能力解析等逻辑可作为实现同类功能时的参考。六、最小可运行实现要点实战清单基于以上契约实现一个 Deployment Monitor 的最小清单如下实现三个POST端点/deployment/starting、/deployment/evaluateHealth、/deployment/completed路径拼在注册时的baseUrl之后正确解析请求 JSON三个端点共享RequestBase中的部署上下文字段evaluateHealth额外有currentProgress与newInstances当前为空列表completed额外有status与rollback在evaluateHealth中返回四选一指令wait评估中、continue健康继续、complete直接 100%、abort不健康终止总是携带statusReason给出message与可选的logSummary/additionalData让 Deck UI 能向用户解释部署决策评估耗时不要超过maxAnalysisMinutes评估过程通过wait 快速重试表达超时由 Orca 兜底判定失败在orca.yml中注册并启用配置monitoredDeploy.enabled: true为每个监控器分配唯一id、baseUrl按需设置failOnError建议true与maxAnalysisMinutes在部署阶段 JSON 中按id引用监控器可通过阶段级parameters、maxAnalysisMinutesOverride、failOnErrorOverride做单次部署的定制。七、总结Deployment Monitor 是 Spinnaker Orca 受监控部署策略与外部健康评估能力之间的标准接口Orca 负责节奏控制与超时兜底第三方监控器负责真正的健康判断二者通过三个明确的 HTTP 端点和一套完整的 JSON 数据结构解耦协作。接入方只需实现端点、返回合规指令并在orca.yml完成注册即可让 Spinnaker 的部署流程具备「按真实健康状态驱动灰度推进、必要时自动中止或直达 100%」的能力。更多细节可继续阅读 orca-deploymentmonitor/readme.md 及其同目录下的源码与测试。赞分享后端DevOps云原生微服务【免费下载链接】spinnakerSpinnaker is an open source, multi-cloud continuous delivery platform for releasing software changes with high velocity and confidence.项目地址https://gitcode.com/gh_mirrors/sp/spinnaker点击查看免费下载相关推荐Magic Resume部署监控健康检查与自动回滚机制Magic Resume部署监控健康检查与自动回滚机制 ? 引言为什么需要专业的部署监控 在现代Web应用部署中简历编辑器这类关键业务系统对稳定性和可用前端AI 应用开发工具Tortoise-TTS模型部署监控健康检查与自动恢复机制Tortoise TTS模型部署监控健康检查与自动恢复机制 在Tortoise TTS文本转语音模型的实际部署中服务稳定性直接影响用户体验。本文将从健康人工智能语音音频Voyager 資料夾管理指南為 Gemini 與 AI Studio 的 AI 對話打造真正的「檔案系統」Voyager 資料夾管理指南為 Gemini 與 AI Studio 的 AI 對話打造真正的「檔案系統」 整理 AI 聊天記錄以前為什麼那麼難VoyaAI 应用前端上一篇终极免费Photoshop替代方案PhotoGIMP让GIMP界面与Photoshop完全一致下一篇Mac Mouse Fix终极指南让你的普通鼠标比苹果触控板更好用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考