Вы находитесь на странице: 1из 36

Высокопроизводительные web-

системы. Лучшие мировые


примеры
Почему так важна
производительность web-
сайта?

Наш сайт У нас зарегистрировался


поддерживает 1000 50-миллионный
запросов в секунду! пользователь!!!

Наш сайт обслуживает


миллион пользователей
одновременно!

У нас база данных


превышает 100 терабайт!

3-2
Почему так важна
производительность web-
сайта?
Это никому не интересно!

Пользователя интересует прежде всего


скорость обработки его запроса.

Если сайт будет обрабатывать отдельный


запрос долго, то пользователь уйдет с сайта.

3-3
Причины
неудовлетворительной
производительности
Ошибки требований и анализа:
 Отсутствие требований по
производительности
 Неверные требования по производительности
 Неверная интерпретация требований
Ошибки проектирования и разработки
 Реактивный подход
 Выбор неправильного дизайна системы
 Отсутствие тестирования производительности
3-4
Причины
неудовлетворительной
производительности
На долю ошибок на этапах анализа
требований, проектирования и дизайна
приходится до 40 % проблем с
производительностью.

Но!

Стоимость исправления таких ошибок –


до 100% стоимости проекта (все
переписать)!
3-5
Примеры построения
высокоскоростных web-
сайтов
Рассмотрим архитектуру следующих
сайтов:
 myspace.com
 facebook.com
 amazon.com
 reddit.com
 stackoverflow.com
 mollom.com

3-6
Высокопроизводительные
web-системы

MySpace.com

 Больше 65 миллионов подписчиков


 260 000 новых пользователей каждый день
 Больше 300 миллионов пользователей
 Скорость обслуживание одного пользователя
– менее 1 секунды

3-7
Высокопроизводительные
web-системы

MySpace.com

Архитектура:
 ASP.NET 2.0, WCF, WWF 3.5
 Windows
 IIS 6.0
 SQL Server

3-8
Высокопроизводительные
web-системы

MySpace.com

Архитектура:
 4,500+ web servers windows 2003/ IIS 6.0/
 1,200+ cache servers running 64-bit Windows
2003. 16GB of objects cached in RAM
 500+ database servers running 64-bit Windows
and SQL Server 2005
3-9
Высокопроизводительные
web-системы

MySpace.com

Архитектура:
 Вертикальное разделение базы данных
 Базы данных разделены по цели – отдельные
базы данных для профилей, для e-mail
 Горизонтальное разделение – 1 млн записей на
одну базу
3-10
Высокопроизводительные
web-системы

Facebook

 Использует скомпилированный PHP


 Оптимизированный Linux
 MySQL, при этом joins и логика – на web
сервере, для Social Inbox используется HBase
 Memcached – решение для распределенного
кэша в памяти (несколько тысяч серверов)
 HipHop – конвертирует PHP в C++

3-11
Высокопроизводительные
web-системы

Reddit

 Automatically restart failed and cancerous


services
 Separation Of Services
 Open Schema
 Keep It Stateless
 Memcache everything
 The key to speed is to precompute everything
and cache it
 Work Offline
3-12
Высокопроизводительные
web-системы

Reddit

3-13
Высокопроизводительные
web-системы

Amazon.com

Платформа
 Linux
 Oracle
 C++
 Perl
 Java
 Jboss
 Servlets
3-14
Высокопроизводительные
web-системы

Amazon.com

 Shared distributed databases


 The databases were split into small parts and
around each part and created a services
interface that was the only way to access the
data
 SOA
 C++ is uses to process requests. Perl/Mason is
used to build content
 No middleware
3-15
Высокопроизводительные
web-системы

Stackoverflow.com

 Первоначально Windows, сейчас – Linux для


support функций
 В качестве кэша используется Redis.
 База данных SQL Server 2008
 Основная платформа – ASP.NET 4.0, ASP.NET
MVC 3

3-16
Высокопроизводительные
web-системы

Mollom.com

 База данных – Cassandra для больших


объемов данных, MySQL – для небольших
 Glassfish – в качестве application server для
платформы Java EE
 Java

3-17
Высокопроизводительные
web-системы

Что же интересного можно выявить во


всех «быстрых» сайтах?

 No scripts – все компилируемое


 Использование кэш-памяти
 Распределенные хранилища данных

3-18
Высокопроизводительные
web-системы

Совершенно логичным образом подходим


к паттернам построения
высокопроизводительных систем

 Fast Path
 First Things First
 Locality Principle

3-19
Высокопроизводительные
web-системы

Fast Path
Проблема:
Доминирующие нагрузочные функции
могут иметь значительное влияние на
общую производительность системы

Пример: Сложный отчет


2-20
Высокопроизводительные
web-системы
Fast Path
Решение:
Создание альтернативных путей
выполнения для доминантных
нагрузочных функций.

2-21
Высокопроизводительные
web-системы

First Things First


Проблема:
Не все функции в системе равнозначны
по важности

2-22
Высокопроизводительные
web-системы

First Things First


Решение:
Назначить приоритеты задачам и
обрабатывать их таким образом,
чтобы наиболее важные получили
предпочтение

2-23
Высокопроизводительные
web-системы

Locality principle

Создавайте действия, функции и


результаты как можно ближе к
физическим ресурсам компьютера.

2-24
Высокопроизводительные
web-системы

Locality principle
Масштабирование
 Вертикальное масштабирование(scale
up)
 Горизонтальное масштабирование
(scale out)

2-25
Высокопроизводительные
web-системы

Существует несколько правил построения


«быстрозагружаемых» сайтов.

3-26
Высокопроизводительные
web-системы

Правило 1. Make fewer HTTP requests

 Необходимо уменьшить число компонентов


страницы – упростить дизайн.
 Соединить несколько файлов в один (CSS, JS)
 Используйте один рисунок на background
 Используйте image map

3-27
Высокопроизводительные
web-системы

Правило 2. Use a Content Delivery Network

 Располагать сервера как можно ближе к


пользователю.
 При этом первым делом необходимо
перенести статический контент

3-28
Высокопроизводительные
web-системы

Правило 3. Add a far future Expires header to


your components

 Добавление заголовка Expires, имеющего


значение дату в будущем делает страницу или
компонент кэшируемым. Обычно делают это с
графическими элементами, CSS, скриптами.

3-29
Высокопроизводительные
web-системы

Правило 4. Gzip your scripts and stylesheets

 Сжимайте HTML, CSS, JS

3-30
Высокопроизводительные
web-системы

Правило 5. Put Stylesheets at the Top

 Прописывайте css в заголовке страницы в


тэге LINK.

3-31
Высокопроизводительные
web-системы

Правило 6. Put Scripts at the Bottom

 Скрипты должны быть прописаны в конце


страницы

3-32
Высокопроизводительные
web-системы

Правило 7. Avoid CSS Expressions

 Динамические свойства CSS

3-33
Высокопроизводительные
web-системы

Правило 8. Make JavaScript and CSS External

Правило 9. Reduce DNS lookups by using Keep-


Alive and fewer domains

Правило 10. Minify your JavaScript source code

Правило 11. Avoid Redirects

3-34
Высокопроизводительные
web-системы

Правило 12. Remove Duplicate Scripts

Правило 13. Make AJAX Cacheable

3-35
Высокопроизводительные
web-системы

Буду рад ответить на вопросы

3-36