На основе каких технологий Вы делаете систему мгновенных сообщений?
Вопрос к тем, кто имеет опыт разработки систем мгновенных сообщений, чатов и аналогичных проектов. На основе какого стека технологий Вы создавали такие системы? Особенно интересно мнение специалистов по нагруженным проектам, кто с какими технологиями работает и почему выбрал именно их.
В моем случае набор следующий. В качестве БД использую классическую MySQL, основная логика на PHP, IM-сервер написан на Node JS, а в качестве протокола используются WebSockets. Решил отойти от классического long-polling'а (а-ля vk), т.к. WebSockets позволяет добиться большего интерактива и значительно разгружает сервер от множества Ajax-запросов. Что касается MySQL и PHP, это классика, просто в поддержке и можно быстро писать код. Node JS - отличная технология для Back-End, которая позволяет реализовать функционал выходящий за рамки PHP.
функционал реализован на Node JS. В приведенном списке только основные моменты, специализованные вещи, вроде Memcache и прочего опущены для ясности изложения.
И, да, я бы писал на Go
- почему? просто модно или уже имели опыт работы с этим языком?
соглашусь, что решения написанные на Си и Erlang хорошо приспособлены под высоконагруженные системы. Пока у меня не такие нагрузки)) Но на будущее хочу понимать общую картину, в каком направлении двигаться.
Дмитрий Масленников: При чем здесь язык программирования??????
DropBox вырос, будучи написанным на Python, на Go они уж потом перешли, когда выросли.
В Фейсбуке и вКонтакте до сих пор на PHP - и что????
Язык тут не при чем.
Вы спросили про архитектуру - я вам ответил: у вас нет выделенного высокоэффективного сервера очередей.
gaxetasok: очень даже причем. попробуйте написать нейронную сеть на Си и на PHP, и посмотрите на скорости их обучения. язык более низкого уровня выполняет одни и те же операции намного быстрее.
В Фейсбуке и вКонтакте до сих пор на PHP - и что????
кажется вы не вдавались в детали. VK и Facebook в настоящее время используют предварительную компиляцию кода (KPHP и HipHop), на их сервера выкатываются бинарные файлы сильно порезанные по сравнению с интерпретацией в классическом PHP. если не было бы разницы, не делали бы.
P.S. Это стандартная ситуация. При начальной разработке пишут на PHP, Python (что удобно и быстро). Если требуется более высокий уровень производительности кода, то либо переписывают его наиболее ресурсоемкие части на языке более низкого уровня, либо пропускают через собственный компилятор, который значительно "облегчает" код.
gaxetasok: Язык во многом определяет скорость простых операций, которые уже нельзя оптимизировать на уровне логики приложения (например, операции сравнения, циклы, условные операторы и т. д.). С этим сталкиваешься, когда решаешь задачи, связанные с многочисленными повторениями очень простых операций (нейронные сети, распознавание образов, работа с графикой и векторами, криптография).
Когда для распознавания образа нужно провести несколько миллиардов таких простых операций, то тут уже производительность начинает упираться в то, как сам язык работает памятью и процессором.
Согласен с тем, что PHP идеально подходит для быстрой разработки прикладной логики. Именно по этой причине решил использовать его в качестве основного языка, а не переходить на модный в настоящее время стек на основе чистого Node JS (у меня они используются в связке).
Но суть вопроса про влияние языка на скорость вычислений. Разумеется, когда ты делаешь запрос к базе данных, то тут производительность упирается чисто в архитектуру БД, число операций по меркам процессора и памяти там небольшое. Но когда есть задачи привязанные к большому числу простых операций (в частности, работа с очередями также отчасти входит в их число), то начинает играть роль язык, на котором все написано, либо то, как это было переведено в бинарный вид.
Дмитрий Масленников:
Вы только что задавали вопрос, чтобы ВАМ ПОДСКАЗАЛИ про НЕ СЛОЖНУЮ архитектуру.
И тут же начинаете поучать а что где и как устроено и от чего зависят тормоза и что нужно использовать высоконагруженных системах.
Самому то не смешно?
Про миллиарды операций - посмеялся, читать дальше не стал.
по первому - предпочитаю Native JS, есть полноценный собственный фреймворк для оптимизации рутинных процессов. Node JS штука хорошая, но это асинхронное программирование, соответственно более высокие требования к качеству кода и более медленная разработка. Поэтому основа на PHP, а Node используется больше на Back-End'е
Да, у сторонних IM-сервисов много плюсов, особенно если IM-система только формируется, но все же решил держать переписку на собственных серверах. Просто интересно, как у этих сервисов со временем отклика? Есть ли существенные задержки при соединении с IM-сервером?
Дмитрий Масленников: у нас с задержками проблем нет, сообщения мгновенно уходят-приходят, typing notifications и прочие чатовые реалтайм фичи тоже как надо пашут
https://github.com/Levhav/comet-server - это комет сервер написанный на С++ он может быть использован вместо nodejs для доставки сообщений по вебсокетам.
То есть бизнес логику пишите на чём угодно а в комет сервер по апи отправляете команды кому и какие сообщения доставить.