170 похожих чатов

Я еще раз со своим загоном, вы не против? =) Дано:


- 555 "чего-то" в бд
- N сервисов. Число может меняться, могут сдыхать и добавляться

- при запуске или при некоем процессе синхронизации каждый сервис должен взять себе энное число "чего-то" из базы и работать с этим чем-то

- кажда "штука" из базы должна быть забрана только одним инстансом, и каждая должна быть забрана (не должно остаться бесхозных)

- при сдыхании одного из инстансов сервиса остальные должны об этом узнать (например, как-то синхронизируясь друг с другом?) и подхватить штуки, которые до этого он "забрал"

Ума не приложу, как сделать это максимально малой кровью и не слишком костыльно :(

Вариант раз: мастрячить по какому-то протоколу полноценную синхронизацию между инстансами, с постоянными пингами друг друга и инфой об облуживаемых "штуках".
Геморройно, громоздко, багоопасно и, кмк, излишне

Вариант два: что-то вроде k/v store с записями, каким инстансом какая "штука" обслуживается. С ttl на случай выпадения инстанса и почтоянным апдейтом этого ttl, пока инстанс жив.

Гораздо менее больно в реализации, но тоже слегка костыльно. Плюс остается большая проблема, которую сходу хз как решить: как равномерно распределить "штуки из бд" при одновременном старте инстансов


Мб у кого есть какие мысли, или может есть какие-то либы для подобного? =)

7 ответов

5 просмотров

Сервис выгружающий записи из бд в очередь сообщений и сервисы забирающие записи из очереди, мне кажется самый простой способ без геморроя

Pg с select for update хватит)

Подумай проще, задача элементарная и много раз решенная

Если я правильно понял задачу то consul + leader election лидер раздает другим то что есть в бд, если лидер упал то автоматом лидером становится другой, самому реализовывать не придётся

первая половина до "каждое должно быть взято" и "каждый должен знать, что-то сдохло" очень похоже на классическое описание MQ с ACK. И собсна очень легко реализуется, как очередь сообщений - пусть 1 сервис берёт и вытягивает всё, а остальные обрабатывают - когда обработка "всё" - помечай в базе что всё готово

Wingman- Автор вопроса

ну я примерно это и описал тут ^ в "варианте два"

sharding! Есть N обработчиков. Номер каждого обработчика n. Есть хэш функция, которая сопоставляет каждой задаче некоторое число H. Если остаток от деления H на N не равен n, то обработчик не трогает это задание.

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
61
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Привет всем. Не знаю, удачный ли чатик я выбрал для вопроса, но он как будто в целом про концепцию фп и конкретно про Haskell. Прочитал, что в целом в мире фп нет идеи мутабел...
Gellert Cringewald
15
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Всем привет! поделитесь, пож-та, как кто дебажил / решал проблему с 504 Time out ошибкой от nginx, когда стучишься на свой vapor сервер? в логах /var/log/nginx/error.log е...
Paul
24
Как добавить ссылку в Быстрый доступ в Проводнике windows 10? Нашёл, как на power shell сделать, но может есть способ через Дельфи?
А
31
@helgispbru @Dreamer_0x01 @Pathologic93 @webber_12 Не уверен, что вам всем это жутко интересно, но в продолжение недавнего диалога отправлю свои наброски. Хочу понять, правил...
Андрей [aharito] Харитонов
13
Карта сайта