Similar presentations:
Проектирование высоконагруженных систем. Лекция №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
1819. HighLoad. Лекция №1
1920. HighLoad. Лекция №1
2021. HighLoad. Лекция №1
2122. HighLoad. Лекция №1
2223. HighLoad. Лекция №1
2324. HighLoad. Лекция №1
2425. 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
2728. HighLoad. Лекция №1
2829.
Топ-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
3839. 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
Методология DevOps45
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]