You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Angular应用的健康状态上报至Akamai实现集群自动切换

Akamai CDN 联动 Angular 应用健康状态自动切换集群最优方案

核心思路

直接复用Akamai原生的源站健康检测与故障转移能力,避免额外开发复杂的上报逻辑,稳定性和可靠性更高,整体实现分3个核心步骤:

1. 部署独立的健康检查端点

不要将健康检查逻辑耦合在Angular业务代码中,避免前端资源加载失败时健康检测本身无法正常工作:

  • 在托管Angular应用的源站服务(如Nginx、Node.js服务、对象存储的自定义规则)中新增/health专用接口
  • 接口逻辑按需覆盖核心健康判定条件:Angular静态资源可正常访问、依赖的后端核心接口可用、集群资源负载正常等
  • 健康时返回200 OK状态码,异常时返回503 Service Unavailable状态码

注意:需要在CDN规则中配置/health路径不缓存,且允许Akamai健康检查的专用UA访问,避免被WAF或缓存规则拦截


2. 配置Akamai源站健康检测与自动切换规则

在Akamai Control Center中对源站组进行如下配置:

  • 健康检查路径填写上一步部署的/health接口
  • 检查频率建议生产环境设置为10秒/次,可根据业务容忍的故障切换延迟调整
  • 健康阈值配置为连续3次返回200判定为源站正常
  • 异常阈值配置为连续2次返回非200状态码判定为源站故障
  • 故障动作配置为自动将流量切换到备用集群的源站组
  • 可选优化:健康检查使用HEAD方法减少不必要的带宽消耗,如有内容校验需求可改为GET方法

3. 可选增强:客户端侧异常补充上报

如果需要覆盖源站健康检查未识别到的边缘侧异常(比如部分区域用户访问异常、前端代码运行报错等),可以在Angular中新增全局拦截器补充上报状态:

import { Injectable } from '@angular/core';
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpErrorResponse } from '@angular/common/http';
import { Observable, catchError, throwError } from 'rxjs';

@Injectable()
export class HealthReportInterceptor implements HttpInterceptor {
  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(req).pipe(
      catchError((error: HttpErrorResponse) => {
        // 仅上报4xx/5xx异常状态
        if (error.status >= 400) {
          // 使用sendBeacon保证页面卸载时上报请求也能正常发出
          navigator.sendBeacon(
            '/.well-known/akamai-health-report', 
            JSON.stringify({
              status: error.status,
              requestPath: req.url,
              timestamp: Date.now()
            })
          );
        }
        return throwError(() => error);
      })
    );
  }
}

之后在Akamai中配置对应的数据收集规则,将客户端上报的异常数据纳入健康判定的补充维度,即可进一步提升异常检测的灵敏度。

内容的提问来源于stack exchange,提问作者jemadd04

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:24:04