ros
вообще поставить ejabberd и не кулупать себе моск он и websocket может и пуллинг
Slava
а зачем ему понимать что пользователю они пришли?
Slava
просто в следующий раз пользователь запросить сообщения начиная от id последнего принятого
Slava
@rostel так себе совет )
ros
вот 4 года юзаем и хоть бы хны)
Slava
ну, это конечно верно, но это как советовать поставить хадуп для хранения пары гигабайт логов
Aleksey
а зачем ему понимать что пользователю они пришли?
Речь идет о мнгновенных сообщениях
Slava
ну они не могут быть мгновеннее того момента, чем клиент их запросит
ros
у сообщения есть адресат
Slava
можно в качестве очереди заюзать что-то хипстерское ) https://nats.io/
Aleksey
То есть в любом случае на масштабируемой архитектуре все упрется в делэй между запросами?
Slava
ну да, суммируем все раунд трипы
Slava
но они всё равно будут меньше чем время запроса от клиента к тебе в дата центр
Aleksey
Так смысл что-то накручивать, если можно просто бомбить сервера каждую секунду?
Slava
Можешь переформулировать вопрос?
Aleksey
Есть ли смысл посылать клиентом каждую секунду запрос за новыми сообдениями?
Slava
нет, ответ должен придти от сервера в вебсокет или лонг полл соединение
Aleksey
Тогда я не совсем понимаю. Я знаю как реализовать real-time ответы с сервера при условии, что вся кухня происходит только на одном сервере, тогда существует только один broadcast канал.
Aleksey
Я не понимаю как смасштабировать это решение горизонтально
Slava
я выше скидывал очередь сообщений
Slava
ты можешь писать в канал пользователя и читать из него
Slava
пишешь ты из тех серверов, куда подключены контакты, которые отправляют сообщения пользователю
Slava
читаешь ты с сервера куда у тебя подключен юзер по вебсокету
Aleksey
Понял, спасибо. Извини, что сразу не дошло, раньше не работал с MQ. Посоветуешь с чего можно в этой сфере начать?
Aleksey
И какая разница между http://nats.io/ и Rabbit MQ?
Daniel
а никто не знает :)
Slava
рэббит на эрланге написан, а натс я так понимаю на го)
Aleksey
А с чего начать проще будет?
Slava
разница в гарантиях
Slava
наши инженеры rabbitmq вспоминают как самое ужасное что с ними было в давние времена
Daniel
говорят да
Slava
начиная с каких-то масштабов
Slava
наверное для простого чата он вполне себе пойдёт )
Anonymous
zeroMQ для высокочастотного трейдинга используется
Slava
zeroMQ кажется уже пованивает и разлагается
Slava
но я не спец )
Slava
а если глянуть сторону  kafka? просто читал что она хороша на больших объмах данных
Slava
пишешь ты из тех серверов, куда подключены контакты, которые отправляют сообщения пользователю
а правильно ли я понял что на каждый чат(например чат между двумя пользователями или между многими) создается своя очередь?
Aleksey
Как я понял - на каждого пользователя
Alexey
Kafka это не совсем очередь, это распределённое хранилище логов. Разница в том, что она хранит данные пока не выйдет время, а не пока их кто-то не прочитает.
Alexey
NATS (без NATS Streaming) хранит все данные в памяти, там нет диска
Alexey
Rabbit MQ у нас тоже разваливался :(
Slava
Kafka это не совсем очередь, это распределённое хранилище логов. Разница в том, что она хранит данные пока не выйдет время, а не пока их кто-то не прочитает.
спасибо, вот это момента про кафку не знал. А можешь плиз чуть подробнее про рэббит рассказать почему разваливается?
Alexey
А с чего начать проще будет?
Как ни странно – Redis. Это тоже не очередь, но очередь с PUB/SUB там есть. И знание Redis’а пригодится.
Alexey
> А можешь плиз чуть подробнее про рэббит рассказать почему разваливается? Думаю, потому, что его сложно готовить
Daniel
редис - без отказоустойчивости
Alexey
Redis Sentinel, Redis Cluster – уже всё есть
Alexey
Нет
Alexey
Один SUB на процесс, который получает обновления
Alexey
https://redis.io/topics/pubsub
Aleksey
То есть все писать в один канал и на каждом сервере принимать все сообщения и если у конкретного сервера есть подлючение с клиентом - отвечать?
Aleksey
Создание большого количества каналов приводит к дополнительной нагрузке?
Alexey
Конечно, создание чего-то приводит к нагрузке. Вопрос только к какой :)
Alexey
Вроде, к небольшой. Можно использовать несколько каналов, можно один. Попробуйте и так, и так.
Aleksey
То есть как проще, нагрузить Redis большим количеством каналов или сервера большим количеством входящих сообщений
Alexey
Напишите benchmark :)
Aleksey
Это труднее, чем все это завести)
Aleksey
Тем не менее, спасибо за помощь
Alexey
не за что
Oleg
Aleksey, возможно это то что вам нужно - https://github.com/centrifugal/centrifugo
Aleksey
Aleksey, возможно это то что вам нужно - https://github.com/centrifugal/centrifugo
А горизонтальная масштабируемость там есть по умолчанию?
Oleg
Но не по умолчанию )
Aleksey
Да я читал, через Redix =) Я тоже самое собираюсь накрутить, только поверх своего сервера
Oleg
Через redis
Oleg
Лично я сам писал такой сервер, на node.js. И могу сказать что лучше взять готовый
Oleg
Тем более что это от mail.ru
Oleg
Хотя для кого то это контраргумент
Aleksey
А в чем была сложность?
Oleg
Менеджмент сессий пользователя
Oleg
Не то чтоб сложность, но не очевидны некоторые вши были по началу
Slava
Тем более что это от mail.ru
а у тебя был опыт работы с центрифугой? любопытная штука, присматривался к ней. интересно как она в продакшене себя ведет
Oleg
Возможно даже автор в этом чате есть
Alexander
Теперь есть:)
Alexander
Мы используем Центрифугу в 4х проектах, но нагрузка во всех небольшая к сожалению, DeviantArt выкатывал на 50тыс пользователей онлайн - 2 машинки на amazon c3, с тех пор было достаточно много оптимизаций внутри