Что такое масштабируемые системы и в чем их отличие от немасштабируемых
Что проверяют
Умеете ли вы рассуждать о системе целиком, а не о коде одного обработчика. Для питониста вопрос заострён вдвойне: рантайм не даёт выехать на потоках внутри процесса, поэтому масштабирование почти всегда означает больше процессов и аккуратную работу с состоянием.
Как отвечать
Дайте рабочее определение вместо общих слов: система масштабируема, если при добавлении ресурсов пропускная способность растёт близко к пропорционально, а задержка под нагрузкой держится в известных границах. Немасштабируемая упирается в узел или участок, который нельзя размножить.
Разложите на признаки. Процессы без состояния: сессия и кэш во внешнем хранилище, любой запрос обслуживает любой воркер. Данные разделяемы: есть ключ, по которому набор режется на независимые части. Долгая работа вынесена в очередь, а не выполняется внутри веб-запроса. Узкие места названы заранее: пул соединений к базе, глобальные блокировки, сквозные счётчики, единый планировщик.
Обязательно назовите потолок: доля последовательной работы ограничивает выигрыш от любого числа узлов, а координация между узлами с ростом их числа начинает отнимать больше, чем приносит. Отсюда и практический вывод: масштабируемость проверяется не разовым замером, а нагрузочным прогоном на удвоенном числе воркеров.
Где спотыкаются
Сводят ответ к словам «горизонтально» и «вертикально». Это способ добавить железо, а не свойство системы: приложение с сессией в памяти процесса и глобальным словарём не станет масштабируемым от второго сервера.
Забывают про хранилище. Веб-слой размножается за минуты, но все процессы идут в одну базу, и потолок определяет она: исчерпанный пул соединений, блокировки на горячих строках, отсутствие ключа для шардирования.
Путают масштабируемость с производительностью. Быстрый монолит на одном узле может обслуживать больше, чем плохо нарезанный кластер; вопрос в том, что происходит при удвоении нагрузки, а не в абсолютных числах на текущей.