Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 在AWS Lambda中进行影子发射是否可行? 什么是影子发射?_Amazon Web Services_Aws Lambda_Aws Sdk_Aws Sdk Js - Fatal编程技术网

Amazon web services 在AWS Lambda中进行影子发射是否可行? 什么是影子发射?

Amazon web services 在AWS Lambda中进行影子发射是否可行? 什么是影子发射?,amazon-web-services,aws-lambda,aws-sdk,aws-sdk-js,Amazon Web Services,Aws Lambda,Aws Sdk,Aws Sdk Js,影子启动意味着您启动了新版本,但尚未获得实时流量。旧版本的流量以1:1的比例复制到新版本中,因此您可以根据旧版本衡量新功能的性能和结果,而不会影响实时系统 尝试的方法 我已经尝试过用一个“代理”函数构建类似的东西,该函数异步调用新函数并转储结果,而同步调用旧函数并返回结果 问题是副作用:如果这两个函数都执行某些操作,例如在DynamoDB中,则由于影子启动,DB中可能存在无效状态 目标 我想测试特定lambda函数的新代码版本 预期用途示例 我有一个计算斐波那契的函数,并将结果与时间戳一起存储在

影子启动意味着您启动了新版本,但尚未获得实时流量。旧版本的流量以1:1的比例复制到新版本中,因此您可以根据旧版本衡量新功能的性能和结果,而不会影响实时系统

尝试的方法 我已经尝试过用一个“代理”函数构建类似的东西,该函数异步调用新函数并转储结果,而同步调用旧函数并返回结果

问题是副作用:如果这两个函数都执行某些操作,例如在DynamoDB中,则由于影子启动,DB中可能存在无效状态

目标 我想测试特定lambda函数的新代码版本

预期用途示例 我有一个计算斐波那契的函数,并将结果与时间戳一起存储在我的实时系统的DynamoDB中

此函数被称为多个链中的一个

由于计算它应该更有效,我用这个新算法实现了这个函数

现在我想测试一个假设,即新函数比旧函数性能更好。 所以我将其部署到AWS lambda,以获取实际的实时流量作为测试数据

问题

使用当前的工具,我发现只有两次执行该函数,从而在DyDoDB中创建两个条目,因为在DyDoDB中的数据处于意外的无效状态,所以我认为不必要的副作用。

如果我在新函数中模拟外部服务,它可能总是比旧函数性能更好,因为时间昂贵的外部服务无法访问,因此我的结果将不正确

问题:
是否有可能在没有这些副作用的情况下启动AWS lambda函数的新版本

我认为您可以使用Lambda别名和路由配置将一部分流量发送到第二个功能版本。基本上,事件源现在已映射为函数的别名ARN,然后您可以配置流量权重,以将其中的大多数%路由到当前版本,并将其他%路由到新版本,例如

文档中的一些信息和示例:


您可以使用单个Lambda将事件发送到AWS SNS,AWS SNS将事件分发到不同的SQS队列中。然后旧版本和新版本处理不同的SQS队列,但这些事件完全相同

您提到使用CloudFront,因此一个好的选择可能是使用Lambda@Edge根据CloudFront请求执行此功能

基本上,每次收到CloudFront请求时都可以执行一些代码。我发送的链接是关于A/B测试的,这意味着您选择向实例A或实例B发送请求。但是没有任何东西阻止您向实例A和实例B发送请求


这对用户来说是完全透明的。您可以部署两个版本,执行两个版本(或按一定比例执行),用户体验将是相同的。

您能否详细说明,您在这里试图实现什么,与prod版本相比,您希望在这个“影子”版本中测试什么?可能有一种不同的方法,而不是从一个复制到另一个。添加了更多上下文和一个具体示例您手头上只有一个AWS生产数据库?您的lambda函数如何获得流量?例如:api网关还是使用不同的服务事件?lambda函数从AWS Step函数中链接,并从中获取其流量我知道,但这是所谓的“金丝雀启动”,而不是我打算实现的影子启动。部分发送流量不是问题,1:1拷贝和它的副作用是很难的部分,但仍然有与中所述的副作用相同的大问题question@SimonFrey那么为什么不让每个lambda写入不同的dynamo表呢?如果它们同时运行并写入同一个表-当然会有这些“副作用”。@LLL是的,可能是需要不同数据库的唯一解决方案