Масштабируемость Интернет-ресурсов Игорь Лобанов Центр Финансовых Технологий
Некоторые определения Атрибут качества – описание реакции системы на некоторый вид стумулов производительность масштабируемость безопасность Архитектура – сумма ограничений реализации, призванная обеспечить выполнение атрибутов качества Архитектор – ответственный за установку и соблюдение ограничений
Slashdot-эффект Сотни новых посетителей в минуту в течение 20 часов Мгновенный рост нагрузки на два порядка Уникальная возможность и большая опасность
Атрибуты качества Масштабируемость рост числа клиентов – нет деградации качества Производительность любой запрос клиента – время отклика Отказоустойчивость выход из строя узла – сохранение доступности
Звенья информационной системы
Профилирование
Кривые масштабирования 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