Лучший подход для масштабируемой системы чата PHP (на основе AJAX)

Я создаю чат-систему для компании, и мне интересно, как лучше всего построить систему?

В настоящее время у нас есть HTTP-сервер Nginx с PHP и Memcacheq (как очередь сообщений, которая добавляет сообщения чата в собственную очередь пользователя). Затем мы опрашиваем сервер Nginx (через запрос в стиле Comet) и запрашиваем обновления в очереди сообщений.

Является ли хорошей идеей использование очереди сообщений, такой как Memcacheq, для обработки системы чата, которая имеет как пользовательский чат, так и общесайтовый чат, или лучше просто придерживаться MySQL?

Спасибо!


person Simon    schedule 19.03.2010    source источник


Ответы (4)


Memcache полезен только в том случае, если у вас несколько устаревшие данные (или плохой дизайн базы данных для увеличения времени выполнения запроса). Насколько я вижу, в вашем случае (система чата) данные будут свежими, и добавление Memcache может только усложнить (читай, снизить производительность). Думайте о memcache как о промежуточном программном обеспечении (в оперативной памяти) между mysql и php. Если данные устарели, время в пути сокращается, поскольку PHP не нужно обращаться к mysql, но в случае свежих данных нагрузка фактически увеличивается (поскольку memcache также должен будет получать изменения из PHP).

Подводя итог, я бы не рекомендовал использовать memcache для системы чата. Рекомендовал бы искать в Интернете больше. Хороший пост на http://blog.tech.stylefeeder.com/2008/08/22/memcached-vs-mysql/

person pinaki    schedule 19.03.2010
comment
Имеет ли значение, что я использую MemcacheQ, а не просто обычную установку Memcache? Сейчас посмотрю эту страницу - спасибо! - person Simon; 19.03.2010
comment
Насколько я знаю, MemcacheQ — это просто оболочка над memcache, предоставляющая возможности организации очередей. Не должно иметь никакого значения. - person pinaki; 19.03.2010
comment
что, если: когда сообщение чата отправляется, сохранить его в mysql, а также кэшировать. затем на стороне чтения запрос должен прочитать значение из chache. ? - person Bhavesh G; 09.01.2012

Я ожидаю, что Memcacheq будет работать намного лучше, чем MySQL.

person Sjoerd    schedule 19.03.2010

Memcacheq — отличный инструмент, который может помочь избежать задержки веб-запросов. Он может действовать как буфер между php и mysql, но не заменяет mysql. Memcacheq также может упростить масштабирование, потому что может быть несколько распределенных потребителей сообщений.

Я бы рекомендовал поместить его между высоконагруженными php-запросами, сохраняющими данные в mysql, и выполнением трудоемких операций. Это ускорит загрузку страниц для пользователей и избавит ваши веб-серверы от длинных запросов.

Memcacheq работает довольно быстро. Это не займет много ресурсов

person Andriy B    schedule 19.03.2010
comment
В настоящее время это работает следующим образом: все сообщения чата архивируются в таблице MySQL, но в момент отправки сообщений информация о записи в базе данных вводится в определенную очередь сообщений Memcache и доставляется пользователю в близко к реальному времени. Это кажется более эффективным подходом, чем постоянный опрос базы данных на наличие обновлений. Кстати, спасибо за ваши мысли! - person Simon; 20.03.2010

Попробуйте это: http://pushmodule.slact.net/ . Nginx позаботится о комете, и все, что нужно будет сделать вашему php-приложению, — это отправить HTTP-запросы в модуль.

person Community    schedule 02.04.2010