Масштабируемость и производительность веб-приложений, подходы? - PullRequest
5 голосов
/ 11 января 2009

Какие различные методы и технологии вы использовали для успешного решения проблем масштабируемости и производительности веб-сайта? Я веб-разработчик ASP.NET, изучая удаленное взаимодействие .NET с WCF с кластеризацией SQL, и мне интересно, какие существуют другие подходы (например, «облако»). В каких случаях вы будете применять различные подходы (например, метод a для примерно x многих «активных» пользователей).

Пример того, что я имею в виду, тематическое исследование MySpace: http://highscalability.com/myspace-architecture

Ответы [ 3 ]

15 голосов
/ 12 января 2009

Это очень широкий вопрос, затрудняющий ответ, но я постараюсь дать несколько общих предложений.

1 - Если вы не делаете что-то серьезно, тогда вам, вероятно, не придется беспокоиться о производительности или масштабировании, пока вы не достигнете значительного объема трафика (более 1 миллиона просмотров страниц в месяц).

2 - ваши самые большие проблемы с производительностью на начальном этапе, вероятно, связаны с загрузкой страниц из других стран. Попробуйте Gomez Instance Site Test , чтобы увидеть время загрузки страницы со всего мира, и используйте YSlow в качестве руководства по оптимизации.

3 - Когда вы начнете сталкиваться с проблемами производительности, это, скорее всего, будет связано с работой базы данных. Используйте SQL Server Profiler для проверки вашего трафика SQL в поисках долго выполняющихся запросов, чтобы попытаться оптимизировать, а также используйте dm_db_missing_index_details для поиска индексов, которые вы должны добавить.

4 - Если ваши веб-серверы начинают становиться узким местом в производительности, используйте профилировщик (например, ANTS Profiler), чтобы искать способы оптимизации кода ваших веб-страниц.

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

6 - Если ваша база данных хорошо оптимизирована и все еще работает слишком горячо, тогда посмотрите на добавление распределенной системы кэширования. Этого, вероятно, не произойдет, пока вы не просмотрите более 10 миллионов страниц в месяц.

7 - Если ваша база данных начинает перегружаться даже из-за распределенного кэширования, тогда взгляните на архитектуру сегментирования. Этого, вероятно, не произойдет, пока вы не просмотрите более 100 миллионов страниц в месяц.

8 голосов
/ 12 января 2009

Я работал на нескольких сайтах, которые получают миллионы / хитов / месяц. Вот некоторые основы:

  1. Кеш, кеш, кеш. Кэширование - это один из самых простых и эффективных способов снизить нагрузку на ваш веб-сервер и базу данных. Кэшируйте содержимое страницы, запросы, дорогостоящие вычисления, все, что связано с вводом / выводом. Memcache очень прост и эффективен.
  2. Используйте несколько серверов, когда вы исчерпаны. Вы можете иметь несколько веб-серверов и несколько серверов баз данных (с репликацией).
  3. Уменьшите общее количество запросов к вашим веб-серверам. Это влечет за собой кэширование JS, CSS и изображений с использованием заголовков expires. Вы также можете переместить статический контент в CDN, что ускорит работу вашего пользователя.
  4. Измерение и тест. Запустите Nagios на своих производственных машинах и загрузите тестирование на своем сервере dev / qa. Вам нужно знать, когда ваш сервер загорится, чтобы вы могли предотвратить это.

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

Ознакомьтесь также с моим блогом о масштабируемости, там много ссылок на презентации о масштабировании с использованием нескольких языков и платформ: http://www.ryandoherty.net/2008/07/13/unicorns-and-scalability/

1 голос
/ 11 января 2009

Существует скорость от MS, а также MEMCache имеет порт для .NET и также indeXus.Net

...