как спроектировать работника без сохранения состояния для обработки сообщения только один раз с помощью Uber Cadence

пожалуйста, помогите нам принять Cadence: D

Вот текущий дизайн. Некоторые работники без сохранения состояния извлекают сообщения из централизованной очереди для их обработки. Сложная бизнес-логика задействована в worker, а также в функции Deduper, которая использует отдельный кластер Redis в качестве удаленного распределенного кеша (высокая согласованность с использованием консенсуса). В этом кэше хранятся только идентификаторы сообщений и их статусы «в процессе», «завершено» и «не начато». Очевидно, что ожидается, что воркер обработает незавершенное сообщение.

Лично мне хотелось бы переосмыслить все возможные решения. Мне на ум приходит модель рабочего процесса, потому что у меня есть приятный опыт работы с AWS SWF. Поскольку все наши сервисы написаны на ходу и работают в нашем собственном центре обработки данных, я хотел бы попробовать Uber Cadence (открытый исходный код SWF).

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

Итак, я перечисляю все требования здесь

  1. избегайте обработки сообщения дважды несколькими рабочими.
  2. 50 тыс. Запросов / с, поэтому необходимо масштабируемое решение
  3. низкая задержка на p99, <300 мс, надеюсь

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

Вопросов:

  1. Вот и интересно, как спроектировать дедупер при переходе на Cadence?

Читая документ, Cadence предоставляет возможность уникальности идентификатора рабочего процесса внутри домена. Возможно, я могу использовать идентификатор сообщения как часть идентификатора рабочего процесса, например, WF-00001, чтобы гарантировать отсутствие дубликатов внутри домена. Пока я использую только один домен, проблем не будет. Тогда я не знаю ограничений этого подхода. например, количество рабочих процессов, разрешенных внутри домена. у нас скорость обработки сообщений 50к / с (пиковая)

Я не уверен, что это правильный подход. Приветствуются новые идеи.

  1. Есть ли веб-страница со списком всех ограничений Cadence? он нужен нам для оценки Cadence.

Спасибо

SWF Step Function Uber Cadence


person cong    schedule 07.08.2019    source источник


Ответы (1)


На высоком уровне Cadence хорошо подходит для вашего случая использования.

  1. Дедупер довольно прост. Рабочий процесс хранит карту идентификаторов последних запросов (или всех запросов, которые принадлежат данному идентификатору рабочего процесса, если их количество ограничено) и выполняет проверку на дублирование.

  2. Большинство ограничений Cadence зависят от развертывания и настраиваются. Давайте обсудим ваш конкретный вариант использования в Slack.

person Maxim Fateev    schedule 07.08.2019