Разработка веб-сервисов осень 2013 лекция 11

44
Разработка веб-сервисов Беседа 11: Устойчивость архитектурного решения

Transcript of Разработка веб-сервисов осень 2013 лекция 11

Page 1: Разработка веб-сервисов осень 2013 лекция 11

Разработкавеб-сервисов

Беседа 11: Устойчивость архитектурного решения

Page 2: Разработка веб-сервисов осень 2013 лекция 11

План занятия

Понятие высоких нагрузок

Проблемы сервисов и способы их решения

Подходы к масштабированию

Поиск и анализ узких мест

Примеры проблем и способов борьбы с ними

2

Page 3: Разработка веб-сервисов осень 2013 лекция 11

Высокие нагрузки

Что такое высокие нагрузки?

100 хитов в день?

10 000 хитов?

10 000 000 хитов?

3

Page 4: Разработка веб-сервисов осень 2013 лекция 11

Высокие нагрузки

Высокие нагрузки – предел пропускной способности того или иного ресурса

4

Page 5: Разработка веб-сервисов осень 2013 лекция 11

Высокие нагрузки

Ресурсы, подверженные проблемам

Сеть

Диск

Процессор

Память

5

Page 6: Разработка веб-сервисов осень 2013 лекция 11

Высокие нагрузки

Способы решения проблем

Аппаратные

Программные

6

Page 7: Разработка веб-сервисов осень 2013 лекция 11

Нехватка ресурсов

Проблемы с сетью

Основная проблема — слишком большой объем трафика

7

Page 8: Разработка веб-сервисов осень 2013 лекция 11

Нехватка ресурсов

Проблемы с сетью

Аппаратное решение:

увеличиваем пропускную способность

Сетевая карта

Более производительный маршрутизатор

Дополнительные каналы

8

Page 9: Разработка веб-сервисов осень 2013 лекция 11

Нехватка ресурсов

Проблемы с сетью

Программное решение:

уменьшаем трафик, увеличиваем скорость отдачи

gzip

вынос статики на отдельный домен

CDN

9

Page 10: Разработка веб-сервисов осень 2013 лекция 11

Нехватка ресурсов

Проблемы с сетью. CDN

CDN — Content Delivery Network

10

Page 11: Разработка веб-сервисов осень 2013 лекция 11

Нехватка ресурсов

Проблемы с диском

Основная проблема — ограничение пропускной способности на чтение или запись

11

Page 12: Разработка веб-сервисов осень 2013 лекция 11

Нехватка ресурсов

Проблемы с диском

Аппаратное решение:

Увеличение емкости

Увеличение мощности (SATA → SAS или SSD)

Объединение в дисковые массивы

RAM-диски

12

Page 13: Разработка веб-сервисов осень 2013 лекция 11

Нехватка ресурсов

Проблемы с диском

Программное решение:

Партиционирование данных

Вынос данных в память

13

Page 14: Разработка веб-сервисов осень 2013 лекция 11

Нехватка ресурсов

Дисковые массивы

RAID0 (stripe) — ненадежно, но быстро на чтение и запись

RAID1 (mirror) — надежно, но быстро читаем и медленно пишем

14

Page 15: Разработка веб-сервисов осень 2013 лекция 11

Нехватка ресурсов

Проблемы с процессором

Основная проблема — слишком большое число вычислительных операций

15

Page 16: Разработка веб-сервисов осень 2013 лекция 11

Нехватка ресурсов

Проблемы с процессором

Аппаратное решение:

Увеличение частоты

Добавление ядер

16

Page 17: Разработка веб-сервисов осень 2013 лекция 11

Нехватка ресурсов

Проблемы с процессором

Программное решение:

Оптимизация кода

Распараллеливание задач по ядрам

17

Page 18: Разработка веб-сервисов осень 2013 лекция 11

Нехватка ресурсов

Проблемы с памятью

Основная проблема — нехватка памяти, медленный отклик, энергозависимость

18

Page 19: Разработка веб-сервисов осень 2013 лекция 11

Нехватка ресурсов

Проблемы с памятью

Аппаратное решение:

Добавление памяти

Ускорение памяти

19

Page 20: Разработка веб-сервисов осень 2013 лекция 11

Нехватка ресурсов

Проблемы с процессором

Программное решение:

Оптимизация кода

Улучшение структур

Ссылки вместо копирования

Поиск утечек

20

Page 21: Разработка веб-сервисов осень 2013 лекция 11

Масштабирование ресурсов

Масштабирование

Вертикальное — увеличение мощности ресурса, оптимизация кода и работы с данными

Горизонтальное — увеличение количества узлов системы

21

Page 22: Разработка веб-сервисов осень 2013 лекция 11

Масштабирование ресурсов

Техники масштабирования

Партиционирование

разделение данных на логические части

Реплицирование

копирование данных

Шардирование

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

Кэширование

сохранение объекта в неизменном состоянии между запросами

22

Page 23: Разработка веб-сервисов осень 2013 лекция 11

Масштабирование ресурсов

Преимущества партиционирования

Разделение на дисковые ресурсы

Разделение на оперативную и архивную части

23

Page 24: Разработка веб-сервисов осень 2013 лекция 11

Масштабирование ресурсов

Принципы шардирования

Индекс указателей на данные

Программное распределение

24

Page 25: Разработка веб-сервисов осень 2013 лекция 11

Масштабирование ресурсов

Алгоритмы распределения данных между узлами

Round Robin

Хэширование

Консистентное хэширование

Весовое распределение

25

Page 26: Разработка веб-сервисов осень 2013 лекция 11

Кэширование ресурсов

Типы кэширования

По времени

По количеству хитов

26

Page 27: Разработка веб-сервисов осень 2013 лекция 11

Кэширование ресурсов

Типы кэширования по времени

Никогда

Всегда

Определенный период (TTL)

27

Page 28: Разработка веб-сервисов осень 2013 лекция 11

Кэширование ресурсов

Типы кэширования по хитам

1-click

N-click

28

Page 29: Разработка веб-сервисов осень 2013 лекция 11

Кэширование ресурсов

Техники кэширования

Данные vs html

Генерация данных: статики, баз данных

Отказ от онлайна и псевдослучайные счетчики

29

Page 30: Разработка веб-сервисов осень 2013 лекция 11

Кэширование ресурсов

Инструменты кэширования

Память

память как она есть

cпециальные движки РСУБД

NoSql

nginx

Файловая система

30

Page 31: Разработка веб-сервисов осень 2013 лекция 11

Кэширование ресурсов

Проблемы кэширования

Холодный старт

Перестроение кэша

Инвалидация кэша

31

Page 32: Разработка веб-сервисов осень 2013 лекция 11

Поиск узких мест

Поиск и анализ узких мест

Мониторинг

Нагрузочное тестирование

Анализ архитектуры и кода

32

Page 33: Разработка веб-сервисов осень 2013 лекция 11

Поиск узких мест

Примеры анализа архитектуры

Треды СУБД в ДМР

Конфиги магазинов в ДМР

Картинки и реестры на диске

Категории вопросов на Ответах

Отправка писем на Рассылках

33

Page 34: Разработка веб-сервисов осень 2013 лекция 11

Поиск узких мест

Нюансы оптимизации

Привычные решения могут не работать

Появляются костыли, сложный для понимания код

34

Page 35: Разработка веб-сервисов осень 2013 лекция 11

Примеры решений

Оптимизация отдачи баланса

Проблема:

нужно отдавать тысячи запросов баланса в секунду

35

Page 36: Разработка веб-сервисов осень 2013 лекция 11

Примеры решений

Треды в ДМР

Проблема:

чрезмерное шардирование и безопасность привели к большому количеству соединений с СУБД

36

Page 37: Разработка веб-сервисов осень 2013 лекция 11

Примеры решений

Конфиги магазинов в ДМР

Проблема:

рост числа данных в конфигах при неоптимальном хранении структур в Perl

37

Page 38: Разработка веб-сервисов осень 2013 лекция 11

Примеры решений

Картинки и реестры в файловой системе

Проблема:

большое число файлов в папке приводит к тормозам файловой системы

38

Page 39: Разработка веб-сервисов осень 2013 лекция 11

Примеры решений

Отдача главной страницы на Ответах

Проблема:

большое количество хитов и множество объектов

39

Page 40: Разработка веб-сервисов осень 2013 лекция 11

Примеры решений

Отдача главной страницы на Ответах

40

Page 41: Разработка веб-сервисов осень 2013 лекция 11

Примеры решений

Отправка большого числа писем

Проблема:

большие потребности в дисках

41

Page 42: Разработка веб-сервисов осень 2013 лекция 11

Примеры решений

Сбор статистики

Проблема:

обсчет большого числа параметрических данных на сотнях узлов

42

Page 43: Разработка веб-сервисов осень 2013 лекция 11

Резюме

Высокие нагрузки — это нехватка ресурсов

Способов борьбы два: ставим железо, включаем голову

Техники масштабирования разные, выбираем в зависимости от потребностей

43

Page 44: Разработка веб-сервисов осень 2013 лекция 11

Вопросы?

Максим Бабич

[email protected]

+7 916 9415275