Size: a a a

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

2021 April 16

G

George in Архитектура ИТ-решений
Надёжность кафки (at least once), возможность распределить консьюмеров и сделать  маленькое количество продьюсеров. Но поняв недостаток квалификации аппер-джуна, спросил в знакомом чате куда можно с таким сходить чтобы умные люди сказали, как делать принято.
источник

G

George in Архитектура ИТ-решений
Так, вот тут уже пошло про skip locked объяснение и про то, что на таймауте. Спасибо, подумаю как сделать через БД.
источник

G

George in Архитектура ИТ-решений
НФТ?
источник

PD

Phil Delgyado in Архитектура ИТ-решений
У тебя там просто будет join из трех таблиц (еще с online_users)
источник

PD

Phil Delgyado in Архитектура ИТ-решений
НеФункциональныеТребования
источник

AM

Aleksey Melnikov in Архитектура ИТ-решений
а с какого числа топиков проблемы наблюдаются и насколько серьезные?
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Ну, на кафке больше 10K партиций уже нужна аккуратность. Есть статья про 200K партиций и это, вроде бы, предел.
источник

А

Александр in Архитектура ИТ-решений
если не секрет, какой инструментарий выбрали?
источник

PD

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

А

Александр in Архитектура ИТ-решений
спасибо, почитаю
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Ну, это довольно низкоуровневая key-value db, но с ACID и масштабируемостью.
И надежная )
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Можно и на redis, думаю.
Все равно многое зависит от конкретных задач, команды и т.п.
источник

VR

V R in Архитектура ИТ-решений
А зачем здесь вообще смешивать БД для онлайн юзеров? Отделить сохранение в БД от нотификаций онлайн пользователям, имхо. Мне интересно - а т.к. нужна некая "гарантия" доставки сообщения - как будет это обрабатываться? - потеря коннекта, отсоединение и т.д.?
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Смотри, у тебя в БД в queues - список всех нотификаций на пользователях.
Но при этом воркеры на приложении должны забирать (и отгружать в сокет) события только для тех пользователей, что в сети.
И событие сначала складывается в БД, а уже потом (и, скорее всего, другим сервисом) отдается пользователю через сокет.
источник

p

pragus in Архитектура ИТ-решений
А зачем держать список тех кто онлайн в бд?
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Гарантия канал "сокет-браузер" делается отдельно. Или через ack (но тогда нельзя удалять событие из очереди до его получения) или через сохранение в очереди порядкового номера "отправленного" с возможностью фронта перезапросить "все от указанного id"
источник

PD

Phil Delgyado in Архитектура ИТ-решений
А иначе у тебя на skip locked будут приходить события и по тем, что в оффлайне - и что с ними делать?
источник

VR

V R in Архитектура ИТ-решений
ну я бы просто заспилитил - отдал бы отдельно асинхронно на паблишер и отдельно на сохранение в БД. Но меня больше вторая часть  интересует больше - нужен какой-то ack похоже. Но все равно получается что есть вероятность ределивери
источник

PD

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

PD

Phil Delgyado in Архитектура ИТ-решений
Так не нужно же exactly once (его и не бывает), нужно at least once
источник