Обработка данных S3 с честной очередью - PullRequest
0 голосов
/ 02 июля 2019

Мне нужно обработать данные, сохраненные в корзине S3 с ключевой структурой client_id/uid. Обновления S3 должны обрабатываться FIFO. Один из способов добиться этого - поставить в очередь обновления SQS, полезную нагрузку сообщения - ключ S3, а затем обработать это.

Однако это несправедливо, если некоторые клиенты продвигают больше обновлений, чем другие.

Предположим, я хочу сделать обработку справедливой для client_id. В идеале я хотел бы получить пакет сообщений очереди, которые содержат самое старое сообщение для каждого client_id. Пакет должен содержать одно сообщение для каждого клиента. Затем я начну несколько рабочих обрабатывать пакет, как только они все закончат, перейдите к следующей итерации.

Возможно ли это сделать без создания очереди SQS для каждого клиента?

Стоит ли использовать другой сервис AWS?

1 Ответ

0 голосов
/ 09 июля 2019

Джон Ротенштейн указал мне правильное направление своим комментарием.

Рассмотрим очередь с 15 сообщениями для каждого клиента. Сообщения были добавлены вот так

for message = 1 to 15 {
  for client_id = 1 to 3 {
    sendMessage(messageGroupID=client_id)
  }
}

При получении сообщений в цикле при каждом вызове будет получаться следующее

10 messages for client_id = 1
10 messages for client_id = 2
10 messages for client_id = 3
5 messages for client_id = 1 and 5 messages for client_id = 2
5 messages for client_id = 3

То же самое верно при получении сообщений с параллельными потребителями.

Не совсем так, как я себе представлял, что это будет работать, но это решит мою проблему.

...