Разработка веб-сервисов осень 2013 лекция 11
TRANSCRIPT
Разработкавеб-сервисов
Беседа 11: Устойчивость архитектурного решения
План занятия
Понятие высоких нагрузок
Проблемы сервисов и способы их решения
Подходы к масштабированию
Поиск и анализ узких мест
Примеры проблем и способов борьбы с ними
2
Высокие нагрузки
Что такое высокие нагрузки?
100 хитов в день?
10 000 хитов?
10 000 000 хитов?
3
Высокие нагрузки
Высокие нагрузки – предел пропускной способности того или иного ресурса
4
Высокие нагрузки
Ресурсы, подверженные проблемам
Сеть
Диск
Процессор
Память
5
Высокие нагрузки
Способы решения проблем
Аппаратные
Программные
6
Нехватка ресурсов
Проблемы с сетью
Основная проблема — слишком большой объем трафика
7
Нехватка ресурсов
Проблемы с сетью
Аппаратное решение:
увеличиваем пропускную способность
Сетевая карта
Более производительный маршрутизатор
Дополнительные каналы
8
Нехватка ресурсов
Проблемы с сетью
Программное решение:
уменьшаем трафик, увеличиваем скорость отдачи
gzip
вынос статики на отдельный домен
CDN
9
Нехватка ресурсов
Проблемы с сетью. CDN
CDN — Content Delivery Network
10
Нехватка ресурсов
Проблемы с диском
Основная проблема — ограничение пропускной способности на чтение или запись
11
Нехватка ресурсов
Проблемы с диском
Аппаратное решение:
Увеличение емкости
Увеличение мощности (SATA → SAS или SSD)
Объединение в дисковые массивы
RAM-диски
12
Нехватка ресурсов
Проблемы с диском
Программное решение:
Партиционирование данных
Вынос данных в память
13
Нехватка ресурсов
Дисковые массивы
RAID0 (stripe) — ненадежно, но быстро на чтение и запись
RAID1 (mirror) — надежно, но быстро читаем и медленно пишем
14
Нехватка ресурсов
Проблемы с процессором
Основная проблема — слишком большое число вычислительных операций
15
Нехватка ресурсов
Проблемы с процессором
Аппаратное решение:
Увеличение частоты
Добавление ядер
16
Нехватка ресурсов
Проблемы с процессором
Программное решение:
Оптимизация кода
Распараллеливание задач по ядрам
17
Нехватка ресурсов
Проблемы с памятью
Основная проблема — нехватка памяти, медленный отклик, энергозависимость
18
Нехватка ресурсов
Проблемы с памятью
Аппаратное решение:
Добавление памяти
Ускорение памяти
19
Нехватка ресурсов
Проблемы с процессором
Программное решение:
Оптимизация кода
Улучшение структур
Ссылки вместо копирования
Поиск утечек
20
Масштабирование ресурсов
Масштабирование
Вертикальное — увеличение мощности ресурса, оптимизация кода и работы с данными
Горизонтальное — увеличение количества узлов системы
21
Масштабирование ресурсов
Техники масштабирования
Партиционирование
разделение данных на логические части
Реплицирование
копирование данных
Шардирование
распределение данных по нескольким узлам
Кэширование
сохранение объекта в неизменном состоянии между запросами
22
Масштабирование ресурсов
Преимущества партиционирования
Разделение на дисковые ресурсы
Разделение на оперативную и архивную части
23
Масштабирование ресурсов
Принципы шардирования
Индекс указателей на данные
Программное распределение
24
Масштабирование ресурсов
Алгоритмы распределения данных между узлами
Round Robin
Хэширование
Консистентное хэширование
Весовое распределение
25
Кэширование ресурсов
Типы кэширования
По времени
По количеству хитов
26
Кэширование ресурсов
Типы кэширования по времени
Никогда
Всегда
Определенный период (TTL)
27
Кэширование ресурсов
Типы кэширования по хитам
1-click
N-click
28
Кэширование ресурсов
Техники кэширования
Данные vs html
Генерация данных: статики, баз данных
Отказ от онлайна и псевдослучайные счетчики
29
Кэширование ресурсов
Инструменты кэширования
Память
память как она есть
cпециальные движки РСУБД
NoSql
nginx
Файловая система
30
Кэширование ресурсов
Проблемы кэширования
Холодный старт
Перестроение кэша
Инвалидация кэша
31
Поиск узких мест
Поиск и анализ узких мест
Мониторинг
Нагрузочное тестирование
Анализ архитектуры и кода
32
Поиск узких мест
Примеры анализа архитектуры
Треды СУБД в ДМР
Конфиги магазинов в ДМР
Картинки и реестры на диске
Категории вопросов на Ответах
Отправка писем на Рассылках
33
Поиск узких мест
Нюансы оптимизации
Привычные решения могут не работать
Появляются костыли, сложный для понимания код
34
Примеры решений
Оптимизация отдачи баланса
Проблема:
нужно отдавать тысячи запросов баланса в секунду
35
Примеры решений
Треды в ДМР
Проблема:
чрезмерное шардирование и безопасность привели к большому количеству соединений с СУБД
36
Примеры решений
Конфиги магазинов в ДМР
Проблема:
рост числа данных в конфигах при неоптимальном хранении структур в Perl
37
Примеры решений
Картинки и реестры в файловой системе
Проблема:
большое число файлов в папке приводит к тормозам файловой системы
38
Примеры решений
Отдача главной страницы на Ответах
Проблема:
большое количество хитов и множество объектов
39
Примеры решений
Отдача главной страницы на Ответах
40
Примеры решений
Отправка большого числа писем
Проблема:
большие потребности в дисках
41
Примеры решений
Сбор статистики
Проблема:
обсчет большого числа параметрических данных на сотнях узлов
42
Резюме
Высокие нагрузки — это нехватка ресурсов
Способов борьбы два: ставим железо, включаем голову
Техники масштабирования разные, выбираем в зависимости от потребностей
43