福勒说 --当旧版本仍在运行时,少量的流量被路由到金丝雀版本。
这是假设路由可以控制在负载均衡器/路由器级别。
我们有一个用例,在这个用例中,微服务会消耗掉一个队列并进行一些处理。我们想知道如何控制路由以将一部分流量定向到金丝雀用户。
我们考虑的选择之一是有一个单独的“金丝雀队列”,但问题是生产者现在必须知道这个队列,这听起来像是一种气味。
在涉及队列的地方,这似乎是一个常见的问题。关于金丝雀是如何应用于这类申请的,有什么想法吗?
发布于 2017-12-22 18:02:49
您需要解决的更重要的问题是如何处理在处理队列中的项时死亡的员工。
当一个工作人员正在处理一个项目时,您通常不希望它仍然在队列中等待其他工作人员处理。另一方面,如果从队列中删除项,并且只有工作人员知道正在处理的项,则如果工作人员崩溃,该信息将丢失。
要知道一个工人是否已经坠毁也是很棘手的。通常,超时可能被用作判断工作人员是否已经崩溃的足够好的近似。但是你会允许多少工人尝试处理这个项目。如果您有一个依赖于数据的错误,那么重新尝试另一个工作人员只会导致下一个员工死亡的风险。如果你不考虑到这一点,你所有的工人都会崩溃。另一方面,如果一个工作人员由于硬件故障而崩溃,您可能不想丢失它当时正在处理的项目。
如果你已经解决了以上所有的问题,那么你已经解决了大部分与金丝雀相关的风险。在这一点上,你可能会决定简单地让金丝雀的行为像任何其他工人。
然而,新版本输出损坏数据的潜在风险也存在。如果处理在其他方面是确定性的,那么您可以允许旧版本和金丝雀处理相同的输入并比较输出。如何实现这一点取决于您的总体系统设计,在某些系统中,解决方案可能是让工作人员将一小部分已经处理过的项插入金丝雀队列中,您的金丝雀可以再次执行相同的处理,您可以比较结果。
发布于 2020-08-04 08:39:16
有两种使用队列工作人员部署金丝雀的方法,即使用:
这两种方法都有各自的优缺点,详细介绍如下:http://www.varlog.co.in/blog/canary-deployment-workers/
https://serverfault.com/questions/889371
复制相似问题