对于企业级的应用,灰度发布是必不可少的一环,下面基于传统云和AWS的serverless架构的全链路灰度链路实现,展开进行讨论。
想要实现一个灰度发布,通常需要考虑以下几个方面:
梳理清楚上述几个方面,基本就能实现一个灰度发布,下面基于传统云和AWS的serverless架构的灰度链路实现,展开进行讨论。
传统的k8s架构,请求链路基本雷同。这里以我司的架构为例,进行说明。
常规访问链路如下: 用户访问域名=》dns解析=》公网CLB=》内网网关=》对应服务k8s ingress => 对应k8s前端服务,可能是nginx,也可能是nginx+oss 如果是后端服务,会通过前端网关,将请求转发到后端网关,某些特定的后端服务,可能直接在前端服务的nginx进行转发到指定的服务上。
弄清楚了常规访问链路,灰度访问链路就很简单了:
基于上述步骤,灰度访问链路如下:
AWS serverless访问链路如下:
区别于传统云,AWS serverless架构的灰度可以层级会更少,因为cloudfront提供了丰富的功能,它既是cdn,又是边缘计算节点,还能缓存数据。cloudfront的特性,我能可以设计一个高性能且少层级的灰度架构:
利用cloudfront的边缘节点的储存,可以实现配置边缘化,减少请求的延迟:
以下是基于AWS serverless架构的灰度发布完整架构图:
下表对比了传统云和AWS Serverless灰度发布的主要特点:
对比维度 | 传统云灰度 | AWS Serverless灰度 |
---|---|---|
架构复杂度 | 较复杂,多层网关和服务 | 相对简单,层级较少 |
配置管理 | 基于Redis存储和同步 | DynamoDB + 边缘节点缓存 |
灰度判断位置 | 网关层 | CloudFront边缘节点 |
请求延迟 | 需经过多层网关,延迟较高 | 边缘节点判断,延迟低 |
运维成本 | 需要维护网关集群和Redis | Serverless架构,运维成本低 |
扩展性 | 需要手动扩容 | 自动弹性伸缩 |
容灾能力 | 依赖Redis可用性 | 边缘节点分布式架构,高可用 |
费用模型 | 固定成本+弹性成本 | 按使用付费 |
基于AWS serverless架构的灰度发布,可以实现高性能且少层级的灰度架构,利用cloudfront的边缘节点的储存,可以实现配置边缘化,减少请求的延迟。
本章只是介绍了灰度发布的基本实现,实际开发中,还有需要概念并未介绍到。例如 lambda 的权限管理,cloudfront function 的权限管理,cloudfront 的缓存策略,cloudfront 的监控告警等。以后章节中再进行详细介绍。
如果您有任何问题、建议或合作意向,欢迎通过此表单与我联系。我会尽快回复您的留言。