Помогите мне понять, как организация очередей сообщений работает

Использование PHP в течение достаточно долгого времени теперь и я задавался вопросом, о чем эта целая "очередь сообщений" - все. Давайте возьмем Facebook, например. Я могу обновить свое состояние, но затем я должен показать, что обновления статуса всем моим друзьям (скажем, у меня есть 3 000 подписчиков). Еще больше работы, если существуют комментарии и они должны быть уведомлены всем друзьям, которые оставили комментарий по электронной почте. С примером я видел, кажется, что весь очередь сообщений делает взятие "сообщение" (мое обновление статуса) и помещает его в некоторое временное пространство (файловая система или Таблица базы данных). У меня затем есть задание крона, которое вытаскивает его и обновляет мою таблицу.

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

1 - Обновите мое состояние 2 - Теперь публикуют его через мою страницу и всех моих друзей. 3 - Если комментарий оставляют, теперь электронная почта, что последний комментарий тем, кто "подписывается" на тот комментарий.

Мой вопрос, как я управляю теми данными? Я просто вставляю "комментарий", затем имеют "задание", которое вытаскивает тот комментарий, и включите его в функцию, которая обрабатывает его?

Вот пример, который я планирую на изучении.

http://www.freeopenbook.com/php-hacks/phphks-CHP-5-SECT-18.html

Заранее спасибо.

6
задан luckytaxi 12 February 2010 в 17:18
поделиться

2 ответа

У меня вопрос, как мне манипулировать этими данными? Могу ли я просто вставить "комментарий", а затем иметь "задание" , которое извлекает этот комментарий и вставляет его в функцию, которая его обрабатывает?

Точно.

Публикация обновлений статуса на страницах Facebook, вероятно, не связана с очередью сообщений - я на самом деле не знаю их конкретного дизайна, но предполагаю, что обновленные данные просто предоставляются по запросу через запрос, когда пользователи загружают свои страницы. (Если у Facebook нет отдельного процесса для денормализации данных обновления статуса.) 1

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

Типичная реализация включает запись нового сообщения (обычно минимального, возможно, только вашего идентификатора пользователя) в определенную очередь сообщений - возможно, очередь «EmailStatusUpdateNotifications».

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

1 Оказывается, вы можете найти много полезной информации об архитектуре Facebook в Почему Facebook, Digg и Twitter так сложно масштабировать? при высокой масштабируемости.

3
ответ дан 17 December 2019 в 04:46
поделиться

Могу ли я просто вставить "комментарий", затем создать "задание", которое вытащит этот комментарий и подключит его к функции, которая его обработает?

Один из моментов с очередями сообщений - это разделение служб и асинхронная обработка.

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

Затем у вас есть служба/фоновое задание, выполняющееся где-то, которое извлекает сообщения из этой очереди. Это, конечно, будет что-то внешнее по отношению к процессу PHP, который отправил сообщение на основе HTTP-вызова. Это задание извлекает сообщения из очереди, выполняет обработку сообщения - например, выясняет, кому отправить письмо, и затем отправляет его.

Теперь у вас есть гибкий способ обработки таких почтовых обновлений.

  • Было бы довольно просто запустить эту службу обновления почты на другой машине, а не на веб-сервере.
  • Ее легче масштабировать, если вам понадобится больше мощности.
  • Вы можете легче реализовать отложенную отправку - например, вы можете подождать минуту или две с отправкой письма, и если пользователь снова обновит свой статус, вы отправите только одно письмо, а не два
  • Если бы вы сделали все это в рамках http-запроса пользователя, который изменил свой статус, ему пришлось бы ждать, пока вся эта обработка завершится.
2
ответ дан 17 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: