Проектирование высоконагруженных систем. Лекция №1

Содержание

Слайд 2

HighLoad. Лекция №1 Быков Александр Сергеевич Сотрудник Mail.Ru c 2004 года

HighLoad. Лекция №1

Быков Александр Сергеевич
Сотрудник Mail.Ru c 2004 года
Технический руководитель рекламной

системы
Начинал с позиции веб-разработчика в Почте
Выпускник МГТУ им. Н.Э.Баумана 2006 года

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

Слайд 3

HighLoad. Лекция №1 Система — множество элементов, находящихся в отношениях и

HighLoad. Лекция №1

Система — множество элементов, находящихся в отношениях и связях

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

Определения

Слайд 4

HighLoad. Лекция №1 Нагрузка — совершаемая полезная работа Высоконагруженная система (1)

HighLoad. Лекция №1

Нагрузка — совершаемая полезная работа
Высоконагруженная система (1) – система

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

Определения

Слайд 5

HighLoad. Лекция №1 Ярко выраженный эффект масштаба Быстрый рост успешных проектов

HighLoad. Лекция №1

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

людей
Необходимо учитывать нагрузку при проектировании
Умение держать нагрузку – вопрос выживания

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

Слайд 6

HighLoad. Лекция №1 Как должна быть устроена такая система Как должна

HighLoad. Лекция №1

Как должна быть устроена такая система
Как должна быть устроена

организация

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

Слайд 7

HighLoad. Лекция №1 Получение теоретических знаний в области проектирования и эксплуатации

HighLoad. Лекция №1

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

систем
Получение практических навыков разработки высокопроизводительных сервисов
Получение практических навыков анализа архитектуры интернет-проектов и технологий
Подготовка к собеседованию на позицию SRE

Цели курса

Слайд 8

HighLoad. Лекция №1 Предшествующие: 1 семестр: Web-технологии 2 семестр: Базы данных

HighLoad. Лекция №1

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

Архитектура ПО
4 семестр: Разработка выпускного проекта

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

Слайд 9

HighLoad. Лекция №1 Знание протокола HTTP Навыки разработки многопоточных приложений Навыки

HighLoad. Лекция №1

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

навыки работы в ОС семейства UNIX
Базовые знания об устройстве сетей

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

Слайд 10

HighLoad. Лекция №1 Навык разработки распределенного ПО Навык разработки ПО с

HighLoad. Лекция №1

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

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

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

Слайд 11

HighLoad. Лекция №1 Введение Сетевая подсистема Масштабирование нагрузки Аппаратное обеспечение Программное

HighLoad. Лекция №1

Введение
Сетевая подсистема
Масштабирование нагрузки
Аппаратное обеспечение
Программное обеспечение
Архитектура проекта
Клиент-серверное взаимодействие

Программа курса:

лекции
Слайд 12

HighLoad. Лекция №1 Разработка быстрого веб-сервера (40 баллов) Балансировка нагрузки (20

HighLoad. Лекция №1

Разработка быстрого веб-сервера (40 баллов)
Балансировка нагрузки (20 баллов)
Проектирование интернет-проекта

(40 баллов)
Сдача позже срока – половина баллов
Итоговая оценка: уд. – 30 баллов, хор. – 60, отл. – 80

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

Слайд 13

HighLoad. Лекция №1 Разработка быстрого веб-сервера (15 марта) Балансировка нагрузки (22

HighLoad. Лекция №1

Разработка быстрого веб-сервера (15 марта)
Балансировка нагрузки (22 апреля)
Проектирование интернет-проекта

(29 апреля)
Сдача позже срока – половина баллов
Итоговая оценка: уд. – 30 баллов, хор. – 60, отл. – 80

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

Слайд 14

HighLoad. Лекция №1 Познакомились Разобрались зачем нужен этот курс Убедились в

HighLoad. Лекция №1

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

что нас ждет на занятиях

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

Слайд 15

HighLoad. Лекция №1 Аудитория интернета Особенности интернет проектов Входные/выходные данные от

HighLoad. Лекция №1

Аудитория интернета
Особенности интернет проектов
Входные/выходные данные от бизнеса
Задачи технического отдела
Управление

вычислительными мощностями
Архитектура многопоточного сетевого ПО (ДЗ 1)

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

Слайд 16

HighLoad. Лекция №1 1. Аудитория интернета

HighLoad. Лекция №1

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

Слайд 17

HighLoad. Лекция №1 Аудитория интернета: Россия

HighLoad. Лекция №1

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

Слайд 18

HighLoad. Лекция №1

HighLoad. Лекция №1

Слайд 19

HighLoad. Лекция №1

HighLoad. Лекция №1

Слайд 20

HighLoad. Лекция №1

HighLoad. Лекция №1

Слайд 21

HighLoad. Лекция №1

HighLoad. Лекция №1

Слайд 22

HighLoad. Лекция №1

HighLoad. Лекция №1

Слайд 23

HighLoad. Лекция №1

HighLoad. Лекция №1

Слайд 24

HighLoad. Лекция №1

HighLoad. Лекция №1

Слайд 25

Февраль 2018 г. - Июль 2018 г., в млн.чел. и в

Февраль 2018 г. - Июль 2018 г., в млн.чел. и в

% от населения 12+ лет

Пользуются интернетом хотя бы один раз…

в месяц

в неделю

HighLoad. Лекция №1

Слайд 26

Россия 0+ Россия 100 000+ Россия 100 000- HighLoad. Лекция №1

Россия 0+

Россия 100 000+

Россия 100 000-

HighLoad. Лекция №1

Слайд 27

HighLoad. Лекция №1

HighLoad. Лекция №1

Слайд 28

HighLoad. Лекция №1

HighLoad. Лекция №1

Слайд 29

в среднем за день в среднем за неделю за месяц Топ-20

в среднем за день

в среднем за неделю

за месяц

Топ-20 интернет-проектов (десктоп) Август

2017, Россия 0+, 12-64 лет

Аудитория сайтов производителей браузеров не измерялась по технологическим причинам. Ролики, встроенные на сторонние сайты, не включены в расчёт аудитории ресурсов.

Слайд 30

HighLoad. Лекция №1 Facebook: Monthly active users (MAU)

HighLoad. Лекция №1

Facebook: Monthly active users (MAU)

Слайд 31

HighLoad. Лекция №1 2. Особенности интернет-проектов

HighLoad. Лекция №1

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

Слайд 32

HighLoad. Лекция №1 Доступность сервиса из любой точки мира Низкая стоимость

HighLoad. Лекция №1

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

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

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

Слайд 33

HighLoad. Лекция №1 Высокая конкуренция Низкая привязанность пользователей к сервису Популярность

HighLoad. Лекция №1

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

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

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

Слайд 34

HighLoad. Лекция №1 Низкая/нулевая доходность на одного пользователя Сначала аудитория потом

HighLoad. Лекция №1

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

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

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

Слайд 35

HighLoad. Лекция №1 Основа бизнеса и основная статья расходов Высокие требования

HighLoad. Лекция №1

Основа бизнеса и основная статья расходов
Высокие требования по скорости

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

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

Слайд 36

HighLoad. Лекция №1 Выделение ключевых продуктовых метрик Прогноз по росту проекта

HighLoad. Лекция №1

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

метриках
План по запуску новых функций
Бюджетные требования
Требования к качеству (стабильность, безопасность)

3. Входные данные от бизнес-менеджмента

Слайд 37

HighLoad. Лекция №1 План по эксплуатационным затратам План по капитальным затратам

HighLoad. Лекция №1

План по эксплуатационным затратам
План по капитальным затратам
План по найму

персонала

3. Выходные данные от ИТ-подразделения

Слайд 38

HighLoad. Лекция №1

HighLoad. Лекция №1

Слайд 39

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

HighLoad. Лекция №1

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

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

Продуктовые метрики: примеры

Слайд 40

HighLoad. Лекция №1 Измерение продуктовых и технических метрик Перевод продуктовых метрик

HighLoad. Лекция №1

Измерение продуктовых и технических метрик
Перевод продуктовых метрик в технические
Эксплуатация

существующей системы
Планирование изменений
Реализация изменений

4. Задачи «технического отдела»

Слайд 41

HighLoad. Лекция №1 RPS – кол-во запросов в секунду (веб-сервер) QPS

HighLoad. Лекция №1

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

запросов в секунду (БД)
PPS – кол-во пакетов в секунду (сетевое оборудование)
Мbit/s – загрузка каналов связи
Simultaneous connections – одновременные соединения
Гбайт – размеры хранилищ

Технические метрики: примеры

Слайд 42

HighLoad. Лекция №1 Роли людей в проекте Постановка целей управления Разработка ПО 5. Управление вычислительными мощностями

HighLoad. Лекция №1

Роли людей в проекте
Постановка целей управления
Разработка ПО

5. Управление вычислительными

мощностями
Слайд 43

HighLoad. Лекция №1 Product Management Development Engineering (Разработка) Operations Engineering (Эксплуатация) Роли в проекте

HighLoad. Лекция №1

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

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

Слайд 44

HighLoad. Лекция №1 Роли в проекте: конфликт интересов

HighLoad. Лекция №1

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

Слайд 45

HighLoad. Лекция №1 Методология DevOps

HighLoad. Лекция №1

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

Слайд 46

HighLoad. Лекция №1 Роли в рамках различных лекций В рамках этой

HighLoad. Лекция №1

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

В рамках этой лекции мы

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

HighLoad. Лекция №1 Получить требования от продуктовых менеджеров Сформулировать требования в

HighLoad. Лекция №1

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

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

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

Слайд 48

HighLoad. Лекция №1 Прогноз по росту проекта в продуктовых метриках План

HighLoad. Лекция №1

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

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

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

Слайд 49

HighLoad. Лекция №1 Доступность % Время простоя в год Время простоя

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)

Слайд 50

HighLoad. Лекция №1 Какую нагрузку может выдержать сервис в текущей конфигурации

HighLoad. Лекция №1

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

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

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

Слайд 51

HighLoad. Лекция №1 Разработка ПО это только первый (небольшой) шаг Дальнейшая

HighLoad. Лекция №1

Разработка ПО это только первый (небольшой) шаг
Дальнейшая эксплуатация и

модификация системы это большая часть работы
Условия эксплуатации диктуют требования к ПО (а не наоборот)
ПО не проверенное боевой эксплуатацией не считается рабочим

Разработка ПО в больших системах

Слайд 52

HighLoad. Лекция №1 Самое распространенное приложение: веб-сервер Самый распространенный веб-сервер: Apache

HighLoad. Лекция №1

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

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

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

Слайд 53

HighLoad. Лекция №1 Блокирующая обработка соединений

HighLoad. Лекция №1

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

Слайд 54

HighLoad. Лекция №1 fork prefork threads threads prefork pooling coroutines Методы обработки большого кол-ва соединений

HighLoad. Лекция №1

fork
prefork
threads
threads prefork
pooling
coroutines

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

Слайд 55

HighLoad. Лекция №1 Неблокирующая обработка соединений Системные вызовы: select kqueue (FreeBSD

HighLoad. Лекция №1

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

Системные вызовы:
select
kqueue (FreeBSD 4.1+)
epoll (Linux 2.6+)

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

Веб-серверы:
httpd
nginx
Tornado
Node.js
Go:

net/http
Слайд 56

HighLoad. Лекция №1 Статистика по распространенности серверов

HighLoad. Лекция №1

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

Слайд 57

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

HighLoad. Лекция №1

Домашнее задание №1

Разработать веб-сервер отдающий статику с диска
Утилизировать все

доступные ресурсы сервера (CPU)
Обеспечить высокую производительность
Требования и методика тестирования по ссылке: https://github.com/init/http-test-suite
Слайд 58

HighLoad. Лекция №1 Список литературы Site Reliability Engineering ISBN: 978-1-4919-2912-4 The

HighLoad. Лекция №1

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

Site Reliability Engineering ISBN: 978-1-4919-2912-4
The Art of Capacity Planning ISBN:

978-0-596-51857-8
Building Scalable Web Sites ISBN: 978-0-596-10235-7
Scalable Internet Architectures ISBN: 978-0-596-51857-8
Слайд 59

HighLoad. Лекция №1 Список литературы The С10K Problem http://www.kegel.com/c10k.html Сравнительный анализ

HighLoad. Лекция №1

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

The С10K Problem http://www.kegel.com/c10k.html
Сравнительный анализ архитектур серверных интернет-приложений для

высоких нагрузок. Игорь Сысоев. 03.11. 2011 (лекция 1ч 31м) https://www.youtube.com/watch?v=aE0yawwB6h4
Hypertext Transfer Protocol -- HTTP/1.1 RFC 2616