Когда в логах балансировщика request time показывает пару миллисекунд, кажется, что там просто переслали пакет с одного порта на другой. На деле за эти миллисекунды происходит цепочка отдельных решений: принять соединение, разобраться с шифрованием, выбрать конкретный бэкенд из списка живых, убедиться, что он действительно жив прямо сейчас, отправить туда запрос и дождаться ответа. Каждый шаг может пойти не так, и именно поэтому балансировщик — не «труба», а маленькая программа с состоянием и логикой принятия решений.
Подробнее →