Решение проблем с перегрузкой веб-сервера

Я новичок в области веб-разработки и в настоящее время провожу собеседования с компаниями, и самые любимые вопросы среди тех, что задают люди, это:

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

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

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

Спасибо


person daydreamer    schedule 08.11.2010    source источник


Ответы (6)


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

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

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

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

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

  • Вертикальное масштабирование (большее и быстрое серверное оборудование)
  • Репликация (активная или пассивная)
  • Кластеризация (если ее поддерживает СУБД)
  • Разделение
person dietbuddha    schedule 17.11.2010

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

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

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

person Scott Marlowe    schedule 16.11.2010

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

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

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

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

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

person JB King    schedule 09.11.2010

Используйте кеширующий прокси

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

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

person Martin    schedule 18.11.2010

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

person 1myb    schedule 19.11.2010

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

  2. Используйте кеширующий прокси, например. Nginx.

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

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

person Phyo Arkar Lwin    schedule 19.11.2010