Size: a a a

Чат подкаста «Разбор Полётов»

2019 December 18

DP

Denis Pavlyuchenko in Чат подкаста «Разбор Полётов»
ну, в случае PG, кажется, самый правильный способ делать очереди - это вроде https://wiki.postgresql.org/wiki/PGQ_Tutorial

У ребят в деньгах в очередях были проблемы, они даже на гитхабе про них писали
источник

DP

Denis Pavlyuchenko in Чат подкаста «Разбор Полётов»
источник

PD

Phil Delgyado in Чат подкаста «Разбор Полётов»
Не, PGQ - это очень сомнительное решение. Оно нацелено на обработку очереди большими пачками внутри СУБД,
И с очень большой долей магии внутри.
источник

DP

Denis Pavlyuchenko in Чат подкаста «Разбор Полётов»
Phil Delgyado
Не, PGQ - это очень сомнительное решение. Оно нацелено на обработку очереди большими пачками внутри СУБД,
И с очень большой долей магии внутри.
парни из https://postgrespro.ru/ PGQ почему-то рекомендуют (по крайне мере, на докладах)
источник

PD

Phil Delgyado in Чат подкаста «Разбор Полётов»
Я в курсе, что они рекомендуют. Но эта штука реально под работу пачками. Вот репликацию данных между базами на ней делать логично (для того и придумывали). А 20 воркеров, берущих задачи по одной внутри транзакции из кучи очередей - нет, не для этого.
источник

PD

Phil Delgyado in Чат подкаста «Разбор Полётов»
У меня на Joker был доклад, где я разные варианты рассматривал и рассказывал, что и для чего.
источник

PD

Phil Delgyado in Чат подкаста «Разбор Полётов»
Решение от ЯД нормальное для обычных топиков, когда самих топиков не очень много, а событий в них довольно много.
Я рассказывал про решение для акторов - когда очередей очень много (много больше воркеров), но они почти всегда пустые или с одной-двумя событиями.
А реально нужно смотреть на свои кейсы и думать, что реально нужно и какие НФТ.
источник

DP

Denis Pavlyuchenko in Чат подкаста «Разбор Полётов»
Phil Delgyado
Там порядковый номер для очередного события вычисляется через select max() ....
хм, у ребят порядковый номер сообщения - это не sequence, а:
  _stream_version := stream_version(write_message.stream_name);

 IF _stream_version IS NULL THEN
   _stream_version := -1;
 END IF;

_next_position := _stream_version + 1;


поэтому и select max()
источник

PD

Phil Delgyado in Чат подкаста «Разбор Полётов»
А теперь вопрос - как это работает под нагрузкой? Ну, если у меня пяток сервисов активно обменивается сообщениями?
источник

PD

Phil Delgyado in Чат подкаста «Разбор Полётов»
При том, что в версионниках select(max) - реально дорогая операция (
источник

DP

Denis Pavlyuchenko in Чат подкаста «Разбор Полётов»
Сложно тут сказать, на сколько много событий в секунду в БД можно писать.

Получается, на вставку сообщения у нас:
1) взять лок - pg_advisory_xact_lock
2) взять select(max)
источник

PD

Phil Delgyado in Чат подкаста «Разбор Полётов»
Ага. А если я хочу прочитать событие, в этой же транзакции создать другое и потом уже удалить взятое? Ну, нормальная такая транзакционная логика работы с очередью... Шансы получить dead lock - 100% )
источник

PD

Phil Delgyado in Чат подкаста «Разбор Полётов»
При том, что в  PG специально для очередей есть select for update skip locked
Кстати, PGQ делали до версии 9.5, поэтому использовали внутреннюю магию и извращения.
источник

DP

Denis Pavlyuchenko in Чат подкаста «Разбор Полётов»
Phil Delgyado
Ага. А если я хочу прочитать событие, в этой же транзакции создать другое и потом уже удалить взятое? Ну, нормальная такая транзакционная логика работы с очередью... Шансы получить dead lock - 100% )
кажется, тут ребята решили проблему на корню - у них попросту нет удаления, либо я его не вижу сейчас
источник

PD

Phil Delgyado in Чат подкаста «Разбор Полётов»
Ну, да, надо хранить  номер обработанного события.   EventSoucing, блин )
источник

PD

Phil Delgyado in Чат подкаста «Разбор Полётов»
(Почему не взять нормальный sequence, который все равно будет монотонный - не понятно)
источник

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in Чат подкаста «Разбор Полётов»
Tagir
Народ, а есть в телеграмме нормальный чат про джаву? Не нубский, чтобы новости обсуждали и т. д.
так ты приноси новости, будем обсуждать!
источник

AS

Aleksandr Semyannikov in Чат подкаста «Разбор Полётов»
Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀
так ты приноси новости, будем обсуждать!
Нет его, был Тагир, да вышел весь :(
источник

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in Чат подкаста «Разбор Полётов»
Aleksandr Semyannikov
Нет его, был Тагир, да вышел весь :(
Нужно быть добрее к людям
источник

J🎩

JBaruch 🎩 in Чат подкаста «Разбор Полётов»
источник