Поддержка Grails для обработки сбоя источника данных

Я ищу решение для автоматического переключения базы данных в приложении Grails. У меня есть две базы данных, которые находятся на двух разных сайтах, подключенных через WAN. На сайте A у нас есть база данных 01, которая является основной базой данных для приложения на том же сайте, на котором находится база данных, которая является приложением 1, тогда как она будет рассматриваться как вторичная база данных для приложения на другом сайте, который является приложением 2, и наоборот.

Пожалуйста, обратитесь к изображению ниже для более подробной информации:

Требуемая репликация базы данных и проектирование отказоустойчивости

Итак, согласно конструкции, описанной выше:

  • Приложение, развернутое на сайте A, должно в первую очередь использовать базу данных на сайте A
  • Если база данных на сайте A недоступна, то приложение, развернутое на сайте A, должно использовать базу данных на сайте B (в качестве вторичной базы данных).
  • После запуска базы данных на сайте A приложение, развернутое на сайте A, должно снова начать использовать базу данных на сайте A (в качестве основной базы данных).

Точно так же он должен работать для приложения на сайте B. Для приложения на сайте B база данных на сайте B должна использоваться в основном (в качестве основной базы данных), а база данных на сайте B (в качестве дополнительной базы данных).

Примечание. При запуске базы данных на соответствующем сайте приложение на этом сайте (на котором оно развернуто) снова должно начать использовать базу данных, чтобы избежать ненужного обмена данными по глобальной сети.

Предоставляют ли Grails такую ​​поддержку, что мы можем указать два источника данных, один из которых является основным, а другой - второстепенным (который будет использоваться только в том случае, если основной недоступен)?

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

1 ответ

Реальный ответ не в том, чтобы ваш код обрабатывал это, а в том, чтобы реализовать балансировщик нагрузки, который будет соответствующим образом маршрутизировать трафик. Хотя вы можете сделать это в своем собственном коде (теоретически), какое бы решение вы ни предложили, оно будет далеко от того, что фактический балансировщик нагрузки способен учитывать при сбое.

Чтобы ответить на ваш вопрос, у Grails нет ничего, что могло бы решить эту проблему. Эта проблема должна решаться за пределами вашего приложения и вместо этого быть частью разработки / реализации топологии сети / инфраструктуры.

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