@gogolang

Страница 74 из 1630
Slava
07.12.2016
14:10:06
данные хранятся не в памяти веб сервера, а в некой субд, память которой шарится между ними

соответственно как только клиент подключается к конкретному веб сервису(по вебсокету, лонгполлингку, рест запросу или ещё как), веб сервис запрашивает новые сообщения для пользователя у базы данных

в случае с сообщениями очень хорошо шардить базы данных по пользователям

плюс в случае с сообщениями не очень важен лаг от слейвов, поэтому читать можно и с них

Google
Slava
07.12.2016
14:12:22
плюс в случае с сообщениями, я думаю не так уж важна durability (ну или важна, это вам решать), поэтому можно ещё и асинхронную репликацию использовать

Aleksey
07.12.2016
14:13:30
А вот после подключения к серверу, как сервер понимает, что пользователю пришли новые сообщения?

ros
07.12.2016
14:14:14
вообще поставить ejabberd и не кулупать себе моск он и websocket может и пуллинг

Slava
07.12.2016
14:14:22
а зачем ему понимать что пользователю они пришли?

просто в следующий раз пользователь запросить сообщения начиная от id последнего принятого

@rostel так себе совет )

ros
07.12.2016
14:15:06
вот 4 года юзаем и хоть бы хны)

Slava
07.12.2016
14:15:24
ну, это конечно верно, но это как советовать поставить хадуп для хранения пары гигабайт логов

Aleksey
07.12.2016
14:15:36
а зачем ему понимать что пользователю они пришли?
Речь идет о мнгновенных сообщениях

Slava
07.12.2016
14:15:57
ну они не могут быть мгновеннее того момента, чем клиент их запросит

ros
07.12.2016
14:16:13
у сообщения есть адресат

Slava
07.12.2016
14:16:50
можно в качестве очереди заюзать что-то хипстерское ) https://nats.io/

Aleksey
07.12.2016
14:16:58
То есть в любом случае на масштабируемой архитектуре все упрется в делэй между запросами?

Google
Slava
07.12.2016
14:17:25
ну да, суммируем все раунд трипы

но они всё равно будут меньше чем время запроса от клиента к тебе в дата центр

Aleksey
07.12.2016
14:19:41
Так смысл что-то накручивать, если можно просто бомбить сервера каждую секунду?

Slava
07.12.2016
14:22:02
Можешь переформулировать вопрос?

Aleksey
07.12.2016
14:25:00
Есть ли смысл посылать клиентом каждую секунду запрос за новыми сообдениями?

Slava
07.12.2016
14:25:34
нет, ответ должен придти от сервера в вебсокет или лонг полл соединение

Aleksey
07.12.2016
14:29:25
Тогда я не совсем понимаю. Я знаю как реализовать real-time ответы с сервера при условии, что вся кухня происходит только на одном сервере, тогда существует только один broadcast канал.

Я не понимаю как смасштабировать это решение горизонтально

Slava
07.12.2016
14:29:49
я выше скидывал очередь сообщений

ты можешь писать в канал пользователя и читать из него

пишешь ты из тех серверов, куда подключены контакты, которые отправляют сообщения пользователю

читаешь ты с сервера куда у тебя подключен юзер по вебсокету

Aleksey
07.12.2016
14:32:07
Понял, спасибо. Извини, что сразу не дошло, раньше не работал с MQ. Посоветуешь с чего можно в этой сфере начать?

И какая разница между http://nats.io/ и Rabbit MQ?

Daniel
07.12.2016
14:34:53
а никто не знает :)

Slava
07.12.2016
14:35:53
рэббит на эрланге написан, а натс я так понимаю на го)

Aleksey
07.12.2016
14:36:07
А с чего начать проще будет?

Slava
07.12.2016
14:38:23
разница в гарантиях

наши инженеры rabbitmq вспоминают как самое ужасное что с ними было в давние времена

Google
Daniel
07.12.2016
14:40:20
говорят да

Slava
07.12.2016
14:40:23
начиная с каких-то масштабов

наверное для простого чата он вполне себе пойдёт )

Bogdan
07.12.2016
14:40:37
zeroMQ для высокочастотного трейдинга используется

Slava
07.12.2016
14:40:47
zeroMQ кажется уже пованивает и разлагается

но я не спец )

Slava
07.12.2016
14:41:20
а если глянуть сторону  kafka? просто читал что она хороша на больших объмах данных

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

Aleksey
07.12.2016
14:45:34
Как я понял - на каждого пользователя

Alexey
07.12.2016
14:45:57
Kafka это не совсем очередь, это распределённое хранилище логов. Разница в том, что она хранит данные пока не выйдет время, а не пока их кто-то не прочитает.

NATS (без NATS Streaming) хранит все данные в памяти, там нет диска

Rabbit MQ у нас тоже разваливался :(

Slava
07.12.2016
14:47:34
Kafka это не совсем очередь, это распределённое хранилище логов. Разница в том, что она хранит данные пока не выйдет время, а не пока их кто-то не прочитает.
спасибо, вот это момента про кафку не знал. А можешь плиз чуть подробнее про рэббит рассказать почему разваливается?

Alexey
07.12.2016
14:47:38
А с чего начать проще будет?
Как ни странно – Redis. Это тоже не очередь, но очередь с PUB/SUB там есть. И знание Redis’а пригодится.

> А можешь плиз чуть подробнее про рэббит рассказать почему разваливается? Думаю, потому, что его сложно готовить

Daniel
07.12.2016
14:48:05
редис - без отказоустойчивости

Alexey
07.12.2016
14:48:30
Redis Sentinel, Redis Cluster – уже всё есть

Alexey
07.12.2016
14:50:45
Нет

Один SUB на процесс, который получает обновления

Google
Alexey
07.12.2016
14:53:06
https://redis.io/topics/pubsub

Aleksey
07.12.2016
14:53:59
То есть все писать в один канал и на каждом сервере принимать все сообщения и если у конкретного сервера есть подлючение с клиентом - отвечать?

Создание большого количества каналов приводит к дополнительной нагрузке?

Alexey
07.12.2016
15:08:47
Конечно, создание чего-то приводит к нагрузке. Вопрос только к какой :)

Вроде, к небольшой. Можно использовать несколько каналов, можно один. Попробуйте и так, и так.

Aleksey
07.12.2016
15:09:21
То есть как проще, нагрузить Redis большим количеством каналов или сервера большим количеством входящих сообщений

Admin
ERROR: S client not available

Alexey
07.12.2016
15:09:42
Напишите benchmark :)

Aleksey
07.12.2016
15:10:14
Это труднее, чем все это завести)

Тем не менее, спасибо за помощь

Alexey
07.12.2016
15:11:36
не за что

Mars
07.12.2016
16:16:21
Aleksey, возможно это то что вам нужно - https://github.com/centrifugal/centrifugo

Aleksey
07.12.2016
16:35:44
Aleksey, возможно это то что вам нужно - https://github.com/centrifugal/centrifugo
А горизонтальная масштабируемость там есть по умолчанию?

Mars
07.12.2016
16:38:36
Но не по умолчанию )

Aleksey
07.12.2016
16:39:26
Да я читал, через Redix =) Я тоже самое собираюсь накрутить, только поверх своего сервера

Mars
07.12.2016
16:40:16
Через redis

Лично я сам писал такой сервер, на node.js. И могу сказать что лучше взять готовый

Тем более что это от mail.ru

Хотя для кого то это контраргумент

Google
Aleksey
07.12.2016
16:42:55
А в чем была сложность?

Mars
07.12.2016
16:51:35
Менеджмент сессий пользователя

Не то чтоб сложность, но не очевидны некоторые вши были по началу

Aleksey
07.12.2016
17:25:01
Mars
07.12.2016
17:31:07
Slava
07.12.2016
17:37:22
Тем более что это от mail.ru
а у тебя был опыт работы с центрифугой? любопытная штука, присматривался к ней. интересно как она в продакшене себя ведет

Mars
07.12.2016
17:39:36
Возможно даже автор в этом чате есть

Alexandr
07.12.2016
19:50:59
Теперь есть:)

Мы используем Центрифугу в 4х проектах, но нагрузка во всех небольшая к сожалению, DeviantArt выкатывал на 50тыс пользователей онлайн - 2 машинки на amazon c3, с тех пор было достаточно много оптимизаций внутри

Сейчас из известных проблем - креши при использовании jsonp транспорта SockJs - починится в след релизе, а пока можно отключить, еще некоторые косяки у SockJS клиента - можно в их репе почитать, там мейнтейнер куда-то запропастился. С чистыми вебсокетами проблем нет насколько мне сейчас известно:)

Масштабирование возможно при использовании Редиса, как уже написали - ноды связаны пабсабом Редиса, gogoprotobuf летает через этот пабсаб, есть пулл реквест уже с поддержкой консистентного шардирования, + Sentinel поддерживается для отказоустойчивости

Alexandr
08.12.2016
06:24:42
Интранет mail.ru - эт внутренняя соц сеть - комментарии, счетчики, переговорные, лайки. Мониторинг - дашборд алертов. Сертификация - чаты ( у них правда еще питоновская Центрифуга). Технопарк, техносфера, технотрек - у них одна платформа - это порталы для обучения - для уведомлений, показывают кто онлайн.

Stanislav
08.12.2016
10:02:00
а есть чатик по postgresql?

Dima
08.12.2016
10:25:50
Никита
08.12.2016
21:41:54
всем привет, возник вопрос по кишкам. Ситуация. Сорсцы зависимых пакетов храню в vendor. 1. внутри репки со своим проектом для более быстрой сборки делаю go install (https://golang.org/doc/articles/go_command.html говорит "go install" also installs any packages that this package imports but that are out of date, recursively) 2. В pkg получаю установленные пакеты (те, которые мне требуются и те, которые написаны мной). Всё ок. 3. Запускаю go run main.go из своего репозитория. Всё запускается в разы быстрее в отличие от варианта без go install 4. Далее меняю что-то в своём пакете mypackage. 5. Делаю go run. Всё работает но тут вопрос. Хэш от mypackage.a не поменялся, но go run запустил обновлённую версию кода как такое может быть? Как go run понимает, куда смотреть (в src или в `pkg`)

Страница 74 из 1630