Как лазурь обрабатывает георепликацию под капотом

У нас есть лазурное веб-приложение и дБ, которые мы хотим тиражировать по всему миру.

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

Теперь мой вопрос таков: режим "Одна база данных с возможностью записи" (основной) и реплики, доступные только для чтения, как мне или лазурью справиться с этим в момент вызова базы данных?

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

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

В том случае, если это я должен управлять этим, то я должен обработать 2 строки подключения, одну для основной базы данных, доступной для записи, и одну для ближайшей базы данных, доступной для чтения, и я должен разделить свои службы, классифицированные по действиям записи / чтения

и следуя этому сценарию, если у меня есть процедура Store, которая записывает и читает, как бы я справился с этим?

1 ответ

Это распространенная проблема при использовании SQL Azure в режиме гео-репликации. Вы не можете использовать традиционные методы LB, такие как Azure Traffic Manager. В этом случае вы должны использовать шаблон повторов в соединениях с базой данных, работая от первичного до альтернативного имени по мере необходимости.

AFAIK, после подключения к базе данных нет простого способа определить, используете ли вы первичный или только для чтения вторичный сервер. По этой ссылке есть несколько сохраненных процедур, которые вы можете вызвать, чтобы понять топологию. Вы можете понять это с помощью Azure PS/API, но тогда вам придется встроить эту логику в свое приложение.

Короче:

  1. Вам нужно обрабатывать соединения с базой данных и использовать шаблоны повторов и т. Д.
  2. Вам следует внедрить CQRS, чтобы отделить рабочие нагрузки для чтения / записи друг от друга, если вы хотите использовать дополнительные функции, доступные только для чтения.

Надеюсь, это поможет.

Другие вопросы по тегам