При разработке высокопроизводительного и масштабируемого сайта существует ряд ключевых областей:
- кэширование
- Дисковый ввод-вывод и местоположение
- Блокировка базы данных
- Я упоминал о кешировании?
Никто не сможет дать вам полное решение по Stackoverflow. Вам нужно сесть и определить, какие типы контента вы собираетесь предоставлять пользователям, как часто этот контент будет меняться и где вы можете его хранить.
Для кэширования контента вы должны посмотреть: Squid, Apache mod_cache и memcached
Физические диски должны быть рассмотрены. Если вы масштабируете свое решение, имея более одного веб-сервера, то вы будете делиться одной копией своего контента (видео, изображений и т. Д.) Или у вас будет одна копия для каждого сервера? Если вы используете одну копию, остерегайтесь ввода-вывода на этом диске. Если у вас есть одна копия содержимого для каждого сервера, вам нужно синхронизировать копии.
Использование базы данных должно быть сведено к минимуму. Никогда, никогда не храните графику в базе данных или другой контент, который можно хранить в виде простого файла на диске - веб-серверы отлично справляются с обслуживанием файлов с диска, но базы данных не так хороши для этого. Подумайте, что вам нужно , чтобы поместить в вашу базу данных, и как часто эти данные будут меняться и читаться. Когда вам нужно заблокировать эту базу данных? 9 раз из 10 база данных является узким местом в системе.
Cache. Кэш. Кэш. Посмотрите на доставку как можно большего количества статического контента. Создайте HTML-код своей веб-страницы один раз, а затем сохраните его в виде кэшированного файла - либо на диске, либо в memcached или аналогичном.
Чтобы ответить на некоторые ваши технологические вопросы напрямую:
Веб-сервер - это дано: Apache Httpd. Не самый быстрый, но пуленепробиваемый и легко настраиваемый.
ОС: Ваша ОС никогда не станет вашим узким местом, поэтому выберите что-то стабильное и хорошо поддерживаемое - CentOS работает хорошо.
DB: Ваш очевидный выбор - MySQL и Postgres. Postgres имеет лучшую производительность, но, как я уже говорил, вы должны стараться свести к минимуму активность вашей БД.
Язык: не имеет значения. Шутки в сторону. Вы можете создать масштабируемый, хорошо работающий сайт на любом из Python, Ruby, PHP, Java, .NET и т. Д. Ваш язык не будет вашим узким местом.