随着 Serverless 架构的流行,越来越多的企业开始使用 Serverless 架构来构建应用程序。Serverless 架构的一个优点在于,可以快速响应用户需求,并实现高可用性。不过,在正式上线之前,灰度发布技术可以用来降低线上故障风险。
什么是灰度发布?
灰度发布(Gray Release),也叫灰度测试、金丝雀发布,是指在不影响全部用户的情况下,将新功能、新版本等部署到一部分用户中进行测试,如果测试通过,再推广到全量用户中。与传统的发布方式相比,灰度发布可以减少线上故障的风险,提高系统的可用性。
Serverless 架构中实现灰度发布的挑战
Serverless 架构的服务是基于事件触发的,因此,在原生 Serverless 架构中,实现灰度发布有一些挑战。Serverless 架构的 Lambda 函数最大的好处是随时可扩展,您不必考虑机器的数量或负载分配。这意味着您可以根据需要快速增加或减少 Lambda 函数的数量,从而快速响应客户需求。不过,灰度发布需要满足以下条件:
- 可以平滑地将流量从原来的版本转移到新版本;
- 可以控制灰度用户的流量百分比;
- 可以灵活地配置不同的灰度用户。
Serverless 架构中需要解决的最大挑战是如何将流量平滑地从原来的版本转移到新版本。由于 Lambda 函数是无状态的,因此需要将灰度用户的信息存储在外部数据库或缓存服务中。由于 Serverless 架构中很少有长期任务或实例,因此要有效地管理用户与版本之间的映射关系。
Serverless 架构中实现灰度发布的解决方案
Serverless 架构中有几种方案可以实现灰度发布。以下是三种常见的解决方案:
方案一:使用 API 网关
API Gateway 可以作为 Serverless 架构中灰度发布的入口。考虑这样一种用例:
- 将两个 API Gateway 端点映射到两个 Lambda 函数;
- 将过去的版本映射到函数 A,新版本映射到函数 B;
- 将新版本与 API Gateway 关联,控制不同用户对两个函数的访问权限;
- 通过 API Gateway 中的缓存和正则表达式控制用户流量的百分比。
-- -------------------- ---- ------- -- -- ------- --------------- - ----- ------- -- - --------------------- -- -- ------- ----- -------- - - ----------- ---- ----- --------------------- ---- -------- ----- -- ------ --------- -- -- -- ----- --------------- - ----- ------- -- - --------------------- -- -- ------- ----- -------- - - ----------- ---- ----- --------------------- ---- -------- ----- -- ------ --------- --
方案二:使用 AWS Lambda
如果您不想使用 API Gateway,可以使用 Lambda 函数本身作为灰度发布的入口。在 Lambda 函数中,可以通过插入固定比例的 sleep 时间,模拟固定流量的灰度测试。
-- -------------------- ---- ------- -- -- ------- --------------- - ----- ------- -- - --------------------- -- -- ------- ----- -------- - - ----------- ---- ----- --------------------- ---- -------- ----- -- ------ --------- -- -- -- ----- --------------- - ----- ------- -- - --------------------- -- -- ------- ----- -------- - - ----------- ---- ----- --------------------- ---- -------- ----- -- ------ --------- -- -- ------ --------------- - ----- ------- -- - ----- ------ - -------------- --------- - ---- - -- -- --- ----- ------------------ ---- -------- ----- ------ ------------------------ - ---- - -- -- --- --- ------------------ ---- -------- ----- ------ ------------------------ - --
方案三:使用 AWS CodeDeploy
如果您的 Serverless 应用程序需要集中部署,并且您希望使用灰度发布来控制流量,CodeDeploy 可以是一个很好的执行方案。CodeDeploy 可以将新版本部署到所有的 Lambda 函数中,并根据配置文件实现流量控制。
总结
灰度发布是一种可以减少线上故障风险的方式。在 Serverless 架构中,要实现灰度发布需要考虑如何平滑地将流量从原来的版本切换到新版本。以上提到的三种方案可以在 Serverless 架构中实现灰度发布。
以上内容只是灰度发布的一个简单框架,实际的灰度发布需要结合具体的业务需求,具体实现细节也需要根据具体情况进行优化和完善。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65179cab95b1f8cacdfc8f5e