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

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

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

16 ответов

10 просмотров

Насколько я понимаю, 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 - обычно базе просто не хватает ресурсов выполнить все запросы. Поэтому можно пожертовать хопом для решения задачи.

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

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

$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
И ещё вопрос: можно ли типа как на дос как-то запариться и с помощью прерываний выводить текст, вместо функции printf ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
34
Ладно, ещё тупого спрошу. Код должен банально вывести значение регистра на консоль, на деле же не выводя ничего, просто оставляя нерабочую консоль (открыта, ничего не написан...
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
25
здравствуйте. пытаюсь проверить, содержится ли в десятичном представлении инта некоторая цифра. совершаю: strstr(x, "5") != NULL) получаю ошибку с фото (заведомо неработающий ...
Катя Шевчук🪇
18
Что там вообще с кроссплатформенностью?
🄼🄰🄺🅉🄰🄸
23
Доброй ночи. Вопрос знатокам. Имеется некая таблица, результат которой выведен в DBGrid на форме. И есть форма, с помощью которой можно как добавить запись, так и отредактиров...
Евгений
28
Ребята. Этот вопрос мучает меня уже 13 - 15 лет. Почему при валидации в ФормЛистере у поля phone поведение странноватое и отличается от других? А именно, вот набор правил д...
Андрей [aharito] Харитонов
1
{ char buff = *start; *start = *end; *end = buff; } Из-за этой строчки? Что каждый символ через перем бафф? Как вариант использовать другие со...
Wenks
12
а всё почему? потому что ассемблер в отличии от яву порождает множество пагубных привычек, среди которых например можно отметить использование глобальных переменных для всего ...
Mixail Frolov
35
Кстати, а я вот тут подумал. Допустим, у нас имеется цикл который выполняет огромное количество итераций, но мы хотим, чтобы какие-то действия исполнилось только один раз. В Я...
The Bird of Hermes
23
Карта сайта