База данных и приложение в разных ДЦ, можно разносить?
Коллеги прошу поделиться опытом.
Имеется:
Процессинговая реляционная база 500Гб, есть реплики в 2х других ДЦ для резервирования: в соседнем городе и в соседней стране. Под базу идут выделенные серверы. Запросов много. Обрабатывает все запросы только мастер. В пиковые часы отдает около 350МБит трафика. Есть само приложение, живет на вирт.машинах. В дальнейшем планируется плавный рост нагрузки и размера базы.
Пока все в одном ДЦ - все норм, задержки по обработке запросов от приложения приемлемые.
Когда нужно переключить роль мастер на другую ноду в ДЦ в соседний город, начинается рост времени ответа от приложения на 200-400%, это напрягает. А если переключить на другую строну, то вообще можно забыть про нормальную работу приложения.
В настоящее время есть понимание, что приложение работает с базой не оптимально, т.е. делает много лишних запросов через внутренний API. Здесь будем разгребать и рефакторинг частей приложения будет, что облегчит ситуацию, но будет он не скоро.
Сам вопрос:
Был ли у кого успешный/не успешный опыт разнесения приложения и базы в разные ДЦ или облака? Реально ли добиться нормальной работы с базой на расстоянии? Или может быть это неверный путь и резервировать в разных местах нужно не только базу но и само приложение, чтоб они рядом работали в пределах одного ДЦ?
впервые вижу такую метрику. На развлекательных ресурсах с графикой обычно говорят, что 5-10 машин каждая из которых имеет аплинк 10Гбпс + забили свои каналы. Но вот чтоб прям в Мб, да еще и в "часы пик"
1. 10 000 запросов в секунду
2. Обрабатывает запись и чтение
3. в пики база отдает 350Мбит в секунду. данных меняется и накапливается мало: 1 Гб в сутки
Был неуспешный опыт, проблема - задержка изза дистанции (километры и пинг как следствие) между приложения нодами и ДБ, проще поднимать ноды приложения рядом с дб сервером чем бороться с задержкой.
есть понимание, что приложение работает с базой не оптимально
Да хоть как оно работает.
Как правило в таких приложениях нечего распараллеливать. в результате время запроса к БД это время простоя приложения.
В общем приложение перемещайте вместе с БД.
Скорость канала не компенсирует пинг между датацентрами, поэтому реплика базы в других датацентрах- это исключительно для того, чтобы иметь постоянный свежий бэкап, поскольку в большинстве случаев развернуть виртуалку/докер с приложением - дело минут, а развернуть бэкап базы - часы, если не дни.
Поэтому в случае чего - просто поднимаете приложение в том же датацентре, где сейчас мастер.