Все это делается с помощью внешнего веб-сервера, который слушает мир (я рекомендую nginx или lighttpd).
Что касается ограничений скорости, nginx может ограничивать, то есть 50 запросов / минуту на каждый IP, всего 503 страницы, которую вы можете настроить.
Что касается ожидаемого временного простоя, в мире рельсов это делается через специальную страницу keepance.html. Существует некоторая автоматизация, которая создает или символически связывает этот файл, когда серверы приложений rails не работают. Я бы рекомендовал полагаться не на наличие файлов, а на фактическую доступность сервера приложений.
Но на самом деле вы можете запускать / останавливать службы без потери соединений. То есть Вы можете запустить отдельный экземпляр сервера приложений на другом сокете / IP-порте UNIX, и балансировщик (nginx / lighty / haproxy) также использует этот новый экземпляр. Затем вы закрываете старый экземпляр, и все клиенты обслуживаются только новым. Нет связи потеряно. Конечно, этот сценарий не всегда возможен, зависит от типа изменений, которые вы внесли в новую версию.
haproxy - решение для балансировки. Он может чрезвычайно эффективно балансировать запросы к серверам приложений в вашей ферме.
Для довольно большого сервиса вы получите что-то вроде:
- api.domain разрешается до балансировочных циклических N
- каждый балансировщик передает запросы на M веб-серверов для статического и P приложений серверов для динамического содержимого. Да ладно, у вашего REST API нет статических файлов?
Для довольно небольшого сервиса (до 2K rps) вся балансировка выполняется внутри одного-двух веб-серверов.