Масштабируемость Интернет-ресурсов Игорь Лобанов Центр Финансовых Технологий Некоторые определения • Атрибут качества – описание реакции системы на некоторый вид стумулов ▫ производительность ▫ масштабируемость ▫ безопасность • Архитектура – сумма ограничений реализации, призванная обеспечить выполнение атрибутов качества • Архитектор – ответственный за установку и соблюдение ограничений Slashdot-эффект • Сотни новых посетителей в минуту в течение 20 часов • Мгновенный рост нагрузки на два порядка • Уникальная возможность и большая опасность Атрибуты качества • Масштабируемость ▫ рост числа клиентов – нет деградации качества • Производительность ▫ любой запрос клиента – время отклика • Отказоустойчивость ▫ выход из строя узла – сохранение доступности Звенья информационной системы Информационная система Ввод-вывод Apache, lighhtp Сеть Прикладная логика PHP, Perl, Ruby, Java CPU Доступ к данным mysql, oracle Дисковый ввод-вывод Профилирование Кривые масштабирования CPU/число клиентов IOWait/число клиентов Риски нагрузочного тестирования • Неадекватный профиль нагрузки ▫ берём исторические данные • Искажение результатов эксперимента ▫ контролируем способ измерения • Неадекватный инструмент ▫ контролируем реальный профиль нагрузки Повышение масштабируемости • Оптимизация ▫ в идеале – избавление от работы вообще • Вертикальное масштабирование ▫ более производительное оборудование • Горизонтальное масштабирование ▫ кластеризация – распределение нагрузки Content Delivery Network Оптимизация прикладной логики • Алгоритмические оптимизации • Прикладное кэширование ▫ что? страницы фрагменты страниц результаты запросов к базе данных ▫ hit ratio ▫ инвалидация • Асинхронная обработка запросов Оптимизация доступа к данным • • • • Постоянные соединения Индексирование Денормализация схемы данных Преагрегация данных Денормализация схемы данных Преагрегация данных Оптимизация СУБД • Тюнинг ▫ обмениваем скорость на потребление памяти • Блочный кэш ▫ уменьшение физических дисковых чтений • Кэш запросов ▫ результаты часто повторяющихся запросов Вертикальное масштабирование За Против • Код и архитектура не требуют доработки • Оборудование со временем становится быстрее и дешевле • Цена на старшие модели растёт быстрее, чем их относительная производительность ▫ бюджет кончится раньше! Масштабирование кластера Распределение нагрузки Общее состояние: каждый за себя • Локальные сессионные данные в узле • Локальный кэш в узле • Инвалидация кэша? Общее состояние: на клиенте • Все сессионные данные присутствуют в каждом запросе • Кэш? • Требования безопасности? Общее состояние: в базе данных • Вся сессионная информация в базе данных, узлы в кластере прикладной логики «обезличены» • Дополнительная нагрузка на базу данных • Кэш? Общее состояние: кластерный кэш • «Общая память» подходит и для сессионных данных, и для кэша • Нет проблем с инвалидацией кэша • Требуется переработка системы Репликация данных • Синхронная ▫ изменения во всех узлах кластера БД • Асинхронная ▫ мастер-ведомый ▫ мультимастер Шардинг данных Fresh meat • Cloud computing ▫ Amazon Elastic Compute Cloud (EC2) • Infrastructure as a Service (IaaS) ▫ ▫ ▫ ▫ ▫ Amazon Simple Storage Service (S3) Amazon SimpleDB Google AppEngine Google BigTable EngineYard