Про построение нагруженных систем
DESCRIPTION
Рассказывал в ФизТехеTRANSCRIPT
![Page 2: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/2.jpg)
2
![Page 3: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/3.jpg)
3
СОБИРАЕМСЯ В ПОХОД
![Page 4: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/4.jpg)
4
Функциональное разделение
![Page 5: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/5.jpg)
5
Сервисно-ориентированная архитектура
![Page 6: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/6.jpg)
6
Вертикальное масштабирование
![Page 7: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/7.jpg)
7
Горизонтальное масштабирование
![Page 8: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/8.jpg)
8
Отложенные вычисления
![Page 9: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/9.jpg)
9
Асинхронная обработка
![Page 10: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/10.jpg)
10
Использование толстого клиента
![Page 11: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/11.jpg)
11
Кеширование
![Page 12: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/12.jpg)
12
Шардинг
![Page 13: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/13.jpg)
13
Виртуальные шарды
![Page 14: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/14.jpg)
14
Центральный диспетчер
![Page 15: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/15.jpg)
15
Репликация
![Page 16: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/16.jpg)
16
Партиционирование
![Page 17: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/17.jpg)
17
Денормализация
![Page 18: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/18.jpg)
18
Введение избыточности
![Page 19: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/19.jpg)
19
Параллельное выполнение
![Page 20: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/20.jpg)
20
АЛГОРИТМ ПРОЕКТИРОВАНИЯС какой стороны открывать бочку
![Page 21: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/21.jpg)
21
ШАГ ПЕРВЫЙ. КОНЦЕПЦИЯ
![Page 22: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/22.jpg)
22
ШАГ ВТОРОЙ. КАЛЬКУЛЯЦИЯ
![Page 23: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/23.jpg)
23
АЛГОРИТМ, ШАГ ТРЕТИЙОпределить допустимую деградацию функций системы
![Page 24: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/24.jpg)
24
АЛГОРИТМ, ШАГ ЧЕТВЕРТЫЙ
Построим схему движения данных и примем решение, какие из особенностей проектируемой системы мы будем использовать
![Page 25: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/25.jpg)
25
АЛГОРИТМ, ШАГ ПЯТЫЙПроектируем схему хранения данных
![Page 26: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/26.jpg)
26
АЛГОРИТМ, ШАГ ШЕСТОЙЛомаем систему и смотрим, что у нас получится
![Page 27: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/27.jpg)
Примеры
![Page 28: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/28.jpg)
28
ПРОФИЛИ НА САЙТЕ ЗНАКОМСТВСпроектируем систему хранения пользователей на сайте знакомств
![Page 29: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/29.jpg)
29
Сайт знакомств, профили / #1
1. Пользователь заполняет анкету;2. Получает логин пароль для доступа к
своему личному кабинету;3. Пользователи могут смотреть профили
друг друга;
![Page 30: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/30.jpg)
30
Сайт знакомств, профили / #2
1. Пользователей 200 миллионов;2. Каждая анкета занимает 10 килобайт, то
есть всего 2 000 гигабайт;3. Хитов в день 5 миллиардов;
![Page 31: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/31.jpg)
31
Сайт знакомств, профили / #3
1. Деградация недопустима;
![Page 32: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/32.jpg)
32
Сайт знакомств, профили / #4
1. Данные часто читаются, но редко меняются;
2. Все анкеты примерно одного размера;3. У анкеты есть уникальный идентификатор;4. Нет ярко выраженных лидеров;
![Page 33: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/33.jpg)
33
Сайт знакомств, профили / #5
Проектируем схему хранения данных
![Page 34: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/34.jpg)
34
Сайт знакомств, профили / #5
Репликация?Вообще 140к чтений в секунду
![Page 35: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/35.jpg)
35
Сайт знакомств, профили / #5
Шардирование?По какому ключу? Диспетчер?
![Page 36: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/36.jpg)
36
Сайт знакомств, профили / #6
Виртуальные шарды
![Page 37: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/37.jpg)
37
Сайт знакомств, профили / #6
Сгорает диск?
![Page 38: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/38.jpg)
38
Сайт знакомств, пользователи / #6
Репликация
![Page 39: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/39.jpg)
39
Сайт знакомств, профили / результат
• Разбиваем весь массив пользователей на виртуальные шарды;
• Маппим виртуальные шарды на реальные шарды;
• Внутри каждого шарда реплицируем информацию для отказоустойчивости
![Page 40: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/40.jpg)
40
НОВОСТНОЙ САЙТБольшая и длинная лента новостей крупного СМИ
![Page 41: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/41.jpg)
41
Новости / #1
• Пользователь читает свежие новости;• Пользователь читает архивные новости;• Редактор публикует новости;
![Page 42: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/42.jpg)
42
Новости / #2
• Каждая новость примерно 10 килобайт;• Мы вечно храним архив с даты основания
СМИ – 2000 год;• В день публикуется около 10 тысяч различных
региональных и федеральных новостей;• Итого в год 3 миллиона 500 тысяч новостей, в
год 35 гигабайт, за 20 лет – 700 гигабайт; • Это крупнейшее СМИ, посещаемость – 10
миллионов человек в сутки;
![Page 43: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/43.jpg)
43
Новости / #3
• Деградация недопустима;
![Page 44: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/44.jpg)
44
Новости / #4
• Количество чтений на несколько порядков превышает количество записей;
• 99% запросов касаются последнего дня;• 99,99% запросов касаются последней
недели.
![Page 45: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/45.jpg)
45
Новости / #5
Проектируем схему хранения данных
![Page 46: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/46.jpg)
46
Новости / #5
ПартиционированиеПо какому принципу?
![Page 47: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/47.jpg)
47
Новости / #5
Как переносить данные из горячей БД в архив?
![Page 48: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/48.jpg)
48
Новости / #5
Не надо ничего переносить!
Вводим избыточность!
![Page 49: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/49.jpg)
49
Новости / #5
Очень много запросов к горячим новостям!
Что делать?
![Page 50: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/50.jpg)
50
Новости / #5
Кеширование!
![Page 51: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/51.jpg)
51
Новости / результат
• Кеширование для горячих новостей;• Партиционирование новостей по дате –
последние новости в быстрой таблице;• Избыточное хранение новостей – новость
пишется сразу и в горячую таблицу и в архивную, горячая раз в какое-то время чистится;
![Page 52: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/52.jpg)
52
ПРОСМОТР ФРЕНДЛЕНТЫПросмотр френдлента в блогах
![Page 53: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/53.jpg)
53
Просмотр френдленты / #1
• У пользователя может быть сколько угодно друзей;
• Френдленту храним бесконечно долго;
![Page 54: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/54.jpg)
54
Просмотр френдленты / #2
• В среднем у пользователя 100 друзей;• Каждый пользователь в среднем пишет 3
поста в день;• Каждый пост занимаем около 1 килобайта;• Пользователей – 10 миллионов в сутки, но
каждый пользователь делает 100 хитов. Итого – миллиард запросов к френдленте в сутки;
• В сутки генерируется 30 миллионов постов, 10 миллиардов записей в год;
![Page 55: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/55.jpg)
55
Просмотр френдленты / #3
• Допустимо, что пользователь увидит запись своего друга не моментально, а с небольшой задержкой;
• Допустимо, что порядок записей не будет строго совпадать с хронологическим;
![Page 56: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/56.jpg)
56
Просмотр френдленты / #4
• 99% запросов приходятся на голову френдленты;
• У нас есть пользователи, которые в друзьях у миллионов пользователей;
![Page 57: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/57.jpg)
57
Просмотр френдленты / #5
Проектируем схему хранения данных
![Page 58: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/58.jpg)
58
Просмотр френдленты / #5
Избыточность?Каждому пользователю свой список записей
в его френдленте? Это же очень много – один триллион записей за год!
![Page 59: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/59.jpg)
59
Просмотр френдленты / #5
Храним для каждого пользователя ленту
идентификаторов постов!
![Page 60: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/60.jpg)
60
Просмотр френдленты / #5
Шардирование?Чего? По какому принципу?
![Page 61: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/61.jpg)
61
Просмотр френдленты / #5
Пользователь и его посты лежат рядом
Сделайте составной идентификатор поста, пусть в него входит идентификатор
пользователя
![Page 62: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/62.jpg)
62
Просмотр френдленты / #5
Достали список идентификаторов
постовКак собрать ленту?
![Page 63: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/63.jpg)
63
Просмотр френдленты / #5
Толстый клиент!
![Page 64: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/64.jpg)
64
Просмотр френдленты / #5
Если вы круты, то можете попробовать
Параллельные вычисления
![Page 65: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/65.jpg)
65
Просмотр френдленты / результаты
• Пользователи шардируются, рядом с пользователями лежат его посты и его френдлента;
• В френдленте пользователя уже записаны идентификаторы постов его друзей в порядке, близком к хронологическому;
• В идентификатор поста зашит ID пользователя, по которому мы быстро определяем шард и забираем с него текст поста;
• За текстом поста у нас будет ходить JS-машина, работающая на клиенте.
![Page 66: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/66.jpg)
66
Запись френдленты / #5
А как посты попадают в френдленту?
У нас ведь есть пользователи, которые в друзьях у миллионов?
![Page 67: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/67.jpg)
67
Запись френдленты / #5
Используем очереди!
![Page 68: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/68.jpg)
68
И ДАЛЕЕ ПО АНАЛОГИИАлгоритм универсален!
![Page 69: Про построение нагруженных систем](https://reader035.vdocuments.site/reader035/viewer/2022062419/557fbc3dd8b42a36118b4ca8/html5/thumbnails/69.jpg)
Вопросы[email protected]