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

Preview:

DESCRIPTION

 

Citation preview

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

х систем

Лекция №1

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

2

HighLoad. Лекция №1

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

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

3

HighLoad. Лекция №1

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

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

Определения

4

HighLoad. Лекция №1

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

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

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

Определения

5

HighLoad. Лекция №1

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

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

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

6

HighLoad. Лекция №1

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

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

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

7

HighLoad. Лекция №1

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

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

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

Цели курса

8

HighLoad. Лекция №1

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

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

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

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

9

HighLoad. Лекция №1

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

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

10

HighLoad. Лекция №1

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

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

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

11

HighLoad. Лекция №1

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

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

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

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

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

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

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

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

12

HighLoad. Лекция №1

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

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

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

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

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

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

13

HighLoad. Лекция №1

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

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

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

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

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

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

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

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

14

HighLoad. Лекция №1

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

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

15

HighLoad. Лекция №1

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

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

16

HighLoad. Лекция №1

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

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

17

HighLoad. Лекция №1

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

18

HighLoad. Лекция №1

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

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

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

19

HighLoad. Лекция №1

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

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

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

20

HighLoad. Лекция №1

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

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

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

21

HighLoad. Лекция №1

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

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

22

HighLoad. Лекция №1

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

23

HighLoad. Лекция №1

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

24

HighLoad. Лекция №1

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

25

HighLoad. Лекция №1

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

26

HighLoad. Лекция №1

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

27

HighLoad. Лекция №1

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

28

HighLoad. Лекция №1

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

29

HighLoad. Лекция №1

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

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

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

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

30

HighLoad. Лекция №1

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

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

31

HighLoad. Лекция №1

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

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

32

HighLoad. Лекция №1

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

33

HighLoad. Лекция №1

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

34

HighLoad. Лекция №1

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

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

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

35

HighLoad. Лекция №1

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

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

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

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

36

HighLoad. Лекция №1

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

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

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

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)

38

HighLoad. Лекция №1

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

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

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

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

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

39

HighLoad. Лекция №1

Disk utilization Disk storage CPU RAM Network

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

40

HighLoad. Лекция №1

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

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

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

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

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

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

41

HighLoad. Лекция №1

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

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

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

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

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

42

HighLoad. Лекция №1

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

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

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

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

43

HighLoad. Лекция №1

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

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

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

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

44

HighLoad. Лекция №1

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

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

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

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

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

45

HighLoad. Лекция №1

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

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

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

46

HighLoad. Лекция №1

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

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

нагружать

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

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

47

HighLoad. Лекция №1

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

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

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

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

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

48

HighLoad. Лекция №1

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

49

HighLoad. Лекция №1

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

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

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

50

HighLoad. Лекция №1

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

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

соединения

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

51

HighLoad. Лекция №1

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

52

HighLoad. Лекция №1

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

53

HighLoad. Лекция №1

54

HighLoad. Лекция №1

55

HighLoad. Лекция №1

56

HighLoad. Лекция №1

Slashdot-эффект

57

HighLoad. Лекция №1

DDoS атака

58

HighLoad. Лекция №1

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

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

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

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

59

HighLoad. Лекция №1

503 Service Unavailable

60

HighLoad. Лекция №1

504 Gateway Timeout

61

HighLoad. Лекция №1

503 Service Unavailable

62

HighLoad. Лекция №1

503 Service Unavailable

63

HighLoad. Лекция №1

503 Service Unavailable

64

HighLoad. Лекция №1

500 Internal Server Error

65

HighLoad. Лекция №1

500 Internal Server Error

66

HighLoad. Лекция №1

500 Internal Server Error

67

HighLoad. Лекция №1

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

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

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

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

68

HighLoad. Лекция №1

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

69

HighLoad. Лекция №1

fork prefork threads threads prefork pooling

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

70

HighLoad. Лекция №1

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

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

4.1+) epoll (Linux 2.6+)

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

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

71

HighLoad. Лекция №1

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

72

HighLoad. Лекция №1

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

/Perl /Python

73

HighLoad. Лекция №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

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

75

HighLoad. Лекция №1

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

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

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

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

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

77

HighLoad. Лекция №1

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

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

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

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

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

bykov@corp.mail.ru