Распределитель входящего трафика

Для простого распределителя используйте round-robin по доступным узлам, защищая общий счётчик от гонок. Выбор узла отделите от проксирования запроса, таймаутов и проверки здоровья backend.

Короткий ответ

Что ответить на собеседовании

Для простого распределителя используйте round-robin по доступным узлам, защищая общий счётчик от гонок. Выбор узла отделите от проксирования запроса, таймаутов и проверки здоровья backend.

Подробный разбор

Ответ с пояснениями

Условие

Реализуйте простой распределитель запросов (load balancer). Система принимает входящий запрос, имеет набор узлов — серверов, на которых запущено одно и то же backend‑приложение. Необходимо определить, какой из серверов будет обслуживать текущий запрос, и перенаправить его туда. При этом можно использовать любые стратегии выбора (например, round‑robin, случайный выбор, наименьшая нагрузка и т.д.).

Ответ

Для простого распределителя используйте round-robin по доступным узлам, защищая общий счётчик от гонок. Выбор узла отделите от проксирования запроса, таймаутов и проверки здоровья backend.

Минимальный селектор для одного процесса:

from threading import Lock

class RoundRobin:
    def __init__(self, servers):
        self.servers = tuple(servers)
        self.index = 0
        self.lock = Lock()

    def choose(self):
        with self.lock:
            if not self.servers:
                raise RuntimeError('No backend available')
            server = self.servers[self.index % len(self.servers)]
            self.index += 1
            return server

Прокси отправляет запрос выбранному upstream, не раскрывая внутренний адрес клиенту через обычный redirect. В рабочем решении нужны health checks, лимиты соединений, таймауты и безопасные повторы только подходящих операций. Round-robin не учитывает разную длительность запросов.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее