78
Проектирование высоконагруженных систем Лекция №1 Быков Александр

HighLoad весна 2014 лекция 1

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: HighLoad весна 2014 лекция 1

Проектирование высоконагруженны

х систем

Лекция №1

Быков Александр

Page 2: HighLoad весна 2014 лекция 1

2

HighLoad. Лекция №1

Быков Александр Сергеевич Сотрудник Mail.Ru c 2004 года Технический руководитель рекламной системы Начинал с позиции веб-разработчика в Почте Выпускник МГТУ им. Н.Э.Баумана 2006 года

О преподавателе

Page 3: HighLoad весна 2014 лекция 1

3

HighLoad. Лекция №1

Система — множество элементов, находящихся в отношениях и связях друг с другом, которое образует определённую целостность, единство. (М.: БРЭ. — 2003, с. 1437)

В нашем случае – множество серверов и программ на них работающих, представляющих в сумме веб-сервис для конечного пользователя.

Определения

Page 4: HighLoad весна 2014 лекция 1

4

HighLoad. Лекция №1

Нагрузка — совершаемая полезная работа

Максимальная нагрузка – верхний предел совершаемой полезной работы в данной конфигурации системы

Высоконагруженная система – система выполняющая объем работы значительно превышающий общепринятый

Определения

Page 5: HighLoad весна 2014 лекция 1

5

HighLoad. Лекция №1

Ярко выраженный эффект масштаба Популярность изменяется очень быстро Могут использоваться миллионами людей Необходимо учитывать нагрузку при

проектировании Умение держать нагрузку – вопрос выживания

Предметная область: веб-сервисы

Page 6: HighLoad весна 2014 лекция 1

6

HighLoad. Лекция №1

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

? Как планировать закупки оборудования ? Как предсказать изменения нагрузки ? Это вообще возможно ?

Задача: миллиард пользователей

Page 7: HighLoad весна 2014 лекция 1

7

HighLoad. Лекция №1

Получение теоретических знаний в области проектирования и эксплуатации высоконагруженных систем

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

Получение практических навыков анализа архитектуры интернет-проектов и технологий

Цели курса

Page 8: HighLoad весна 2014 лекция 1

8

HighLoad. Лекция №1

Предшествующие: 1 семестр: Web-технологии 2 семестр: Базы данных

Параллельные: QA и Безопасность

Последующие: 4 семестр: Разработка веб-сервисов 4 семестр: Системный анализ для архитекторов

Место курса в программе обучения

Page 9: HighLoad весна 2014 лекция 1

9

HighLoad. Лекция №1

Отличное знание протокола HTTP Навыки разработки многопоточных приложений Навыки проектирования баз данных Базовые навыки работы в ОС семейства UNIX Базовые знания об устройстве сетей

Входные требования

Page 10: HighLoad весна 2014 лекция 1

10

HighLoad. Лекция №1

Навык разработки распределенного ПО Навык разработки ПО с учетом нагрузки Навык разработки ПО пригодного для

эксплуатации Навык проектирования распределенных систем

Выходные требования

Page 11: HighLoad весна 2014 лекция 1

11

HighLoad. Лекция №1

1. Планирование мощностей

2. Сетевая подсистема

3. Оперативная память

4. Дисковая подсистема

5. Фронтенд-оптимизация

6. Масштабирование нагрузки

7. Планирование архитектуры

Программа курса: лекции

Page 12: HighLoad весна 2014 лекция 1

12

HighLoad. Лекция №1

1. Разработка быстрого веб-сервера (5 апреля)

2. Нагрузочное тестирование веб-сервера (19 апреля)

3. Измерение размера кэша процессора (17 мая)

4. Анализ архитектуры интернет-проекта (24 мая)

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

Программа курса: домашние задания

Page 13: HighLoad весна 2014 лекция 1

13

HighLoad. Лекция №1

1. Разработка быстрого веб-сервера (20 баллов)

2. Нагрузочное тестирование веб-сервера (10 баллов)

3. Измерение размера кэша процессора (10 баллов)

4. Анализ архитектуры интернет-проекта (10 баллов)

5. Экзамен (60 баллов)

Оценка на экзамене: удовл. – 20 баллов, хор. – 40 баллов

Пороговый рейтинг 60 баллов

Контроль знаний

Page 14: HighLoad весна 2014 лекция 1

14

HighLoad. Лекция №1

Познакомились друг с другом Разобрались зачем нужен этот курс Убедились в важности этого курса Узнали что нас ждет на занятиях

Конец вводной части

Page 15: HighLoad весна 2014 лекция 1

15

HighLoad. Лекция №1

Анализ предметной области Управление вычислительными мощностями Архитектура многопоточного сетевого ПО

Содержание лекции

Page 16: HighLoad весна 2014 лекция 1

16

HighLoad. Лекция №1

Особенности интернет проектов Аудитория интернета Продуктовые метрики

Анализ предметной области

Page 17: HighLoad весна 2014 лекция 1

17

HighLoad. Лекция №1

Особенности интернет-проектов

Page 18: HighLoad весна 2014 лекция 1

18

HighLoad. Лекция №1

Доступность сервиса из любой точки мира Низкая стоимость доставки сервиса

потребителю Низкая стоимость разработки и эксплуатации Практически «нулевой» порог входа

Легкость входа на рынок

Page 19: HighLoad весна 2014 лекция 1

19

HighLoad. Лекция №1

Высокая конкурентность рынка Низкая привязанность пользователей к сервису Популярность сервиса может расти очень

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

Динамичность рынка

Page 20: HighLoad весна 2014 лекция 1

20

HighLoad. Лекция №1

Низкая/нулевая доходность на одного пользователя

Сначала аудитория потом монетизация ИТ-инфраструктура основная статья расходов В некоторых случаях начальные затраты велики Не все проекты выходят на окупаемость

Особенности монетизации

Page 21: HighLoad весна 2014 лекция 1

21

HighLoad. Лекция №1

Основа бизнеса и основная статья расходов Высокие требования по скорости разработки Высокие требования по масштабированию Высокие требования по эффективности Невыполнение равно выходу из бизнеса

ИТ-инфраструктура

Page 22: HighLoad весна 2014 лекция 1

22

HighLoad. Лекция №1

Аудитория интернета

Page 23: HighLoad весна 2014 лекция 1

23

HighLoad. Лекция №1

Аудитория интернета: Россия

Page 24: HighLoad весна 2014 лекция 1

24

HighLoad. Лекция №1

Аудитория интернета: Северная Америка

Page 25: HighLoad весна 2014 лекция 1

25

HighLoad. Лекция №1

Аудитория интернета: Мир

Page 26: HighLoad весна 2014 лекция 1

26

HighLoad. Лекция №1

Аудитория интернета: Мир

Page 27: HighLoad весна 2014 лекция 1

27

HighLoad. Лекция №1

Аудитория проектов: Мир

Page 28: HighLoad весна 2014 лекция 1

28

HighLoad. Лекция №1

Аудитория проектов: Россия

Page 29: HighLoad весна 2014 лекция 1

29

HighLoad. Лекция №1

Количество зарегистрированных пользователей Суточная/недельная/месячная аудитория Максимальное количество пользователей

онлайн Количество пользователей использующих

функцию Интенсивность использования разных функций Средний размер данных пользователя и т.п.

Возможные продуктовые метрики

Page 30: HighLoad весна 2014 лекция 1

30

HighLoad. Лекция №1

Роли людей в проекте Постановка целей управления Подготовка точек измерения Подготовка точек масштабирования Принципы выбора оборудования Единицы измерения Методика измерения

Управление вычислительными мощностями

Page 31: HighLoad весна 2014 лекция 1

31

HighLoad. Лекция №1

Product Management Development Engineering (Разработка) Operations Engineering (Эксплуатация)

Роли в проекте

Page 32: HighLoad весна 2014 лекция 1

32

HighLoad. Лекция №1

Роли в проекте: конфликт интересов

Page 33: HighLoad весна 2014 лекция 1

33

HighLoad. Лекция №1

Методология DevOps

Page 34: HighLoad весна 2014 лекция 1

34

HighLoad. Лекция №1

Роли в рамках различных лекций

В рамках этой лекции мы в отделе эксплуатации либо на позиции технического директора

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

Page 35: HighLoad весна 2014 лекция 1

35

HighLoad. Лекция №1

Получить требования от продуктовых менеджеров

Сформулировать требования в конкретных метриках(время ответа, % ошибок в ответах, uptime)

Проверить измеримость исполнения требований Зафиксировать в Service Level Agreement (SLA)

Установка целей

Page 36: HighLoad весна 2014 лекция 1

36

HighLoad. Лекция №1

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

Статистика по проекту за предыдущий период Ограничения (бюджет) по расходам на ИТ Ограничения по качеству работы сервиса (SLA)

Входная информация для планирования

Page 37: HighLoad весна 2014 лекция 1

37

HighLoad. Лекция №1

Доступность % Время простоя в год Время простоя в месяц

99% ("две девятки") 3.65 дней 7.20 часов

99.5% 1.83 дней 3.60 часов

99.9% ("три девятки") 8.76 часов 43.2 минут

99.95% 4.38 часов 21.56 минут

99.99% ("четыре девятки”) 52.56 минут 4.32 минут

99.999% ("пять девяток") 5.26 минут 25.9 секунд

99.9999% ("шесть девяток”) 31.5 секунд 2.59 секунды

Доступность (Uptime)

Page 38: HighLoad весна 2014 лекция 1

38

HighLoad. Лекция №1

Какую нагрузку может выдержать сервис в текущей конфигурации ?

Какую нагрузку сервис выдержит если добавить N дополнительных серверов ?

Сколько и каких серверов нужно чтобы обслуживать заданную нагрузку в заданных условиях ?

Как планировать закупки оборудования исходя из планирующегося роста ?

Вопросы на которые нужно уметь отвечать

Page 39: HighLoad весна 2014 лекция 1

39

HighLoad. Лекция №1

Disk utilization Disk storage CPU RAM Network

Сервер имеет ограниченные ресурсы

Page 40: HighLoad весна 2014 лекция 1

40

HighLoad. Лекция №1

БД и веб-сервер на одном физическом сервере Можно настроить снятие метрик (как указано

далее) Однако невозможно понять какой сервис какие

ресурсы сервера использует в каком Невозможно понять каким из сервисов вызвана

перегрузка ресурса Возможен частный случай когда используемые

ресурсы не пересекаются но он довольно редкий

Первый сервер Павла Дурова

Page 41: HighLoad весна 2014 лекция 1

41

HighLoad. Лекция №1

Система должны быть разбита на компоненты Один компонент - одна или несколько функций Разные функции должны «жить» на разных

серверах Под каждую функцию выделяется своя группа

серверов внутри которой осуществляется горизонтальное масштабирование

Можно проследить связь между полезной нагрузкой на компоненту и загрузкой подсистем физического сервера

Подготовка точек измерения

Page 42: HighLoad весна 2014 лекция 1

42

HighLoad. Лекция №1

Сервис расходует разные компоненты по-разному

При повышении нагрузки какой-то один ресурс кончится

Значение нагрузки в этот момент – предельное Дальше сервис как правило не работает Такой метод – самый надежный и простой

Определение максимальной нагрузки

Page 43: HighLoad весна 2014 лекция 1

43

HighLoad. Лекция №1

Разные сервисы имеют разные узкие места Под каждый сервис отдельная конфигурация На неиспользуемых ресурсах экономим Используемыми ресурсами набиваем по

максимуму Железо со временем становится мощнее Замена оборудования на новое может окупиться

(по использованию электроэнергии и юнитам в стойке)

Выбор конфигурации оборудования

Page 44: HighLoad весна 2014 лекция 1

44

HighLoad. Лекция №1

Вертикальное(покупаем все более и более мощный сервер)

Горизонтальное(покупаем много дешевых однотипных серверов)

“Диагональное”(термин Jonh Allspaw описывает существующий метод)

* Нужно учитывать совокупные затраты, построение горизонтально масштабируемого ПО стоит денег

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

Page 45: HighLoad весна 2014 лекция 1

45

HighLoad. Лекция №1

Хранение истории измерений Возможность добавления пользовательских

метрик Удобная визуализация данных (графики!) Сравнение метрик из разных источников Импорт/экспорт данных

Требования к инструментам измерения

Page 46: HighLoad весна 2014 лекция 1

46

HighLoad. Лекция №1

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

измерения Важно выбрать ключевые метрики для анализа Съем метрик с сервера не должен его

нагружать

Примеры систем: Cacti, Munin, Ganglia, MRTG, Graphite*

Выбор инструмента измерения

Page 47: HighLoad весна 2014 лекция 1

47

HighLoad. Лекция №1

Не нужно путать систему построения графиков с другими системами понимаемыми под «мониторингом»

Графики не создают аварийных уведомлений, не включают сирену и ничего сами не «мониторят»

Графики просто используются для анализа функционирования системы во времени

Часто это полностью независимая система

Взаимодействие с системами мониторинга

Page 48: HighLoad весна 2014 лекция 1

48

HighLoad. Лекция №1

Типовое устройство

Page 49: HighLoad весна 2014 лекция 1

49

HighLoad. Лекция №1

RRDTool – циклическая база данных SNMP – протокол удаленного съема метрик Графики по метрикам приложений Графики по логам сервисов

(метрика последней надежды)

Популярные инструменты и методики

Page 50: HighLoad весна 2014 лекция 1

50

HighLoad. Лекция №1

RPS – кол-во запросов в секунду (веб-сервер) QPS – кол-во запросов в секунду (БД) PPS – кол-во пакетов в секунду (сетевое

оборудование) Мbit/s – загрузка каналов связи Simultaneous connections – одновременные

соединения

Популярные метрики

Page 51: HighLoad весна 2014 лекция 1

51

HighLoad. Лекция №1

http://www.liveinternet.ru/stat/mail.ru/mins.html

Page 52: HighLoad весна 2014 лекция 1

52

HighLoad. Лекция №1

http://www.liveinternet.ru/stat/vkontakte.ru/mins.html

Page 53: HighLoad весна 2014 лекция 1

53

HighLoad. Лекция №1

Page 54: HighLoad весна 2014 лекция 1

54

HighLoad. Лекция №1

Page 55: HighLoad весна 2014 лекция 1

55

HighLoad. Лекция №1

Page 56: HighLoad весна 2014 лекция 1

56

HighLoad. Лекция №1

Slashdot-эффект

Page 57: HighLoad весна 2014 лекция 1

57

HighLoad. Лекция №1

DDoS атака

Page 58: HighLoad весна 2014 лекция 1

58

HighLoad. Лекция №1

Как правило не предназначены для пользователя

Плохо настроены потому что падать не планируется

Иногда встречаются настоящие шедевры

Страницы ошибок

Page 59: HighLoad весна 2014 лекция 1

59

HighLoad. Лекция №1

503 Service Unavailable

Page 60: HighLoad весна 2014 лекция 1

60

HighLoad. Лекция №1

504 Gateway Timeout

Page 61: HighLoad весна 2014 лекция 1

61

HighLoad. Лекция №1

503 Service Unavailable

Page 62: HighLoad весна 2014 лекция 1

62

HighLoad. Лекция №1

503 Service Unavailable

Page 63: HighLoad весна 2014 лекция 1

63

HighLoad. Лекция №1

503 Service Unavailable

Page 64: HighLoad весна 2014 лекция 1

64

HighLoad. Лекция №1

500 Internal Server Error

Page 65: HighLoad весна 2014 лекция 1

65

HighLoad. Лекция №1

500 Internal Server Error

Page 66: HighLoad весна 2014 лекция 1

66

HighLoad. Лекция №1

500 Internal Server Error

Page 67: HighLoad весна 2014 лекция 1

67

HighLoad. Лекция №1

Самое распространенное приложение: веб-сервер

Самый распространенный веб-сервер: Apache К сожалению далеко не самый быстрый На примере этой задачи будем учиться писать

ПО для высоких нагрузок

Архитектура сетевого приложения

Page 68: HighLoad весна 2014 лекция 1

68

HighLoad. Лекция №1

Блокирующая обработка соединений

Page 69: HighLoad весна 2014 лекция 1

69

HighLoad. Лекция №1

fork prefork threads threads prefork pooling

Методы обработки большого кол-ва соединений

Page 70: HighLoad весна 2014 лекция 1

70

HighLoad. Лекция №1

Неблокирующая обработка соединений

Системные вызовы: select kqueue (FreeBSD

4.1+) epoll (Linux 2.6+)

Прикладные библиотеки: libevent libev

Веб-серверы: nginx lighttpd thttpd 0W-httpd Tornado Node.js

Page 71: HighLoad весна 2014 лекция 1

71

HighLoad. Лекция №1

Статистика по распространенности серверов

Page 72: HighLoad весна 2014 лекция 1

72

HighLoad. Лекция №1

Устройство типового веб-сайта

/Perl /Python

Page 73: HighLoad весна 2014 лекция 1

73

HighLoad. Лекция №1

Устройство типового веб-сайта

Page 74: HighLoad весна 2014 лекция 1

74

HighLoad. Лекция №1

CGI FastCGI и клоны Apache: mod_php, mod_perl, mod_python … Apache: mod_helloworld nginx: ngx_http_helloworld_module nginx: content_by_lua

Подключение динамического содержимого

Page 75: HighLoad весна 2014 лекция 1

75

HighLoad. Лекция №1

Домашнее задание №1 Разработать веб-сервер отдающий статику с

диска Рекомендуется выбрать эффективную

архитектуру Требования и методика тестирования по ссылке:

https://github.com/init/http-test-suite

Page 76: HighLoad весна 2014 лекция 1

76

HighLoad. Лекция №1

Список литературы

1. The Art of Capacity PlanningISBN: 978-0-596-51857-8

2. The С10K Problemhttp://www.kegel.com/c10k.html

3. Сравнительный анализ архитектур серверных интернет-приложений для высоких нагрузок. Игорь Сысоев. 03.11. 2011 (лекция 1ч 31м)https://www.youtube.com/watch?v=aE0yawwB6h4

4. Hypertext Transfer Protocol -- HTTP/1.1RFC 2616

Page 77: HighLoad весна 2014 лекция 1

77

HighLoad. Лекция №1

Список литературы

5. Building Scalable Web SitesISBN: 978-0-596-10235-7

6. Scalable Internet ArchitecturesISBN: 978-0-596-51857-8

Page 78: HighLoad весна 2014 лекция 1

СПАСИБО ЗА ВНИМАНИЕ

Быков Александр

[email protected]