не относится конкретно к ГО, а скорее в целом к архитектуре, мне интересно как горизонтально масштабировать этот момент.
Допустим есть какой-то сервер пусть будет Джанго который делает publish в какой-то редис канал на какой-то ивент.
И есть микросервис:
Допустим приложение Го. подписывается на этот канал и когда туда приходит сообщение, что-то с ним делает, например в базу записывает что-то, неважно,
И допустим у нас создаётся несколько инстансов Джанги потому что нагрузка на сервер выросла, и надо больше серверов с джанго, мы скейлим джанго приложение просто ставя апп на дополнительные сервереа, и все они при своих ивентам шлют какой-то паблиш в редис
Приложение на го всё ещё на одном сервере один инстанс поднят и подписанный на этот канал что-то делает.
Если мы поднимем второй инстанс нашего ГО подписчика, то при паблише инфы в канал редиса, они же оба его подхватят и сделает тупо двойную работу....
Как нормально можно скелйить Подписчиков на какой-то канал в редисе?
Длиновато получилось.......
Если у вас из очереди в вашем message broker (redis, rabbitmq, kafka etc) сообщение было считано, почему вы предполагаете оно должно продублироваться во второй инстанс?
потому, что на выбор у нас есть at most once (риск потери) и at least once (риск дублирования) а exactly once, который все хотят, не бывает в природе
что значит «не бывает в природе»? насколько я знаю, в рэббите такое поведение по умолчанию, если у очереди несколько консьюмеров
У кафки вполне себе бывает, но сами знаете почему ;-)
В RMQ как раз at least once
а, да, спутал. там acks позволяют избежать дублирования, которое описывает Ярослав
ну можно и at most once (если поставить auto-ack)
Обсуждают сегодня