Я пытаюсь написать свой собственный веб-сервер (например, NGINX или Apache) в качестве учебного упражнения. Он может работать как прямой и обратный прокси, и теперь я хочу добавить к нему некоторую логику балансировки нагрузки.
Таким образом, балансировщик нагрузки распределяет запросы по массиву серверов, а когда сервер умирает, он перенаправляет запросы с мертвого сервера на действующие.
Чтобы проверить работоспособность сервера, мы обычно проверяем его и помечаем как мертвые, если не можем подключиться. (Поправьте меня, если это не так).
Это означает, что существует задержка между сервером , умирающим , и нами , выясняющими о его смерти. Вначале мы перенаправили запросы на мертвый сервер. Что происходит с ними? Как мы их получаем? (Получаем ли мы их вообще или просто делаем тайм-аут и надеемся, что клиент повторяет попытку?)
Если сервер может обмениваться данными с балансировщиком нагрузки (то есть уведомлять при запуске, уведомлять при остановке), этого можно избежать, но как мы можем избежать непредвиденных сбоев? Что такое «канонический» способ проверки здоровья?
Спасибо за ваши мысли.