Проектирование высоконагруженных систем Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
HighLoad. Лекция №1
СПАСИБО ЗА ВНИМАНИЕ
12.00M
Category: internetinternet

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

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

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

2. HighLoad. Лекция №1

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

3. HighLoad. Лекция №1

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

4. HighLoad. Лекция №1

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

5. HighLoad. Лекция №1

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

6. HighLoad. Лекция №1

Задача: миллиард пользователей
Как должна быть устроена такая система
Как должна быть устроена организация
6

7. HighLoad. Лекция №1

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

8. HighLoad. Лекция №1

Место курса в программе обучения
Предшествующие:
1 семестр: Web-технологии
2 семестр: Базы данных
Параллельные:
QA и Безопасность
Последующие:
4 семестр: Архитектура ПО
4 семестр: Разработка выпускного проекта
8

9. HighLoad. Лекция №1

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

10. HighLoad. Лекция №1

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

11. HighLoad. Лекция №1

Программа курса: лекции
1. Введение
2. Сетевая подсистема
3. Масштабирование нагрузки
4. Аппаратное обеспечение
5. Программное обеспечение
6. Архитектура проекта
7. Клиент-серверное взаимодействие
11

12. HighLoad. Лекция №1

Контроль знаний
1. Разработка быстрого веб-сервера (40 баллов)
2. Балансировка нагрузки (20 баллов)
3. Проектирование интернет-проекта (40 баллов)
Сдача позже срока – половина баллов
Итоговая оценка: уд. – 30 баллов, хор. – 60, отл. – 80
12

13. HighLoad. Лекция №1

Контроль знаний
1. Разработка быстрого веб-сервера (15 марта)
2. Балансировка нагрузки (22 апреля)
3. Проектирование интернет-проекта (29 апреля)
Сдача позже срока – половина баллов
Итоговая оценка: уд. – 30 баллов, хор. – 60, отл. – 80
13

14. HighLoad. Лекция №1

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

15. HighLoad. Лекция №1

Содержание лекции
1. Аудитория интернета
2. Особенности интернет проектов
3. Входные/выходные данные от бизнеса
4. Задачи технического отдела
5. Управление вычислительными мощностями
6. Архитектура многопоточного сетевого ПО (ДЗ 1)
15

16. HighLoad. Лекция №1

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

17. HighLoad. Лекция №1

Аудитория интернета: Россия
Население
143,4 млн Урбанизация
74%
Пользователи интернета (ITU)
105,3 млн Проникновение
73%
Пользователи интернета (TNS, 12+)
87,0 млн Проникновение
71%
Пользователи ВК
97,0 млн Проникновение
68%
Пользователи сообщений ВК
82,0 млн Проникновение
57%
257,0 млн Проникновение
178%
Контракты сотовой связи
17

18. HighLoad. Лекция №1

18

19. HighLoad. Лекция №1

19

20. HighLoad. Лекция №1

20

21. HighLoad. Лекция №1

21

22. HighLoad. Лекция №1

22

23. HighLoad. Лекция №1

23

24. HighLoad. Лекция №1

24

25. HighLoad. Лекция №1

Февраль 2018 г. - Июль 2018 г., в млн.чел. и в % от населения 12+ лет
Пользуются интернетом хотя бы один раз…
100
90
80
70
100%
90,9 млн.ч.
74%
60
87,5 млн.ч.
79%
68%
71%
65%
49,1 млн.ч.
40,6 млн.ч.
40
80%
77%
50,3 млн.ч.
50
90%
70%
60%
50%
38,5 млн.ч.
40%
30
30%
20
20%
10
10%
0
0%
Россия 0+
Россия 100
000+
в месяц
Россия 100
000-
Россия 0+
Россия 100
000+
Россия 100
000-
в неделю
25

26. HighLoad. Лекция №1

77%
Россия 0+
48%
43%
23%
3%
16%
79%
Россия 100 000+
53%
47%
27%
18%
2%
74%
Россия 100 000-
41%
38%
19%
3%
13%
26

27. HighLoad. Лекция №1

27

28. HighLoad. Лекция №1

28

29.

Топ-20 интернет-проектов (десктоп)
Август 2017, Россия 0+, 12-64 лет
в среднем за день
Яндекс (31 проект)
24 002 т.ч.
в среднем за неделю
Яндекс (31 проект)
40 383 т.ч.
за месяц
Яндекс (31 проект)
50 534 т.ч.
Vk.com
17 084 т.ч.
Mail.ru (22 проекта)
Mail.ru (22 проекта)
16 483 т.ч.
Vk.com
30 330 т.ч.
Youtube.com
42 339 т.ч.
29 007 т.ч.
Vk.com
41 846 т.ч.
Youtube.com
13 240 т.ч.
Youtube.com
Google (ru+com)
12 163 т.ч.
Google (ru+com)
Odnoklassniki.ru
9 541 т.ч.
Odnoklassniki.ru
32 246 т.ч.
26 341 т.ч.
17 997 т.ч.
45 140 т.ч.
Mail.ru (22 проекта)
40 030 т.ч.
Google (ru+com)
Odnoklassniki.ru
27 722 т.ч.
Facebook.com
3 479 т.ч.
Aliexpress.com
10 792 т.ч.
Wikipedia.org
22 954 т.ч.
Aliexpress.com
3 422 т.ч.
Avito.ru
10 602 т.ч.
Avito.ru
21 489 т.ч.
Avito.ru
3 240 т.ч.
Wikipedia.org
10 371 т.ч.
Aliexpress.com
20 539 т.ч.
Wikipedia.org
2 616 т.ч.
Facebook.com
Facebook.com
19 151 т.ч.
Gismeteo.ru
2 151 т.ч.
Instagram.com
6 918 т.ч.
Instagram.com
Instagram.com
2 144 т.ч.
Gismeteo.ru
5 835 т.ч.
Rambler.ru
11 465 т.ч.
Rambler.ru
2 048 т.ч.
Rambler.ru
5 404 т.ч.
Gosuslugi.ru
11 048 т.ч.
Fotostrana.ru
1 202 т.ч.
Ria.ru
4 390 т.ч.
Gismeteo.ru
10 969 т.ч.
Twitter.com
1 145 т.ч.
LiveJournal.com
4 169 т.ч.
Ria.ru
10 722 т.ч.
Pikabu.ru
1 115 т.ч.
Gosuslugi.ru
4 095 т.ч.
LiveJournal.com
10 654 т.ч.
LiveJournal.com
1 102 т.ч.
Kinopoisk.ru
3 909 т.ч.
Kinopoisk.ru
9 915 т.ч.
Ria.ru
1 006 т.ч.
Twitter.com
3 805 т.ч.
Kp.ru
9 147 т.ч.
29
9 834 т.ч.
14 791 т.ч.
Rbc.ru
931 т.ч.
Pikabu.ru
3 693 т.ч.
Mts.ru
9 086 т.ч.
Kinogo.club
896 т.ч.
Rbc.ru
3 678 т.ч.
Rbc.ru
9 019 т.ч.
Аудитория сайтов производителей браузеров не измерялась по технологическим причинам. Ролики,
встроенные на сторонние сайты, не включены в расчёт аудитории ресурсов.
по данным
Site–centric
панели
по данным
User–centric
панели

30. HighLoad. Лекция №1

Facebook: Monthly active users (MAU)
30

31. HighLoad. Лекция №1

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

32. HighLoad. Лекция №1

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

33. HighLoad. Лекция №1

Динамичность рынка
Высокая конкуренция
Низкая привязанность пользователей к сервису
Популярность сервиса может расти очень быстро
… а падать еще быстрее
Факторы: качество обслуживания
Факторы: потребительское поведение
33

34. HighLoad. Лекция №1

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

35. HighLoad. Лекция №1

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

36. HighLoad. Лекция №1

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

37. HighLoad. Лекция №1

3. Выходные данные от ИТ-подразделения
План по эксплуатационным затратам
План по капитальным затратам
План по найму персонала
37

38. HighLoad. Лекция №1

38

39. HighLoad. Лекция №1

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

40. HighLoad. Лекция №1

4. Задачи «технического отдела»
Измерение продуктовых и технических метрик
Перевод продуктовых метрик в технические
Эксплуатация существующей системы
Планирование изменений
Реализация изменений
40

41. HighLoad. Лекция №1

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

42. HighLoad. Лекция №1

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

43. HighLoad. Лекция №1

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

44. HighLoad. Лекция №1

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

45. HighLoad. Лекция №1

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

46. HighLoad. Лекция №1

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

47. HighLoad. Лекция №1

Установка целей
Получить требования от продуктовых менеджеров
Сформулировать требования в конкретных метриках
(время ответа, % ошибок в ответах, uptime)
Проверить измеримость исполнения требований
Зафиксировать в Service Level Agreement (SLA)
47

48. HighLoad. Лекция №1

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

49. HighLoad. Лекция №1

Доступность (Uptime)
Доступность %
Время простоя в год
Время простоя в месяц
99% ("две девятки")
3.65 дней
7.20 часов
99.5%
1.83 дней
3.60 часов
99.9% ("три девятки")
8.76 часов
43.2 минут
99.95%
4.38 часов
21.56 минут
52.56 минут
4.32 минут
99.999% ("пять девяток")
5.26 минут
25.9 секунд
99.9999% ("шесть девяток”)
31.5 секунд
2.59 секунды
99.99% ("четыре девятки”)
49

50. HighLoad. Лекция №1

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

51. HighLoad. Лекция №1

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

52. HighLoad. Лекция №1

6. Архитектура сетевого приложения
Самое распространенное приложение: веб-сервер
Самый распространенный веб-сервер: Apache
Самый быстрый веб-сервер: nginx
На примере этой задачи будем учиться писать ПО для
высоких нагрузок
52

53. HighLoad. Лекция №1

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

54. HighLoad. Лекция №1

Методы обработки большого кол-ва соединений
fork
prefork
threads
threads prefork
pooling
coroutines
54

55. HighLoad. Лекция №1

Неблокирующая обработка соединений
Системные вызовы:
select
kqueue (FreeBSD 4.1+)
epoll (Linux 2.6+)
Прикладные библиотеки:
libevent
libev
Веб-серверы:
httpd
nginx
Tornado
Node.js
Go: net/http
55

56. HighLoad. Лекция №1

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

57. HighLoad. Лекция №1

Домашнее задание №1
Разработать веб-сервер отдающий статику с диска
Утилизировать все доступные ресурсы сервера (CPU)
Обеспечить высокую производительность
Требования и методика тестирования по ссылке:
https://github.com/init/http-test-suite
57

58. HighLoad. Лекция №1

Список литературы
1. Site Reliability Engineering
ISBN: 978-1-4919-2912-4
2. The Art of Capacity Planning
ISBN: 978-0-596-51857-8
3. Building Scalable Web Sites
ISBN: 978-0-596-10235-7
4. Scalable Internet Architectures
ISBN: 978-0-596-51857-8
58

59. HighLoad. Лекция №1

Список литературы
5. The С10K Problem
http://www.kegel.com/c10k.html
6. Сравнительный анализ архитектур серверных
интернет-приложений для высоких нагрузок. Игорь
Сысоев. 03.11. 2011 (лекция 1ч 31м)
https://www.youtube.com/watch?v=aE0yawwB6h4
7. Hypertext Transfer Protocol -- HTTP/1.1
RFC 2616
59

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

Быков Александр
[email protected]
English     Русский Rules