【发布时间】:2020-05-16 00:10:57
【问题描述】:
什么是影子发射?
影子发布意味着您启动了新版本,但尚未获得实时流量。旧版本的流量会 1:1 复制到新版本中,因此您可以在不影响实时系统的情况下衡量新功能与旧功能的性能和结果。
尝试过的方法
我已经尝试使用“代理”函数自己构建类似的东西,该函数异步调用新函数并转储结果,同步调用旧函数返回其结果。
问题是副作用:如果两个函数都做某事,例如在 DynamoDB 中,由于影子启动,数据库中可能存在无效状态。
目标
我想测试特定 lambda 函数的新代码版本。
预期使用示例
我有一个函数可以计算斐波那契 recursive 并将结果与时间戳一起存储在我的实时系统中的 DynamoDB 中。
这个函数是通过AWS Step Functions 调用的。
因为计算它应该更有效iterative 我用这个新算法实现了这个函数。
现在我想测试新功能比旧功能性能更高的假设。 所以我影子部署它 AWS lambda 以获得实际的实时流量作为测试数据。
问题
使用当前工具,我发现只能执行两次该函数,从而在 DynamoDB 中创建两个条目,我认为这是不希望的副作用,因为我在 DynamoDB 中的数据处于意外的无效状态。
如果我在新函数中模拟外部服务,它可能总是比旧的性能更好,因为无法访问耗时的外部服务,因此我的结果会不正确。
问题
是否可以在没有这些副作用的情况下影子启动新版本的 AWS lambda 函数?
【问题讨论】:
-
您能否详细说明一下,您想在这里实现什么,与 prod 版本相比,您想在这个“影子”版本中测试什么?可能有不同的方法,而不是从一个复制到另一个。
-
添加了更多上下文和具体示例
-
您在 AWS 上只有一个生产数据库?
-
你的 lambda 函数是如何获得流量的?例如:api-gateway 或具有不同的服务事件?
-
lambda 函数从 AWS Step Functions 中链接并从那里获取流量
标签: amazon-web-services aws-lambda aws-sdk aws-sdk-js