170 похожих чатов

В общем, что думаете о такой реализации кластеров websockets? Внутри

IMDB ассоциативный массив, где ключ это id юзера, а второе это список ws, где он прямо сейчас подключён(С компа, с мобилки например).

1. Отправитель отправляет сообщение получателю. 2. ws инстанс кидает запрос в IMDB на этого пользователя. 3. Получает ответ в виде списка id юзера в каждом конкретном ws и id каждого конкретного ws. 4. ws инстанс кидает ответ получателю, который подключен к нему, если есть такой. 5. Отправляет в Kafka остальные элементы из списка, если есть. Тут так же может быть IPC, если инстансы ws находятся на одном сервере. 6. Kafka кидает сообщение другому инстансу ws. 7. Отпавляет получателю сообщение.

В общем, давайте оценку моей идеи.

39 ответов

20 просмотров
Rezochq-Mind  Автор вопроса

https://tugdualgrall.blogspot.com/2015/01/how-to-create-pubsub-application-with.html Я всё больше склоняюсь юзать IMDB монги. Попросту мне нужна будет абстракция "комнат", а в случае таком я смогу их организовать в базе данных, создав коллекцию и ссылки на юзеров. В Redis я так не смогу. Pub/sub тут организовать можно. А ещё MongoDB оказывается могёт в много поток, а Redis не.

Rezochq-Mind  Автор вопроса

В общем, плохая идея. Kafka стабильная, держит нагрузки, но медленная. Если бы можно было поставить что-то вместо неё..

Rezochq-Mind  Автор вопроса

Ну, медленная относительно Redis конечно. Так-то быстрая.

А сколько времени отрабатывает?

Rezochq-Mind  Автор вопроса

Точно не скажу. Дело в самой реализации. У Kafka очередь, а у Redis pub/sub это "кинуть и забыть".

Rezochq-Mind  Автор вопроса

В общем, Kafka это для общения между сервисами, а не между инстансов WebSockets например. Kafka пойдёт, когда у тебя зарегался пользователь и ему нужно отправить письмо. Тогда веб сервер кидает сообщение в Kafka и другой сервис подхватывает это, кидает письмо.

Rezochq-Mind  Автор вопроса

Ещё описать это можно как разные инструменты. Для грязи пойдут гусеницы, а не колёса.

Спасибо за разъяснение, а то скоро будем в проекте кафку вводить

Rezochq-Mind  Автор вопроса

Ахахахха.. Из меня не очень архитектор приложений. Kafka крута, но для целей, что я описал - Связь между разными сервисами. Расскажешь, что за проект?

Ну много микросервисов, как раз для их общения и будем использовать (щас общение по http))

Спрашивала о том, повлияла ли Кафка на скорость отработки, так как важна скорость в нашей ситуации

Rezochq-Mind  Автор вопроса

Блыа. Больно. Хотя.. А HTTP/1.1 или 2.0?

А фиг знает, только щас узнала о разных версиях

Rezochq-Mind  Автор вопроса

Крутыа.. А о чём проект в целом-то?

Rezochq-Mind  Автор вопроса

Если только узнала, то скорее всего 1.1.

Кол центр

Rezochq-Mind  Автор вопроса

ip-телефония?

Ну да, только я работаю над интеграцией с ней

Rezochq-Mind  Автор вопроса

Хих.. Интересненько.

Кстати, было интересно почитать о твоих возможных реализациях, спасибо)

Rezochq-Mind  Автор вопроса

Хмсь. Если интересно, то пиши задачу в лс.

А как ты сравнил скорость, и насколько медленнее? Возможно, kafka тут действительно слишком мощный инструмент, и хватит nanomsg (zeromq) или nats?

Rezochq-Mind  Автор вопроса

Так. Сек.

Rezochq-Mind  Автор вопроса

Как я уже сказал, дело в том, как внутри работает Kafka. Я уже приводил сравнение. Я попросту выбрал не тот инструмент. За nanomsg, zeromsg и nats спасибо. Это уже похоже на то, что мне нужно.

Rezochq-Mind  Автор вопроса

Так. Мне бы их ещё все сравнить между собой...

зачем? я бы предположил, что производительности кафки тебе тоже хватило бы, вроде никто не жалуется но если так хочется именно дешёвых решений - я бы предположил что nanomsg будет быстрее других, которые я упомянул

Rezochq-Mind  Автор вопроса

Дешёвых?

по ресурсам судя по твоему описанию ты испугался кафки потому что там много чего происходит "под капотом"

Rezochq-Mind  Автор вопроса

Я уже сказал, что дело в способе работы.

Ну я так понял, что тебе просто не нужны навороты Кафки Или что-то другое в ней не устраивает?

Rezochq-Mind  Автор вопроса

Просто очередь сообщений не то, что мне нужно. А как держит нагрузки nanomsg и какая задержка? У меня выходит запрос в БД + передача в этот транспорт. Мне нужно меньше 200мс при передаче фоток весом до 2мб, когда фотка уже была получена с клиента и меньше 50мс при передачи текстовых сообщений до 2к символов.

Хорошо держит 🤷‍♂ Конкретно под твои запросы надо разворачивать стенд и на нём проверять Он достаточно тонкую прослойку представляет из себя, думаю быстрее него сложно написать что-то со схожей функциональностью. Единственное, доки у него скудные, и мне приходилось в исходники лезть чтобы с чем-то разобраться. С этой точки зрения zeromq лучше - проект того же автора, но достаточно старый для того, чтобы и доков было много, и комьюнити более развитое, и статей/примеров хватало

Rezochq-Mind  Автор вопроса

Я пытался найди на nanomsg найти как скелить его. Нинашёл.

Rezochq-Mind  Автор вопроса

А да, проблема в том, что оно должно держать по-настоящему огромные нагрузки. Типо 100к сообщений в минуту.

В минуту? Это не огромные тогда, а скорее средние

Rezochq-Mind  Автор вопроса

Угу. Потянет? Вообще, это не должен быть лимит. Вдруг ещё нужно будет.

Потянет

Rezochq-Mind  Автор вопроса
Rezochq-Mind  Автор вопроса

Хм.. А может и подойдёт Kafka. Просто сама суть в том, что сокеты обслуживают обмен сообщений между пользователями. Как бэ.. Плюс там будет дополнительная информация, обмен которой будет в фоне. Ну и получается, что на 50к комнат(Конечная реализация) будет не менее 100к сообщений в минуту. Если там на самом деле задержки всё же такие маленькие, то у меня ещё 30мс на запрос в IMDB монги, где хранятся эти абстракции и обработку их.

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

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
Гляньте, че бывает: Сегодня по одному проекту одной вебстудии делал проект небольшой, на их хостинге. На Modx revo. В определенный момент , работая в админке, вдруг перестал р...
Artem
7
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
12
> Копаем глубже > Следующий момент был, когда я спросил его, знает ли он JavaScript. Он ответил, что его учили работать с C#. Я тоже в университете писал на C#, но даже там мн...
Oleg Volkov
4
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
Кто нибудь либу Zstandart использовал ? Это либа для сжатия от Цукерберга
Andrey Electron
9
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Карта сайта