Вот я понимаю как делать отказоустойчивость с одной стороны. Несколько инстансов бекэнда, несколько реплик БД. Бекэнд можно написать stateless, БД существуют распределённые. Одна нода упадёт, другие ноды возьмут нагрузку.
Но в конечном счёте что бы мы не навернули в инфраструктуре, в DNS записи придётся указать один конкретный IP адрес. И сервер, чей это IP станет единой точкой отказа, хоть он проксирует трафик на 10 бекэндов, настроен проверять в фоне что они живы и исключать из round robin упавшие ноды.
Насчёт «один IP адрес» я, конечно, слукавил, но не сильно - несколько A/AAAA записей с одинаковым именем можно использовать только для балансировки нагрузки, но не для отказоустойчивости (клиенты выбирают случайный IP из списка, но не ретраят другой, если не фортанёт).
При этом DNS имеет TTL и обновляется не быстро - даже 5 минут дайнтайма для крупного ресурса будет ощутимо, а с учётом того что некоторые DNS сервера кешируют дольше указанного TTL, речь может идти и о часах.
И как же тогда обеспечивают настоящую отказоустойчивость, чтобы реверс прокси тоже можно было ронять/перезапускать?
Пока на ум приходит только CDN типа CloudFlare, которые позволяют переключать IP адрес записи гораздо быстрее, чем позволяет DNS (так как DNS не обновляется, обновляются лишь настройки их сообственного реверс прокси и там уже время реакции секунды).
отказоустойчивость