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 ответов

10 просмотров
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 монги, где хранятся эти абстракции и обработку их.

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

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

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
Открыл свой двухкилобайтный экзешник в x32dbg, а тут какая-то хрень. Смущает кнопка "выполнить до пользовательского кода", а что ещё может быть в файле помимо него ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
11
Вопрос тем кто смотрит видео и слушает подкасты - как вы потом ищете нужную вам информацию? Вот статью я прочитал, потом могу искать нужную мне часть банальным поиском. Пропус...
Aleksandr Druzhinin
4
Мне были интересны дишные хаки и я нашёл любопытный способ на форуме через __traits, что-то вроде int delegate(int) fac = (int n) => n == 0 ? 1 : n * __traits(parent, {})(n - ...
Constantin F.
1
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Ребят, если кто в курсе - скажите, а в загранке такое же засилье маркетплейсов? или там простые сермяжные интернет-магазины живут попроще?
Андрей [aharito] Харитонов
14
@FAssembler ты много с формами работал, как цикл обработки сообщений от окошек надо делать, чтобы IsDialogMessage не ломал ввод в эдиты и навигация по табам работала?
The Bird of Hermes
8
Карта сайта