Очередь сообщений электронной почты - рабочие X и прекращение перекрытия - PullRequest
3 голосов
/ 19 марта 2011

У меня большая очередь писем, которые загружаются в таблицу MySQL, когда вокруг моего сайта происходят события. В любое время может быть 1к-2к, ожидающих отправки в любое время.

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

Мой вопрос о том, чтобы не позволять работникам получать одно и то же письмо. Я слышал следующие варианты.

  1. Используйте SELECT FOR UPDATE, чтобы заблокировать строку
  2. Используйте отметку времени, чтобы сообщить работникам, что она была взята и когда
  3. Иметь родителя, который отслеживает детей и делегирует работу

Я вижу ценность в каждом из них, но также много читаю / пишу в БД. Так что бы вы сделали?

Делаем это через PHP и MySQL

1 Ответ

2 голосов
/ 19 марта 2011

Другой быстрый и грязный вариант, если у вас есть первичный ключ, который он либо случайный, либо структурированный, позволяет каждому из N рабочих получать только те письма, где key%N==i с i идентификатором работника.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...