Как уже упоминалось, масштабируемость приложения зависит от многих факторов. Некоторые параметры могут зависеть от приложения, но правильное планирование всегда важно с самого начала.
Существует два типа масштабирования: вертикальное и горизонтальное. Вертикальное масштабирование - это старый подход «больше оборудования», то есть обновление сервера и / или памяти. Горизонтальное масштабирование - это правильный способ масштабирования путем добавления избыточности и охвата ресурсов на нескольких серверах. Обычно, когда люди говорят о масштабировании, они имеют в виду горизонтальное масштабирование.
Типичная веб-архитектура для масштабирования требует как минимум одного балансировщика нагрузки, двух или более веб-серверов и одного или нескольких серверов баз данных. Каждый слой масштабируется независимо и должен обрабатываться по-разному. Например, вы можете добавить дополнительные балансировщики нагрузки, чтобы сделать сайт более доступным (поэтому, если один балансировщик выйдет из строя, другие не пострадают); этот уровень не должен требовать изменений в вашем приложении, но потребует других изменений в программном обеспечении вашего DNS и веб-сервера. И наоборот, добавление серверов баз данных может повысить доступность, увеличить время отклика или и то, и другое. Изменения на уровне базы данных, вероятно, потребуют изменений в приложении, чтобы оно могло разделять операции чтения и записи на нескольких серверах.
Конечно, есть много других инструментов, которые могут использоваться для масштабирования и / или высокой доступности. Примеры включают кэширование на уровне приложений (memcached), ускорители HTTP (в основном кэширование на уровне HTTP) и альтернативные методы хранения данных.
Лучше всего помнить об этом при планировании и создании основы приложения. Нужно ли будет читать и писать с разных серверов баз данных? Как сеансы хранятся в локальной файловой системе (не масштабируемой) или в центральном кэше (масштабируемой)? Можно ли кэшировать эти объекты данных и, если да, то как долго они будут слишком устаревшими? Если вы обратите внимание на эти основные вещи, большую часть времени ваше приложение сможет масштабироваться без особой дополнительной работы с базой кода.