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

Вопрос по архитектуре: Есть кластер MongoDB с гиганской шардированной коллекицией допустим

в 10 шардов, есть 10 инстансов микросервисов, которые с ним работают. Нужно сделать так чтобы каждый инстанс микросервиса работал с отдельным шардом и запросы на инстансы распределялись согласно ключу шардирования при помощи некоего балансировщика, который представлен скажем в 3-х инстансах.
Существуют ли уже готовые решения-балансировщики, которые умеют это делать?

16 ответов

17 просмотров

Насколько я понимаю, replicaset так и работает. Запросы можно направлять на любой инстанс, он сам разберётся.

Sergey-Nikulitsa Автор вопроса
Александр Д.
Насколько я понимаю, replicaset так и работает. За...

А тут поинт в том, чтобы иметь возможность в каждом инстансе микросервиса зафигачить InMemory кэш

Полагаю, что нужно знать обо всей топологии и для каждого шарда отмечать инстансу микросервиса что шард «занят». Отдельно балансировщика тут не нужно, но внешняя система, например consul/etc/zookeeper может использоваться для такой задачи.

Sergey Nikulitsa
А тут поинт в том, чтобы иметь возможность в каждо...

Кэш данных? Не совсем понятно для чего он, неужели сетевые задержки настолько большие и критичные?

Sergey-Nikulitsa Автор вопроса
Александр Д.
Кэш данных? Не совсем понятно для чего он, неужели...

Кэш данных, да. Сетевые задержки критичны до безобразия. Нужно вот чтоб как будто бы 10 отдельных независимых сервисов с возможностью держать данные в кеше и выдавать их прям из памяти

Sergey Nikulitsa
А тут поинт в том, чтобы иметь возможность в каждо...

А, в такой конфигурации можно по-другому. Перед базой поставить микросервисы-кеши. Если пришёл запрос на микросервис - смотрим в кеш и если нет - идём в базу. А вот ходить к микросервисам уже нужно знать о топологии. и делать какой-нибудь instance = hash(requestId) % instance_count. Главное кейс с переложем и вылетом ответственного за микросервис шарда разрешить (можно в сторону rendezvous hashing глянуть). А есть ли возможность поставить lru кеш перед монгой и забить на шарды вообще?

Sergey-Nikulitsa Автор вопроса
Anton Ermak
А, в такой конфигурации можно по-другому. Перед ба...

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

Sergey Nikulitsa
Кэш данных, да. Сетевые задержки критичны до безоб...

Если задержки критичны, то вы можете выкинуть монгу и запихнуть все данные в ваш сервис, in-memory. И обернуть все это сервис-мешем, где по ключу будет роутинг на нужный инстанс.

Sergey-Nikulitsa Автор вопроса
mc
Если задержки критичны, то вы можете выкинуть монг...

персистить асинхронно в фоновом режиме?

mc
Если задержки критичны, то вы можете выкинуть монг...

Тоже вариант но в случае отказа сервиса время восстановления будет неприемлемо большим, в зависимости от объемов само собой

mc
Реплики. Не надо держать 1 инстанс шарда

И тут вступает проблема их синхронизации, которую довольно сложно решать с нуля

Александр Д.
И тут вступает проблема их синхронизации, которую ...

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

Woof Собач
Нетворк хопы все не загубят?

Смотря в чём дело, я так думаю в throughput - обычно базе просто не хватает ресурсов выполнить все запросы. Поэтому можно пожертовать хопом для решения задачи.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта