Size: a a a

2021 January 31

ML

Maksim Lapshin in pro.elixir
Bogdan
Эти данные очень не желательно обрабатывать по два раза.
Так вам надо научиться их идемпотентно обрабатывать :)
источник

AF

Andrey Fadeev in pro.elixir
Bogdan
Эти данные очень не желательно обрабатывать по два раза.
Нежелательность может быть вызвана разными причнами. Например это очень долго. Или из-за этого деньги теряются. Вот от второго типа “нежелательности” нужно уходить, потому что обработать сообщение ровно один раз все равно не получится. Хотя бы из-за сбоев
источник

AF

Andrey Fadeev in pro.elixir
И тогда проблему дубликатов можно не решать 🙂
источник

B

Bogdan in pro.elixir
Maksim Lapshin
Он упадет и ты его потеряешь :)
В целом кстати если даже сервер перезагрузится.

То я могу на перезапуске запуржить очередь и влить туда новую пачку.

В таком случае максимум где будут дубли это те данные которые были в обработке и не успели промаркироваться. Короче очень приемлимый % потерь.
источник

B

Bogdan in pro.elixir
Andrey Fadeev
Нежелательность может быть вызвана разными причнами. Например это очень долго. Или из-за этого деньги теряются. Вот от второго типа “нежелательности” нужно уходить, потому что обработать сообщение ровно один раз все равно не получится. Хотя бы из-за сбоев
Хотя в приложении решаются другие задачи. Суть очень похожа на кравлер, в котором нежелательно ходить по одним и тем же страницам иначе это может превратится в инфинити лупс.
источник

B

Bogdan in pro.elixir
В данном случае инфинити лупс не произойдет но вообщем что-то вроде
источник

AF

Andrey Fadeev in pro.elixir
я бы тоже делал эту логику избегания дублей на стороне продьюсера
источник

B

Bogdan in pro.elixir
Я думаю если очередь пуржить перед запуском сервиса, должно хорошо все быть.
источник

AF

Andrey Fadeev in pro.elixir
хотя идемпотентности консумеров, тоже можно достичь. тут уже от деталей сисемы зависит
источник

B

Bogdan in pro.elixir
Подумаю посижу, сделаю наверное на продюсере пока-что, так как сроки важнее )
источник

B

Bogdan in pro.elixir
Спасибо всем)
источник

ML

Maksim Lapshin in pro.elixir
Bogdan
Я думаю если очередь пуржить перед запуском сервиса, должно хорошо все быть.
Ты тем самым надеешься что и в очереди сообщений будут надежно храниться данные
источник

AF

Andrey Fadeev in pro.elixir
а не должны? я с кроликом не работал, но предполагал что он такие гарантии даёт
источник

B

Bogdan in pro.elixir
Maksim Lapshin
Ты тем самым надеешься что и в очереди сообщений будут надежно храниться данные
Нет я на очередь же наоборот никак не надеюсь.

Там сейчас вот так:
1.  Запрос в Postgres.
2. Проверяет на уникальность(в стейте).
3. Закидывает в RabbitMQ.
4. По тику смотрит кол-во сообщений в очереди.
5. Подкидывает если их мало.


Если продюсер падает вместе со стейтом:

То на запуске он полностью пуржит всю очередь и грузит данные с постгри.
В таком случае дубликаты практически исключены.
источник

B

Bogdan in pro.elixir
source of truth - Postgres
источник

B

Bogdan in pro.elixir
Andrey Fadeev
а не должны? я с кроликом не работал, но предполагал что он такие гарантии даёт
Если кластер поднять, то нужно постараться, чтобы он упал.
источник

B

Bogdan in pro.elixir
Если на одном хосте то с ним случаются казусы. Но это уже наверное не его заслуга)
источник

B

Bogdan in pro.elixir
Там еще можно вроде сделать, снапшот чтобы он хранил на харде
источник

AF

Andrey Fadeev in pro.elixir
Bogdan
Там еще можно вроде сделать, снапшот чтобы он хранил на харде
Почитал документацию, в разделе про reliable delivery сказано, что бывают persistent очереди и сообщения. И для них общаны гарантии доставки.

Если этого не делать, то в варианте с дедупликацией в продьюсере могут (будут) возникать сообщения которые потеряны, но он не отправит их повторно до перезапуска.
источник

AF

Andrey Fadeev in pro.elixir
Возможно это будет нивелироваться какими-нибудь таймаутами или дедлайнами, если они там есть.
источник