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