Решение проблем с перегруженным веб-сервером - PullRequest
4 голосов
/ 09 ноября 2010

Я новичок в области веб-разработки и в настоящее время беру интервью у компаний. Наиболее любимые вопросы среди людей, которые задают:

Как вы масштабируете свой веб-сервер, если он начинает выполнять миллион запросов?

Что бы вы сделали, если бы в это время работал только один экземпляр базы данных?Как вы справляетесь с этим?

Эти вопросы действительно интересны, и я хотел бы узнать о них.
Пожалуйста, укажите ваши предложения / практики (которые вы используете) для таких сценариев

Спасибо

Ответы [ 6 ]

7 голосов
/ 17 ноября 2010

Как масштабировать:

  • Определить свои узкие места.
  • Определить правильное решение проблемы.
  • Убедитесь, что вы можете реализовать правильное решение.
  • Определите альтернативное решение и отметьте

Типичные параметры масштабирования:

  • Вертикальное масштабирование (большее, более быстрое аппаратное обеспечение сервера)
  • Загрузитьбалансировка
  • Разделение уровней / компонентов на большее / другое оборудование
  • Перенос работы через кэширование / cdn

Параметры масштабирования базы данных:

  • Вертикальное масштабирование (большее, более быстрое серверное оборудование)
  • Репликация (активная или пассивная)
  • Кластеризация (если СУБД поддерживает это)
  • Sharding
4 голосов
/ 16 ноября 2010

На самом базовом уровне масштабирование веб-серверов состоит в том, чтобы написать приложение таким образом, чтобы оно могло работать на> 1 машине, и добавить больше машин для решения проблемы.Независимо от того, сколько вы их настроите, возможное масштабирование будет включать ферму веб-серверов.

Проблема с базой данных гораздо сложнее решать.Какой у вас процент чтения / записи?Что это за приложение?OLTP?OLAP?Социальные медиа?Что такое база данных?Как добавить больше серверов для обработки нагрузки?Разделяем ли мы наши данные по нескольким базам данных?Или повторить все изменения в нагрузках рабов?

Ваши вопросы вызывают больше вопросов, например, в интервью, если у кого-то просто «есть ответ» на общий вопрос, который вы опубликовали, тогда он знает только один способделать что-то, и этот путь может быть или не быть лучшим.

3 голосов
/ 18 ноября 2010

Использование кэширующего прокси

Если вы предоставляете одинаковые страницы всем посетителям (например, новостному сайту), вы можете уменьшить нагрузку на порядок, кэшируя сгенерированный контент с помощью кэширующего прокси, такого как Лак или Apache Traffic Server .

Прокси-сервер будет находиться между вашим сервером и вашими посетителями.Если вы получите 10000 обращений к своей главной странице, его нужно будет сгенерировать только один раз, прокси-сервер отправит тот же ответ другим 9999 посетителям, не обращаясь к серверу приложений повторно.

3 голосов
/ 09 ноября 2010

Есть несколько подходов к первому вопросу:

  1. Существуют ли апгрейды оборудования, которые могут привести в порядок все, что нужно для обработки миллиона запросов за короткое время? Если это так, это, вероятно, начальная точка для расследования.

  2. Могут ли быть внесены изменения в программное обеспечение для оптимизации производительности сервера? Я знаю, что в IIS есть множество различных настроек, которые можно использовать для повышения производительности.

  3. Подумайте о том, чтобы войти в ситуацию с веб-фермой, а не использовать один сервер. У меня действительно была ситуация, когда я однажды работал, когда у нас было миллионы обращений в минуту, и это довольно сильно ломало наши веб-серверы и убирало множество сайтов. Наше решение состояло в том, чтобы изменить балансировщик нагрузки, чтобы несколько серверов обслуживали сайт, который мог бы перегружать серверы, чтобы другие серверы могли поддерживать другие сайты, как это было осенью, и в розничной торговле это ваш большой квартал. В то время как некоторые начнут здесь, я бы, вероятно, пришел последним, так как это может открыть немного червей по сравнению с двумя другими вариантами.

Что касается экземпляра базы данных, то на мой взгляд, это был бы аналогичный набор опций, хотя я мог бы сначала сделать вариант с несколькими серверами, так как избыточность может быть важным дополнительным преимуществом, поскольку я не уверен, что это так просто веб-сервер. Может быть, я далеко, но именно так я бы изначально занялся этим.

0 голосов
/ 19 ноября 2010

вероятно, прежде чем разработчик начнет разработку системы, они будут рассматривать спецификацию сервера может быть, вы можете уменьшить использование SEO и заблокировать его от поисковой системы, чтобы сканировать его (это задача, которая требует много ресурсов) постарайтесь все хорошо проиндексировать и не делать поиск легко

0 голосов
/ 19 ноября 2010
  1. Разверните его в облаке, убедитесь, что ваш веб-сервер и облако веб-приложений готовы и могут масштабироваться на разных узлах.Я рекомендую веб-сервер Cherokee (баланс загрузки между различными серверами очень прост, а тесты работают быстрее, чем Apache).Например, облачному приложению Google (appspot) необходимо, чтобы ваше веб-приложение было на Python или Java

  2. Используйте прокси-сервер кэширования, например.Nginx.

  3. Для базы данных используйте memcache для некоторых запросов, которые предполагается повторить.

  4. Если компания хочет, чтобы данные были частными, создайте частнуюОблако, Здесь, Ubuntu делает очень хорошую работу полностью бесплатно и с открытым исходным кодом: http://www.ubuntu.com/cloud/private

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...