Слайд 1Разработка высоконагруженных проектов
Олег Бунин
Слайд 2Что такое “большой” проект?
Сотни тысяч, миллионы, десятки миллионов хитов;
Бесперебойная работа;
Сложная структура:
серверный парк, большое количество кода;
Большое количество данных.
Слайд 3В чем измерять нагрузку?
Посетители;
Хосты;
Хиты.
Технический отдел меряет посещаемость в хитах! Имея прогноз
посещаемости можно сделать выводы о использовании процессора, памяти и жестких дисков.
Слайд 4Зависимость серверного парка от типа проекта
Это сравнительная таблица, количество серверов указано
относительное именно для сравнения , а не как абсолютные цифры.
Слайд 5Что такое рост нагрузки с технической точки зрения?
Слайд 6Типы роста нагрузки
Рост ресурсов, требуемых на обработку потока запросов;
Рост ресурсов, требуемых
для хранения пользовательских данных;
Рост ресурсов, требуемых для передачи данных между пользователями и сервером.
Слайд 7Типичные узкие места проектов
Слайд 8Требуемые ресурсы при росте посещаемости
Слайд 9Масштабиро-вание
Горизонтальное масштабирование (scaling out)
Вертикальное масштабирование (scaling up)
Функциональное разделение (partitioning)
Шардинг (sharding)
Общее решение
Слайд 10Горизонтальное масштабирование
Увеличение производительности системы за счет
подключения дополнительных cерверов.
Отлично работает для вычисляющих серверов, а как быть с базой данных?
Что делать со связанными общими для нескольких серверов данными?
Слайд 11Вертикальное масштабирование
Увеличение производительности системы за счет увеличения мощности сервера.
В какой-то момент
мы все равно достигнем предела по процессору, памяти или жесткому диску.
Слайд 12Функциональное разбиение
Разные функциональные части работают и хранятся на разных серверах системы.
В
какой то момент мы все равно упремся в физические возможности сервера.
Слайд 13Шардинг
Разбиение данных на кусочки, которые
раскладываются по серверам-шардам.
Как правильно разбить данные для шардинга? Как правильно идентифицировать данные?
У них просто нет выбора:
Слайд 14Разбиение данных для шардинга
Статическое: по первой букве логина, хэширование идентификаторов или
логинов. Единого центра нет, соответственно нет узкого места, зато есть сложности с разрешением заранее непредусмотренных ситуаций.
Динамическое: есть координирующий центр, который отвечает на вопрос “где лежит”? Он же является узким местом, зато добавление новых серверов происходит без изменения кода.
Слайд 15Как облегчить масштабирование?
Низкая степень связности
данных и кода;
Разделение кода на слои (как минимум слой связи с базой данных и слой кэширования);
Рефакторинг, высокое качество кода, минимизация workaround’ов;
Контроль над системой, мониторинг;
Минимизация академических решений (построение таблиц “на лету”, ORM).
Слайд 16Масштабируемая
архитектура
Слабосвязанная
Слоистая
Горизонтальное масштабирование
Асинхронные вычисления
Серебряная пуля
Слайд 17Отдельно о базах данных
База данных – типичное узкое место. Для базы
данных актуальны все вышеперечисленные методы увеличения производительности: горизонтальное и вертикальное масштабирование, функциональное разбиение, шардинг.
Горизонтальное масштабирование в случае с БД достигается с помощью репликации.
Слайд 18Репликация
Синхронизация нескольких копий
объекта.
Наиболее эффективна при небольшом количестве слейвов, иначе усложняется схема распространения изменений, которое, в дальнейшем, становится узким местом.
Усложнение программной архитектуры – например, чтение данных с слейва, до которого не докатились изменения.
Слайд 19Типичная архитектура: обычный сайт
Слайд 20Структура типичного веб-проекта
Фронтенд – легкий быстрый сервер, отвечающий за отдачу статических
картинок;
Бекенд – тяжелый программный сервер, производящий вычисления и строящий веб-страницы;
База данных, хранилище данных.
Слайд 23Развитие проекта
Рефакторинг, изменение архитектуры
Рост посещаемости через оптимизацию
Невозможность дальнейшего роста посещаемости, технологическое
ограничение
Слайд 24Быстрый рост нагрузки – что делать?
Слайд 25Быстрая помощь
Программные решения наиболее эффективны, но требуют много времени;
Требуемый уровень специалистов
иногда запредельно высок;
Хостинг;
Более мощное аппаратное обеспечение;
Покупка Oracle ;-)
Редуцирование функциональности;
Уменьшение качества;
Оптимизация нагрузки;
Слайд 26Прогнозирование нагрузки
Нагрузочное тестирование. Организация нагрузочного тестирования. Почему стоит заказывать нагрузочное тестирование
на стороне?
Формулы экстраполяции результатов тестирования на реальную работу. Пиковый характер http-трафика. “Тестирование сферического коня в вакууме”.
Опытные оценки, примеры.
Слайд 27oleg.bunin@ontico.ru
LiveJournal: oleg_bunin