Testing 在流量镜像时防止重复写入API调用

Testing 在流量镜像时防止重复写入API调用,testing,istio,mirroring,Testing,Istio,Mirroring,我正在考虑在Istio测试版本中使用流量镜像 镜像流量将意味着像订单和付款等编写API被多次调用,我不希望这样,否则我将向客户收取两次费用并向他们发送一个重复的产品 是否有标准的方法来防止这种情况(在生产中存根似乎是一件奇怪的事情),或者镜像是否只适用于读取API?问题 存在一个具有流量的镜像设置 尽管这些镜像请求被镜像为“”,并且镜像服务的回复(由特使代理侧车)被丢弃到/dev/null,而没有返回给调用方,但它仍然使用此api 解决方案 如评论中所述 在我看来,您应该为您的测试目的添加一

我正在考虑在Istio测试版本中使用流量镜像

镜像流量将意味着像订单和付款等编写API被多次调用,我不希望这样,否则我将向客户收取两次费用并向他们发送一个重复的产品

是否有标准的方法来防止这种情况(在生产中存根似乎是一件奇怪的事情),或者镜像是否只适用于读取API?

问题 存在一个具有流量的镜像设置

尽管这些镜像请求被镜像为“”,并且镜像服务的回复(由特使代理侧车)被丢弃到/dev/null,而没有返回给调用方,但它仍然使用此api


解决方案 如评论中所述


在我看来,您应该为您的测试目的添加一些路径,因此这只能由您或您的组织进行测试,而客户不应该参与其中


本主题由Christian Posta详细描述

当我们将新版本的服务和镜像流量部署到测试集群时,我们需要注意对环境其余部分的影响。我们的服务通常需要与其他服务协作(查询数据、更新数据等)。如果与其他服务的协作只是读取或获取请求,并且这些协作者能够承担额外的负载,那么这可能不是问题。但是,如果我们的服务改变了我们合作者中的数据,我们需要确保这些调用被引导到测试Double,而不是真正的生产流量

<> P>有一些方法可以考虑,它们都在上面的链接中描述:

  • 为某些测试概要文件删除协作服务
  • 合成交易
  • 虚拟化测试集群的数据库
  • 具体化测试集群的数据库
实际上,将生产流量镜像到我们的测试集群(无论该集群存在于生产环境还是非生产环境中)是降低新部署风险的一种非常有效的方法。Twitter和亚马逊等大型网络运营公司多年来一直在这样做。这一方法带来了一些挑战,但正如上面模式中所讨论的,存在着体面的解决方案


如前所述,当您使用镜像流量时,这些请求被镜像为“触发并忘记”,这意味着将丢弃响应,镜像服务的回复将被丢弃(由特使代理侧车)而不会返回给调用者,所以,如果我理解正确,镜像服务不应该给客户回电话,你提到的事情也不应该发生。你测试过了吗?真的发生了吗?是的。流量镜像到的API(createOrder)创建订单。因此,尽管忘记了响应,但顺序仍然是由API创建的。在我看来,您应该为测试目的添加一些路径,因此这只能由您/您的组织进行测试,而客户不应该参与其中。本主题由Christian Posta详细介绍。这是一个很好的建议,谢谢。