Назад | Перейти на главную страницу

Канарский выпуск, когда задействованы очереди

Фаулер говорит небольшой процент трафика направляется в версию Canary, в то время как старая версия все еще работает.

Это предполагает, что маршрутизацией можно управлять на уровне балансировщика нагрузки / маршрутизатора.

У нас есть пример использования, когда микрослужба потребляет данные вне очереди и выполняет некоторую обработку. Нам было интересно, как можно управлять маршрутизацией, чтобы направлять подмножество трафика к канареечному потребителю.

Один из вариантов, который мы рассмотрели, - иметь отдельную «очередь Canary», но проблема в том, что производители теперь должны знать об этой очереди, которая звучит как запах.

Это похоже на обычную проблему, когда возникают очереди. Любые идеи о том, как Canary была адаптирована для таких приложений?

Более важный вопрос, который вы должны решить, - это как вы справляетесь с воркером, который умирает при обработке элемента из очереди.

Пока один воркер обрабатывает элемент, вы обычно не хотите, чтобы он оставался в очереди для обработки другими воркерами. С другой стороны, если элемент удаляется из очереди и только рабочий знает об элементе, который обрабатывается, то эта информация будет потеряна в случае сбоя рабочего.

Также сложно узнать, разбился ли рабочий. Часто тайм-аут может использоваться как достаточно хорошее приближение к тому, разбился ли рабочий процесс. Но скольким рабочим вы позволите попробовать обработать этот элемент? Если у вас есть ошибка, зависящая от данных, существует риск того, что повторная попытка на другом работнике просто приведет к смерти следующего рабочего. Если вы не примете это во внимание, все ваши воркеры могут выйти из строя. С другой стороны, если воркер упал из-за аппаратного сбоя, вы, вероятно, не захотите потерять элемент, который он обрабатывал в то время.

Если вы уже рассмотрели все вышеперечисленное, значит, вы устранили большинство рисков, связанных с канарейкой. В этот момент вы можете просто позволить канарейке вести себя как любой другой рабочий.

Однако существует также потенциальный риск вывода поврежденных данных новой версией. Если в остальном обработка детерминирована, то вы можете разрешить старой версии и канарейке обрабатывать один и тот же ввод и сравнивать выводы. Как реализовать это, зависит от общей конструкции вашей системы. В некоторых системах решение может заключаться в том, чтобы рабочие вставляли небольшой процент уже обработанных элементов в канареечную очередь, где ваши канарейки могут снова выполнять ту же обработку, и вы можете сравнивать результаты.

Есть 2 подхода к канареечному развертыванию с работниками очереди, то есть с использованием:

  1. Выделенная очередь канареек
  2. Обычная очередь для канареечных и неканареечных рабочих

Оба этих подхода имеют свои плюсы и минусы, которые подробно описаны здесь: http://www.varlog.co.in/blog/canary-deployment-workers/