У меня есть кластер mongodb на aws. Чтобы уменьшить задержку в сети, я хочу иметь несколько шардов в разных регионах. В каждом регионе будут узлы приложений, которые подключаются к локальным mongos. Как я могу гарантировать, что монго всегда будут отправлять запросы на ближайший осколок, чтобы уменьшить задержку. Я нашел решение, использующее сегментирование с учетом тегов, которое заключается в пометке каждого набора реплик в зависимости от региона и добавлении ко всем запросам поля, указывающего, из какого региона был сделан запрос. Но мне было интересно, есть ли другие решения для настройки монго, чтобы они были географически осведомлены о шардах. Спасибо!
Существует значение предпочтения чтения «ближайший», которое фактически использует задержку между MongoS и MongoD, чтобы определить, какой член набора является лучшим / самым быстрым для запроса. Вы можете найти документацию по этому поводу здесь: https://docs.mongodb.org/manual/reference/read-preference/#nearest
Выбор основан на «выборе членов». Для сегментированного кластера, подобного вашему, вы можете узнать, как MongoS выбирает узел здесь: https://docs.mongodb.org/manual/core/read-preference-mechanics/#read-preference-in-sharded-clusters
Самое важное, на что следует обратить внимание, это то, что «ближайший» не заботится о типе узла. Таким образом, даже если вы выполняете запрос на чтение, возможно, что MongoS выберет первичный (что иногда не так, как вы этого ожидали). Единственный способ исправить это - использовать уже упомянутые вами теги.
Надеюсь, это поможет!