Я "очереди" на БД стараюсь не делать, потому что скорее всего будет жопа или по коннектам, или слишком много optimistic concurrency ошибок, что приведет к деградации всей БД
А вот "job"-ы можно, но нам точно нужна именно "очередь"
I
Ivan Zhuravlev
2023-10-18 16:50
Давид, наверное тут неправильно сформулирован вопрос.
Очередь понятия такое, что это может быть за алгоритм FIFO, а может быть целое приложение реализующее очередь задач как rmq c retry, dlq и другими фичами. У тебя в списке всё в кучу.
Альтернативы rmq это pulsar. Ещё есть решения очередей задач типа bullmq, redis-smq, asynq, kubemq и т.п. Они все поверх redis, nats и других брокеров сообщений и стриминговых протоколов.
И стриминга вроде нет в mqtt, но есть в nats jetstream, pulsar и т.п.
Стриминг всё же это тип протокола, как у Kafka и redpanda они абсолютно одинаковые с точки зрения протокола, но разные по реализации этого протокола.
I
Ivan Zhuravlev
2023-10-18 16:51
🦾 IT-Качалка Давида Шекунца 💪
Я "очереди" на БД стараюсь не делать, потому что скорее всего будет жопа или по коннектам, или слишком много optimistic concurrency ошибок, что приведет к деградации всей БД
А вот "job"-ы можно, но нам точно нужна именно "очередь"
Есть graphile на pg через pub/sub встроенный, много встречал что используют. Но я и pg не стал бы при выборе стэка)
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:14
Ivan Zhuravlev
Давид, наверное тут неправильно сформулирован вопрос.
Очередь понятия такое, что это может быть за алгоритм FIFO, а может быть целое приложение реализующее очередь задач как rmq c retry, dlq и другими фичами. У тебя в списке всё в кучу.
Альтернативы rmq это pulsar. Ещё есть решения очередей задач типа bullmq, redis-smq, asynq, kubemq и т.п. Они все поверх redis, nats и других брокеров сообщений и стриминговых протоколов.
И стриминга вроде нет в mqtt, но есть в nats jetstream, pulsar и т.п.
Стриминг всё же это тип протокола, как у Kafka и redpanda они абсолютно одинаковые с точки зрения протокола, но разные по реализации этого протокола.
Да, несомненно я утрировал:
Мне нужна FIFO с вариантами персистенции (none c fire-and-forget и cluster лучше log формата) и в идеале гарантией на эксклюзивность (только 1 читатель)
При определенных действиях этого можно достичь на каждой системе:
– RMQ с single active consumer (и потенциально exclusive, но от него больше проблем, лучше самому простой лок на redis сделать) – Kafka с разбитием по топикам и 1 партицией + хранить курсор на оффсет + маленький TTL, чтобы не хранить долго данные – Либы на Redis + использовать / написать лок на 1 топик = 1 консьюмер
Про redis: не доверяю JS библиотекам + это не кросстек (у нас в частности все больше появляется Go) + нам нужна иногда персистенция, а redis персистенции я не доверяю
Kafka / Redpanda: ненавижу zookeeper + очень толсто по ресурсам (но тот же RMQ в итоге тоже жрет немеренно при нагрузке) + не хотелось заниматься хранением курсора + сложно разворачивать отдельные "мини-кластера" (условно как мы можем просто и быстро иметь свои Redis / Nats серваки)
PG: итак в пределе коннектов (а мы еще даже не начинали давать реальную нагрузку)
MQTT: я использовал VerneMQ и у него есть возможность настроить FIFO, но это было 4 года назад, не смотрел что сейчас у них
Jetstream: давно слежу за их YouTube, вижу как последний год они оживились, но там были какие-то очень корневые проблемы почему я давно от них отказался (но сам NATS как message broker – замечательная технология)
RMQ: ну, сами видим
Про pulsar не слышал, посмотрю, спасибо)
I
Ivan Zhuravlev
2023-10-18 17:18
🦾 IT-Качалка Давида Шекунца 💪
Да, несомненно я утрировал:
Мне нужна FIFO с вариантами персистенции (none c fire-and-forget и cluster лучше log формата) и в идеале гарантией на эксклюзивность (только 1 читатель)
При определенных действиях этого можно достичь на каждой системе:
– RMQ с single active consumer (и потенциально exclusive, но от него больше проблем, лучше самому простой лок на redis сделать) – Kafka с разбитием по топикам и 1 партицией + хранить курсор на оффсет + маленький TTL, чтобы не хранить долго данные – Либы на Redis + использовать / написать лок на 1 топик = 1 консьюмер
Про redis: не доверяю JS библиотекам + это не кросстек (у нас в частности все больше появляется Go) + нам нужна иногда персистенция, а redis персистенции я не доверяю
Kafka / Redpanda: ненавижу zookeeper + очень толсто по ресурсам (но тот же RMQ в итоге тоже жрет немеренно при нагрузке) + не хотелось заниматься хранением курсора + сложно разворачивать отдельные "мини-кластера" (условно как мы можем просто и быстро иметь свои Redis / Nats серваки)
PG: итак в пределе коннектов (а мы еще даже не начинали давать реальную нагрузку)
MQTT: я использовал VerneMQ и у него есть возможность настроить FIFO, но это было 4 года назад, не смотрел что сейчас у них
Jetstream: давно слежу за их YouTube, вижу как последний год они оживились, но там были какие-то очень корневые проблемы почему я давно от них отказался (но сам NATS как message broker – замечательная технология)
RMQ: ну, сами видим
Про pulsar не слышал, посмотрю, спасибо)
Redis -> KeyDB с нормальной кластаризацией и персистентностью snapchat коммерчески поддерживает в продашене и у других крупных компаний тоже под капотом есть, альтреатива dragonfly ещё.
Redpanda это no-jvm и no-zookeeper, вообще, и в kafka последней уже отказались от zookeeper там есть raft версия kraft называется
I
Ivan Zhuravlev
2023-10-18 17:18
nats jetstream ты абсолютно прав, они до сих пор в changelog говно фиксят, страшно смотреть, порой очень детские баги ведущие к фатальному завершению процесса, иногда с хардовым битьем данных. В продашен опасно такое.
I
Ivan Zhuravlev
2023-10-18 17:20
pulsar это кафка для богатых в народе)
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:21
Ivan Zhuravlev
Redis -> KeyDB с нормальной кластаризацией и персистентностью snapchat коммерчески поддерживает в продашене и у других крупных компаний тоже под капотом есть, альтреатива dragonfly ещё.
Redpanda это no-jvm и no-zookeeper, вообще, и в kafka последней уже отказались от zookeeper там есть raft версия kraft называется
У нас на обоих проектах кластер KeyDB при проблемах с сетью просто делал split-brain и разъебывал всю консистентность
Мы перешли на практически ручной шардинг Redis
Вот на dragonfly смотрим, интересная штука, но опятьже логику очередей надо будет реализовать в виде отдельного сервиса, с которым будем общаться, а он уже будет давать нам функционал очереди
Repanda тоже заебись, если нужен будет kafka-like (звучит как darksouls-like) точно возьме Redpanda
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:21
Ivan Zhuravlev
pulsar это кафка для богатых в народе)
Ахахах для меня "для богатых" звучит как "сожрет все деньги на инфру и зарплаты devops"
I
Ivan Zhuravlev
2023-10-18 17:21
🦾 IT-Качалка Давида Шекунца 💪
У нас на обоих проектах кластер KeyDB при проблемах с сетью просто делал split-brain и разъебывал всю консистентность
Мы перешли на практически ручной шардинг Redis
Вот на dragonfly смотрим, интересная штука, но опятьже логику очередей надо будет реализовать в виде отдельного сервиса, с которым будем общаться, а он уже будет давать нам функционал очереди
Repanda тоже заебись, если нужен будет kafka-like (звучит как darksouls-like) точно возьме Redpanda
интересно было бы подробности как split-brain произошёл в raft log
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:24
Ivan Zhuravlev
интересно было бы подробности как split-brain произошёл в raft log
На нашем проекте он просто давал 2 разные картины в 2-х сервисах (с учетом наличия 3-х инстансов) + скорость SCAN упала в сотни раз (знаю, что дорогостоящая операция, но на redis хотябы в какой-то адекватный период времени можно было пройтись по ключам и потоково обрабатывать, а в keydb просто жесть как было долго)
На стороннем проекте я усточню подробности, но ребята там в один момент чуть сума не сошли когда не понимали почему у них совершенно разная картина в разных сервисах
I
Ivan Zhuravlev
2023-10-18 17:25
🦾 IT-Качалка Давида Шекунца 💪
Ахахах для меня "для богатых" звучит как "сожрет все деньги на инфру и зарплаты devops"
интересно было бы подробности как split-brain произошёл в raft log
А RAFT разве не способен сделать split-brain?
Представим сетевую проблему при которой 7 нод разделятся на 3 и 4, там где 4 Node просто не пройдет голосование?
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:26
Или они отрубят 4-ю ноду от голосвания?
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:27
Или там вообще majority это 5 нод?
I
Ivan Zhuravlev
2023-10-18 17:28
🦾 IT-Качалка Давида Шекунца 💪
А RAFT разве не способен сделать split-brain?
Представим сетевую проблему при которой 7 нод разделятся на 3 и 4, там где 4 Node просто не пройдет голосование?
не будет такой проблемы, там рандомный таймаут для голосования между нодами, и консенсус будет достигнут в 99.9% с первого раза на чётном количестве нод, иначе новый раунд запустят
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:28
А, я понял, 3 ноды просто не будут работать, а 4 будут
I
Ivan Zhuravlev
2023-10-18 17:28
🦾 IT-Качалка Давида Шекунца 💪
А, я понял, 3 ноды просто не будут работать, а 4 будут
3 минимальное количество для консенсуса, так что будут, и 3, и 4 и любое количество больше, но не меньше
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:29
Ivan Zhuravlev
3 минимальное количество для консенсуса, так что будут, и 3, и 4 и любое количество больше, но не меньше
Тогда при разделе на 3 и 4 каждый кластер продолжит оперировать самостоятельно, что и создаст split-brain
Вроде как, если у тебя 7 нод, тебе нужно минимум 4, чтобы продолжать работать
I
Ivan Zhuravlev
2023-10-18 17:29
смысл в том, что если кластер уже был активен с лидером, то выбор лидера нового происходит на основе кандидата, который уже будет известен даже если нода отвалилась одна или две
I
Ivan Zhuravlev
2023-10-18 17:30
🦾 IT-Качалка Давида Шекунца 💪
Тогда при разделе на 3 и 4 каждый кластер продолжит оперировать самостоятельно, что и создаст split-brain
Вроде как, если у тебя 7 нод, тебе нужно минимум 4, чтобы продолжать работать
минимум 3, но кластер может развалиться на 2 части, если это гео распределённый кластер, для этого нужно больше логики это более сложная задача супер кластера
I
Ivan Zhuravlev
2023-10-18 17:31
создаётся отдельная рафт группа по гео и отдельные внутри каждого гео
I
Ivan Zhuravlev
2023-10-18 17:31
можно почитать как это сделано у кокроуча например или эластика через бинарный лог
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:31
Ivan Zhuravlev
смысл в том, что если кластер уже был активен с лидером, то выбор лидера нового происходит на основе кандидата, который уже будет известен даже если нода отвалилась одна или две
Ну, известен имеешь ввиду засчет рандомного таймаут? Но тут надо еще брать в учет, что какая-то нода раньше может увидеть отсутствие health check от leader и ее таймаут будет быстрее
Я знаю, что в Leader Paxos у каждой ноды есть порядковый номер, поэтому каждый следующий лидер известен заранее поскольку они идут просто по этому порядковому номеру
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:32
Ivan Zhuravlev
создаётся отдельная рафт группа по гео и отдельные внутри каждого гео
Это как я понимаю Multi-Raft (вот такую штуку недавно читал)
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:34
Ivan Zhuravlev
минимум 3, но кластер может развалиться на 2 части, если это гео распределённый кластер, для этого нужно больше логики это более сложная задача супер кластера
Короче, скажем так: как-будто бы было бы логичнее RAFT учитывать развал при котором существует как минимум большинство (Math.floor(N/2) + 1) и полностью вырубать набор нод, в которых меньше большинства
Но тут мне надо почитать еще
I
Ivan Zhuravlev
2023-10-18 17:35
🦾 IT-Качалка Давида Шекунца 💪
Это как я понимаю Multi-Raft (вот такую штуку недавно читал)
это как раз реализация raft с напильником до ума, потому что из коробки протокол консенсуса не совсем консенсус, это скорее основа, которую надо допилить под твои требования системы и в твою бизнес-логику
I
Ivan Zhuravlev
2023-10-18 17:36
🦾 IT-Качалка Давида Шекунца 💪
Короче, скажем так: как-будто бы было бы логичнее RAFT учитывать развал при котором существует как минимум большинство (Math.floor(N/2) + 1) и полностью вырубать набор нод, в которых меньше большинства
Но тут мне надо почитать еще
это так и называется фактор репликации N+1, что означает 2+1, 3+1 и т.п.
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:36
Ivan Zhuravlev
это так и называется фактор репликации N+1, что означает 2+1, 3+1 и т.п.
Но тогда на 7 нод фактор репликации это 4, верно?
I
Ivan Zhuravlev
2023-10-18 17:36
фактор 3, значит 3+3 ноды +1 условия консенсуса
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:37
Ага, и получается если развалились на 3 и 4 ноды, то сет 3-х нод перестанет быть активным, верно?
I
Ivan Zhuravlev
2023-10-18 17:38
🦾 IT-Качалка Давида Шекунца 💪
Ага, и получается если развалились на 3 и 4 ноды, то сет 3-х нод перестанет быть активным, верно?
3 всё ещё активны, но мы говорили про split brain, он может быть и 3 на 3, если кластеры получают изоляцию по сети, то механизм синхронизации при восстановлении может быть CRDT поверх raft log
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:39
Ivan Zhuravlev
3 всё ещё активны, но мы говорили про split brain, он может быть и 3 на 3, если кластеры получают изоляцию по сети, то механизм синхронизации при восстановлении может быть CRDT поверх raft log
Вот я и хочу уточнить: сам по себе ведь RAFT не гарантирует отсутствие split-brain?
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:40
Ivan Zhuravlev
3 всё ещё активны, но мы говорили про split brain, он может быть и 3 на 3, если кластеры получают изоляцию по сети, то механизм синхронизации при восстановлении может быть CRDT поверх raft log
Кстати, единственная база с CRDT с которой я работал это CouchDB и мне стало очень странно, почему их протокол так мало используют
Может, я не достиг тогда реальных проблем
I
Ivan Zhuravlev
2023-10-18 17:40
ну скажем так, никакая система не сможет гарантировать на 100% ничего, учитывая количество вариаций разных проблем, которые могут в распределённой системе возникнуть) но, рафт делает эти гарантии очень высокими
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:41
Ivan Zhuravlev
ну скажем так, никакая система не сможет гарантировать на 100% ничего, учитывая количество вариаций разных проблем, которые могут в распределённой системе возникнуть) но, рафт делает эти гарантии очень высокими
Понял
Ну, короче, мне кажется, что если в KeyDB нет жестокого отключения нод при развале 3 / 2 или 4 / 3, то наша проблема с split-brain вполне возможна
I
Ivan Zhuravlev
2023-10-18 17:41
как раз вот я не просто так её советую, там хороший кластер с точки зрения реализации
I
Ivan Zhuravlev
2023-10-18 17:42
поэтому я удивился, т.к. у меня много в проде под нагрузкой его
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:42
Короче, я схожу к тим лиду соседней команды и узнаю что там реально произошло
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:45
Ivan Zhuravlev
поэтому я удивился, т.к. у меня много в проде под нагрузкой его
А пока ты здесь: а про Redis Streams что-нибудь слышал?
I
Ivan Zhuravlev
2023-10-18 17:45
🦾 IT-Качалка Давида Шекунца 💪
А пока ты здесь: а про Redis Streams что-нибудь слышал?
да, и использовал, нормально для простых задач, но не так, чтобы на нагрузке)
I
Ivan Zhuravlev
2023-10-18 17:45
видел очереди задач на нём у китайцев
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:46
Ivan Zhuravlev
да, и использовал, нормально для простых задач, но не так, чтобы на нагрузке)
На нагрузке имеешь ввиду задержки из-за персистенции или кораптяться данные? А еще это как-то взаимодействует с кластеризацией?
I
Ivan Zhuravlev
2023-10-18 17:46
🦾 IT-Качалка Давида Шекунца 💪
На нагрузке имеешь ввиду задержки из-за персистенции или кораптяться данные? А еще это как-то взаимодействует с кластеризацией?
не, просто не использовал на нагрузке
I
Ivan Zhuravlev
2023-10-18 17:47
нет личного опыта
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:47
Ivan Zhuravlev
нет личного опыта
А, понял
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:48
Ivan Zhuravlev
нет личного опыта
Просто пробежался глазами и если это правда + есть нормальная поддержка кластера, то это то, что нужно:
– Redis Pub/Sub для none persistence + fire-and-forget – Redis Streams для лог хранилища
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:48
🦾 IT-Качалка Давида Шекунца 💪
Просто пробежался глазами и если это правда + есть нормальная поддержка кластера, то это то, что нужно:
– Redis Pub/Sub для none persistence + fire-and-forget – Redis Streams для лог хранилища
Ну и всяие локи тоже на том же Redis можно организовать, чтобы достичь эксклюзивности и подобного
I
Ivan Zhuravlev
2023-10-18 17:49
🦾 IT-Качалка Давида Шекунца 💪
Просто пробежался глазами и если это правда + есть нормальная поддержка кластера, то это то, что нужно:
– Redis Pub/Sub для none persistence + fire-and-forget – Redis Streams для лог хранилища
redis проектировался изначально как In-memory storage, поэтому в таком кейсе стоит подумать, чтобы сделать слой между hot/cold хранением куда-то ещё, не думаю, что там оптимально в AOF это будет
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 17:50
Ivan Zhuravlev
redis проектировался изначально как In-memory storage, поэтому в таком кейсе стоит подумать, чтобы сделать слой между hot/cold хранением куда-то ещё, не думаю, что там оптимально в AOF это будет
Я надеюсь что персистенцию Stream они не на AOF сделали (вроде выглядит как отдельная пристройка), но надо посмотреть
I
Ivan Zhuravlev
2023-10-18 17:53
🦾 IT-Качалка Давида Шекунца 💪
Я надеюсь что персистенцию Stream они не на AOF сделали (вроде выглядит как отдельная пристройка), но надо посмотреть
я тоже, но учитывая сколько там лет 5 уже redis raft делает Antirez)
I
Ivan Zhuravlev
2023-10-18 17:54
с трудом поверю, что стримы появившиеся меньше чем за год имеют какую-то отдельную архитектуру проверенную) больше jetstream напоминает
Больше всего в таких решениях у меня вопрос: и как там с аллокациями, господа
Если они норм смогли потоково сохранять на диск и не читаю в буфер отправлять на клиента по offset, то мое почтение, кажется, это рано или поздно попадет в наш продакшен
I
Ivan Zhuravlev
2023-10-18 18:39
Ivan Zhuravlev
было что-то ещё в закладках на го из такого популярненького, но не могу вспомнить, вроде kubemq тоже на go и там nats streaming
Больше всего в таких решениях у меня вопрос: и как там с аллокациями, господа
Если они норм смогли потоково сохранять на диск и не читаю в буфер отправлять на клиента по offset, то мое почтение, кажется, это рано или поздно попадет в наш продакшен
наоборот, это показатель монетизации опенсорца, альтруисты заканчиваются, а коммерческие рельсы строят дальше
I
Ivan Zhuravlev
2023-10-18 18:44
я когда-то следил и изучал каждый этот проект, но сейчас уже не уверен на сколько всё актуально
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 18:44
Ivan Zhuravlev
это энтерпрайз поддержка, опенсорц под апач2
А, ну тогда норм
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 18:45
Ivan Zhuravlev
наоборот, это показатель монетизации опенсорца, альтруисты заканчиваются, а коммерческие рельсы строят дальше
Я исключительно ЗА платить за технологии, но только если это четнастная оплата (за доп услугу)
И для меня это одна из главных причин не использовать CockroachDB – при всей ее крутости, закрывать CDC под лицензию, на мой взгляд, ублюдство
I
Ivan Zhuravlev
2023-10-18 18:46
🦾 IT-Качалка Давида Шекунца 💪
Я исключительно ЗА платить за технологии, но только если это четнастная оплата (за доп услугу)
И для меня это одна из главных причин не использовать CockroachDB – при всей ее крутости, закрывать CDC под лицензию, на мой взгляд, ублюдство
про CDC согласен, не самая энтерпрайз фича, я недавно узнал, что они настройки гео кластера вынесли из энтерпрайза, удивился)
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 18:47
Ivan Zhuravlev
про CDC согласен, не самая энтерпрайз фича, я недавно узнал, что они настройки гео кластера вынесли из энтерпрайза, удивился)
То есть, гео теперь доступно без лицензии?
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 18:48
Ivan Zhuravlev
про CDC согласен, не самая энтерпрайз фича, я недавно узнал, что они настройки гео кластера вынесли из энтерпрайза, удивился)
Хм, а кстати интересный вопрос: представим, что CDC доступен, стал бы ты делать очередь на Cockroach?
I
Ivan Zhuravlev
2023-10-18 18:51
🦾 IT-Качалка Давида Шекунца 💪
Хм, а кстати интересный вопрос: представим, что CDC доступен, стал бы ты делать очередь на Cockroach?
ну у меня была когда-то простая очередь задач на нём, я использовал лайфках 2 колоночные таблицы для задач и воркеров, и обычную таблицу с мета данными. Двухколоночные таблицы используют низкоуровневое kv api для работы с данными пропуская слой абстракции для преобразования в плоские данные, это работает достаточно быстро. Но это было скорее экспериментом, что так тоже работает и можно юзать)
ну у меня была когда-то простая очередь задач на нём, я использовал лайфках 2 колоночные таблицы для задач и воркеров, и обычную таблицу с мета данными. Двухколоночные таблицы используют низкоуровневое kv api для работы с данными пропуская слой абстракции для преобразования в плоские данные, это работает достаточно быстро. Но это было скорее экспериментом, что так тоже работает и можно юзать)
Просто гипотетически:
- CDC дает fire-and-forget, но без эксклюзивности
- А пулл модель с локом («UPDATE … RETURNING”) с учетом гигантского кол-вы коннектов может сработать
Единственное, возможно, во 2-м подходе уровень консистентности убьет скорость в 0 или перегрузит CPU, тут сложно сказать
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 18:58
🦾 IT-Качалка Давида Шекунца 💪
Просто гипотетически:
- CDC дает fire-and-forget, но без эксклюзивности
- А пулл модель с локом («UPDATE … RETURNING”) с учетом гигантского кол-вы коннектов может сработать
Единственное, возможно, во 2-м подходе уровень консистентности убьет скорость в 0 или перегрузит CPU, тут сложно сказать
А ещё CDC может даже дать возможно использовать RPC… но это тоже экспериментаторство
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 19:02
🦾 IT-Качалка Давида Шекунца 💪
А ещё CDC может даже дать возможно использовать RPC… но это тоже экспериментаторство
Я просто мечтаю о БД, в которой будет возможность ещё реализовать EDA и RPC (я дрочу на асинхронные RPC с брокером как дискавери)
Для этого нужна атомарность в рамках query и subquery, множество коннектов, конкурентные локи на строки (чтобы транзакции на разные строки не мешали друг другу), быстрый batch delete (без глобального Vacuum), CDC ну и ещё некоторое кол-во условий, которые я на лету не придумаю
I
Ivan Zhuravlev
2023-10-18 19:05
🦾 IT-Качалка Давида Шекунца 💪
Я просто мечтаю о БД, в которой будет возможность ещё реализовать EDA и RPC (я дрочу на асинхронные RPC с брокером как дискавери)
Для этого нужна атомарность в рамках query и subquery, множество коннектов, конкурентные локи на строки (чтобы транзакции на разные строки не мешали друг другу), быстрый batch delete (без глобального Vacuum), CDC ну и ещё некоторое кол-во условий, которые я на лету не придумаю
Да да именно это, но на UPDATE, а не DELETE, потому что иначе Vacuum слишком часто будет триггерится
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 19:09
🦾 IT-Качалка Давида Шекунца 💪
Да да именно это, но на UPDATE, а не DELETE, потому что иначе Vacuum слишком часто будет триггерится
Это я из опыта PG говорю, на Cock не знаю так ли это будет
I
Ivan Zhuravlev
2023-10-18 19:10
🦾 IT-Качалка Давида Шекунца 💪
Это я из опыта PG говорю, на Cock не знаю так ли это будет
в 2 колонки всё как с kv + raft, нет издержек дополнительных
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-18 19:11
Ivan Zhuravlev
в 2 колонки всё как с kv + raft, нет издержек дополнительных
То есть и Delete, и Update оба сделают запись в raft лог и всё?
А индексы?
I
Ivan Zhuravlev
2023-10-18 19:12
🦾 IT-Качалка Давида Шекунца 💪
То есть и Delete, и Update оба сделают запись в raft лог и всё?
А индексы?
индексы у меня только primary были в джобах и воркерах, а вся дрянь с мета данными в отдельной многоколоночной таблице с другими индексами, к ней обращаемся мы только из воркера и при постановке джобы, там скорость уже не так критична
“serverless, multi-tenant, embedded data warehousing” - уфффф 🔥
То есть сам каталог файлов в формате Parquet хранится на S3, а процессинг Query происходит на серверлесс лямбдах…
Чувак увел в максимум концепцию разделения хранения и процессинга
Очень круто
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-19 05:41
🦾 IT-Качалка Давида Шекунца 💪
“serverless, multi-tenant, embedded data warehousing” - уфффф 🔥
То есть сам каталог файлов в формате Parquet хранится на S3, а процессинг Query происходит на серверлесс лямбдах…
Чувак увел в максимум концепцию разделения хранения и процессинга
Очень круто
Единственное, мне кажется до сих пор много проблем с организацией своего Serverless сервера
Из вариантов, которые я знаю, FaaS (но он жирный) и Firecracker, но его надо уметь готовить
Это я к тому что гигантское кол-во данных слишком сенситивный чтобы разворачивать люмбды на сторонних клаудах
И ответственно развернуть Clickhouse на своих серверах может быть все равно проще и дешевле
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-19 05:42
🦾 IT-Качалка Давида Шекунца 💪
Единственное, мне кажется до сих пор много проблем с организацией своего Serverless сервера
Из вариантов, которые я знаю, FaaS (но он жирный) и Firecracker, но его надо уметь готовить
Это я к тому что гигантское кол-во данных слишком сенситивный чтобы разворачивать люмбды на сторонних клаудах
И ответственно развернуть Clickhouse на своих серверах может быть все равно проще и дешевле
А ещё я задумался что это замечательная зона куда стоит расти Nomad, потому что он как раз про минимальный футпринт и запуск всего от контейнеров до бинарников
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-19 05:46
🦾 IT-Качалка Давида Шекунца 💪
Единственное, мне кажется до сих пор много проблем с организацией своего Serverless сервера
Из вариантов, которые я знаю, FaaS (но он жирный) и Firecracker, но его надо уметь готовить
Это я к тому что гигантское кол-во данных слишком сенситивный чтобы разворачивать люмбды на сторонних клаудах
И ответственно развернуть Clickhouse на своих серверах может быть все равно проще и дешевле
А ещё вместо S3 будет что-то типа своего Minio за которым тоже надо следить и тогда опять вопрос будет ли это лучше Clickhouse
I
Ivan Zhuravlev
2023-10-19 07:57
у меня в серверлесс в последнем эксперименте ml-модельки на onnx и ничего норм)
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-19 07:58
В компаниях, в которых я работал, обычно не готовы были доверять даже криптографии, потому что +- если данные вскрываются можно было даже присесть (например, Мегафон)
Ну и конечно же, когда мы говорим про реальные объемы, дешевле было иметь свои собственные сервера, нежели арендовать любые облачные решения
I
Ivan Zhuravlev
2023-10-19 07:58
🦾 IT-Качалка Давида Шекунца 💪
В компаниях, в которых я работал, обычно не готовы были доверять даже криптографии, потому что +- если данные вскрываются можно было даже присесть (например, Мегафон)
Ну и конечно же, когда мы говорим про реальные объемы, дешевле было иметь свои собственные сервера, нежели арендовать любые облачные решения
сложно объяснять таким людям, что математические формулы нельзя обмануть, как и законы физики)
Погоди, а для чего именно cloudflare workers? Knative же должен спавнить и процессить лямбы или ты его для чего-то другого предлагаешь?
I
Ivan Zhuravlev
2023-10-19 08:01
🦾 IT-Качалка Давида Шекунца 💪
Погоди, а для чего именно cloudflare workers? Knative же должен спавнить и процессить лямбы или ты его для чего-то другого предлагаешь?
про cf workers это пример быстрого холодного старта, там они реально какую-то магию сделали, и холодный старт от горячего не отличается, возможно просто всегда держат в горячем инстансы, но говорят, что не делают так)
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-19 08:02
Ivan Zhuravlev
сложно объяснять таким людям, что математические формулы нельзя обмануть, как и законы физики)
Чаще всего, был или необразованный, или слишком образованный безопасник, который говорил: "Храним только на этой железке, которая даже к интернету не подключена и точка"
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-19 08:03
Ivan Zhuravlev
про cf workers это пример быстрого холодного старта, там они реально какую-то магию сделали, и холодный старт от горячего не отличается, возможно просто всегда держат в горячем инстансы, но говорят, что не делают так)
Я видел на эту тему разработку: запускаешь node.js (WebKit / V8) runtime, все лямбды отправляешь туда как строчки, а потом делаешь условно "eval"
Так у тебя типа куча горячих runtime, которые запускают частные лямбды
Мне кажется это как раз про Cloudflare было
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-19 08:04
🦾 IT-Качалка Давида Шекунца 💪
Я видел на эту тему разработку: запускаешь node.js (WebKit / V8) runtime, все лямбды отправляешь туда как строчки, а потом делаешь условно "eval"
Так у тебя типа куча горячих runtime, которые запускают частные лямбды
Мне кажется это как раз про Cloudflare было
Вообще, смешно: по факту, такое можно из коробки сделать если писать на PHP )))
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-19 08:04
🦾 IT-Качалка Давида Шекунца 💪
Вообще, смешно: по факту, такое можно из коробки сделать если писать на PHP )))
Наверное, и на Lua тоже
🦾
🦾 IT-Качалка Давида Шекунца 💪
2023-10-19 08:11
🦾 IT-Качалка Давида Шекунца 💪
Я видел на эту тему разработку: запускаешь node.js (WebKit / V8) runtime, все лямбды отправляешь туда как строчки, а потом делаешь условно "eval"
Так у тебя типа куча горячих runtime, которые запускают частные лямбды