Size: a a a

Архитектура ИТ-решений

2021 April 16

PD

Phil Delgyado in Архитектура ИТ-решений
Ну, тогда реализуй все на очереди прямо в базе, это будет проще и надежнее всего.
источник

G

George in Архитектура ИТ-решений
Хм, а куда читать/копать? PG_LISTEN/NOTIFY?
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Нет, конечно.
источник

G

George in Архитектура ИТ-решений
Я не очень понимаю, как увязать то, что пара тысяч обработчиков вебсокет-соединений будет раз в N времени ходить в базу проверить, не появились ли новые данные. Поэтому и был вопрос про связующее звено для всех потребителей
источник

PD

Phil Delgyado in Архитектура ИТ-решений
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Тут, наверно, я подробнее всего про эту задачу рассказывал
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Только зачем тебе 2000 обработчиков? У тебя в памяти сидят соединения, воркер забирает события из БД и укладывает в нужные соединения - и все.
источник

G

George in Архитектура ИТ-решений
Хм. Вы предлагаете хранить коннекты к вебсокету в списке (добавляя при присоединении и убирая при отсоединении), и когда приходит событие, обходить их аля "кому подходит, тому и отправлю"?
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Зачем в списке? В мапе по имени пользователя, для которого сообщение.
Получаешь сообщение из очереди в базе, смотришь адресата, отправляешь в его сокет сообщение - все.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
В базе для правильной фильтрации - таблица со списком "пользователей онлайн", что бы лишнего не обходить.
источник

G

George in Архитектура ИТ-решений
В ту же мапу ложатся группы/орги в принципе, если сообщение на массовую рассылку. Логично.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Ну, сокет на группу не получится, так что сообщения на группу раскрываются и кладутся в сокеты на членов группы.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
При такой небольшой нагрузке все нормально делается через select for update skip locked
источник

PD

Phil Delgyado in Архитектура ИТ-решений
(Я то сейчас решаю эту задачу для 10mln пользователей и 10K сообщений в секунду, тут уже PG не спасает...)
источник

G

George in Архитектура ИТ-решений
{"username1": [socket1], "org.team":  [socket1, socket2, socket3]}
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Ну, для 1000 человек сойдет, а так не очень хорошая идея )
источник

p

pragus in Архитектура ИТ-решений
А зачем тут кафка или mq?
источник

G

George in Архитектура ИТ-решений
Та я вот тоже увидел throughput у кафки в миллионы сообщений в секунду и как-то подумалось, что *слегка* оверкилл для селфхостед систем до 1к юзеров
источник

PD

Phil Delgyado in Архитектура ИТ-решений
В базе у тебя таблица
queues(reciever,..)
online(reciever)
ты перед skip locked их джойнишь, что бы из "неонлайн" очередей ничего не забирать.
И все получается очень просто и надежно
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Ну, если бы НФТ были другими - то было бы полезно.
источник