Про построение нагруженных систем

69
Высоконагруженные веб- системы. Коротко о главном. Роман Ивлиев [email protected]

description

Рассказывал в ФизТехе

Transcript of Про построение нагруженных систем

Page 1: Про построение нагруженных систем

Высоконагруженные веб-системы. Коротко о главном.

Роман Ивлиев[email protected]

Page 2: Про построение нагруженных систем

2

Page 3: Про построение нагруженных систем

3

СОБИРАЕМСЯ В ПОХОД

Page 4: Про построение нагруженных систем

4

Функциональное разделение

Page 5: Про построение нагруженных систем

5

Сервисно-ориентированная архитектура

Page 6: Про построение нагруженных систем

6

Вертикальное масштабирование

Page 7: Про построение нагруженных систем

7

Горизонтальное масштабирование

Page 8: Про построение нагруженных систем

8

Отложенные вычисления

Page 9: Про построение нагруженных систем

9

Асинхронная обработка

Page 10: Про построение нагруженных систем

10

Использование толстого клиента

Page 11: Про построение нагруженных систем

11

Кеширование

Page 12: Про построение нагруженных систем

12

Шардинг

Page 13: Про построение нагруженных систем

13

Виртуальные шарды

Page 14: Про построение нагруженных систем

14

Центральный диспетчер

Page 15: Про построение нагруженных систем

15

Репликация

Page 16: Про построение нагруженных систем

16

Партиционирование

Page 17: Про построение нагруженных систем

17

Денормализация

Page 18: Про построение нагруженных систем

18

Введение избыточности

Page 19: Про построение нагруженных систем

19

Параллельное выполнение

Page 20: Про построение нагруженных систем

20

АЛГОРИТМ ПРОЕКТИРОВАНИЯС какой стороны открывать бочку

Page 21: Про построение нагруженных систем

21

ШАГ ПЕРВЫЙ. КОНЦЕПЦИЯ

Page 22: Про построение нагруженных систем

22

ШАГ ВТОРОЙ. КАЛЬКУЛЯЦИЯ

Page 23: Про построение нагруженных систем

23

АЛГОРИТМ, ШАГ ТРЕТИЙОпределить допустимую деградацию функций системы

Page 24: Про построение нагруженных систем

24

АЛГОРИТМ, ШАГ ЧЕТВЕРТЫЙ

Построим схему движения данных и примем решение, какие из особенностей проектируемой системы мы будем использовать

Page 25: Про построение нагруженных систем

25

АЛГОРИТМ, ШАГ ПЯТЫЙПроектируем схему хранения данных

Page 26: Про построение нагруженных систем

26

АЛГОРИТМ, ШАГ ШЕСТОЙЛомаем систему и смотрим, что у нас получится

Page 27: Про построение нагруженных систем

Примеры

Page 28: Про построение нагруженных систем

28

ПРОФИЛИ НА САЙТЕ ЗНАКОМСТВСпроектируем систему хранения пользователей на сайте знакомств

Page 29: Про построение нагруженных систем

29

Сайт знакомств, профили / #1

1. Пользователь заполняет анкету;2. Получает логин пароль для доступа к

своему личному кабинету;3. Пользователи могут смотреть профили

друг друга;

Page 30: Про построение нагруженных систем

30

Сайт знакомств, профили / #2

1. Пользователей 200 миллионов;2. Каждая анкета занимает 10 килобайт, то

есть всего 2 000 гигабайт;3. Хитов в день 5 миллиардов;

Page 31: Про построение нагруженных систем

31

Сайт знакомств, профили / #3

1. Деградация недопустима;

Page 32: Про построение нагруженных систем

32

Сайт знакомств, профили / #4

1. Данные часто читаются, но редко меняются;

2. Все анкеты примерно одного размера;3. У анкеты есть уникальный идентификатор;4. Нет ярко выраженных лидеров;

Page 33: Про построение нагруженных систем

33

Сайт знакомств, профили / #5

Проектируем схему хранения данных

Page 34: Про построение нагруженных систем

34

Сайт знакомств, профили / #5

Репликация?Вообще 140к чтений в секунду

Page 35: Про построение нагруженных систем

35

Сайт знакомств, профили / #5

Шардирование?По какому ключу? Диспетчер?

Page 36: Про построение нагруженных систем

36

Сайт знакомств, профили / #6

Виртуальные шарды

Page 37: Про построение нагруженных систем

37

Сайт знакомств, профили / #6

Сгорает диск?

Page 38: Про построение нагруженных систем

38

Сайт знакомств, пользователи / #6

Репликация

Page 39: Про построение нагруженных систем

39

Сайт знакомств, профили / результат

• Разбиваем весь массив пользователей на виртуальные шарды;

• Маппим виртуальные шарды на реальные шарды;

• Внутри каждого шарда реплицируем информацию для отказоустойчивости

Page 40: Про построение нагруженных систем

40

НОВОСТНОЙ САЙТБольшая и длинная лента новостей крупного СМИ

Page 41: Про построение нагруженных систем

41

Новости / #1

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

Page 42: Про построение нагруженных систем

42

Новости / #2

• Каждая новость примерно 10 килобайт;• Мы вечно храним архив с даты основания

СМИ – 2000 год;• В день публикуется около 10 тысяч различных

региональных и федеральных новостей;• Итого в год 3 миллиона 500 тысяч новостей, в

год 35 гигабайт, за 20 лет – 700 гигабайт; • Это крупнейшее СМИ, посещаемость – 10

миллионов человек в сутки;

Page 43: Про построение нагруженных систем

43

Новости / #3

• Деградация недопустима;

Page 44: Про построение нагруженных систем

44

Новости / #4

• Количество чтений на несколько порядков превышает количество записей;

• 99% запросов касаются последнего дня;• 99,99% запросов касаются последней

недели.

Page 45: Про построение нагруженных систем

45

Новости / #5

Проектируем схему хранения данных

Page 46: Про построение нагруженных систем

46

Новости / #5

ПартиционированиеПо какому принципу?

Page 47: Про построение нагруженных систем

47

Новости / #5

Как переносить данные из горячей БД в архив?

Page 48: Про построение нагруженных систем

48

Новости / #5

Не надо ничего переносить!

Вводим избыточность!

Page 49: Про построение нагруженных систем

49

Новости / #5

Очень много запросов к горячим новостям!

Что делать?

Page 50: Про построение нагруженных систем

50

Новости / #5

Кеширование!

Page 51: Про построение нагруженных систем

51

Новости / результат

• Кеширование для горячих новостей;• Партиционирование новостей по дате –

последние новости в быстрой таблице;• Избыточное хранение новостей – новость

пишется сразу и в горячую таблицу и в архивную, горячая раз в какое-то время чистится;

Page 52: Про построение нагруженных систем

52

ПРОСМОТР ФРЕНДЛЕНТЫПросмотр френдлента в блогах

Page 53: Про построение нагруженных систем

53

Просмотр френдленты / #1

• У пользователя может быть сколько угодно друзей;

• Френдленту храним бесконечно долго;

Page 54: Про построение нагруженных систем

54

Просмотр френдленты / #2

• В среднем у пользователя 100 друзей;• Каждый пользователь в среднем пишет 3

поста в день;• Каждый пост занимаем около 1 килобайта;• Пользователей – 10 миллионов в сутки, но

каждый пользователь делает 100 хитов. Итого – миллиард запросов к френдленте в сутки;

• В сутки генерируется 30 миллионов постов, 10 миллиардов записей в год;

Page 55: Про построение нагруженных систем

55

Просмотр френдленты / #3

• Допустимо, что пользователь увидит запись своего друга не моментально, а с небольшой задержкой;

• Допустимо, что порядок записей не будет строго совпадать с хронологическим;

Page 56: Про построение нагруженных систем

56

Просмотр френдленты / #4

• 99% запросов приходятся на голову френдленты;

• У нас есть пользователи, которые в друзьях у миллионов пользователей;

Page 57: Про построение нагруженных систем

57

Просмотр френдленты / #5

Проектируем схему хранения данных

Page 58: Про построение нагруженных систем

58

Просмотр френдленты / #5

Избыточность?Каждому пользователю свой список записей

в его френдленте? Это же очень много – один триллион записей за год!

Page 59: Про построение нагруженных систем

59

Просмотр френдленты / #5

Храним для каждого пользователя ленту

идентификаторов постов!

Page 60: Про построение нагруженных систем

60

Просмотр френдленты / #5

Шардирование?Чего? По какому принципу?

Page 61: Про построение нагруженных систем

61

Просмотр френдленты / #5

Пользователь и его посты лежат рядом

Сделайте составной идентификатор поста, пусть в него входит идентификатор

пользователя

Page 62: Про построение нагруженных систем

62

Просмотр френдленты / #5

Достали список идентификаторов

постовКак собрать ленту?

Page 63: Про построение нагруженных систем

63

Просмотр френдленты / #5

Толстый клиент!

Page 64: Про построение нагруженных систем

64

Просмотр френдленты / #5

Если вы круты, то можете попробовать

Параллельные вычисления

Page 65: Про построение нагруженных систем

65

Просмотр френдленты / результаты

• Пользователи шардируются, рядом с пользователями лежат его посты и его френдлента;

• В френдленте пользователя уже записаны идентификаторы постов его друзей в порядке, близком к хронологическому;

• В идентификатор поста зашит ID пользователя, по которому мы быстро определяем шард и забираем с него текст поста;

• За текстом поста у нас будет ходить JS-машина, работающая на клиенте.

Page 66: Про построение нагруженных систем

66

Запись френдленты / #5

А как посты попадают в френдленту?

У нас ведь есть пользователи, которые в друзьях у миллионов?

Page 67: Про построение нагруженных систем

67

Запись френдленты / #5

Используем очереди!

Page 68: Про построение нагруженных систем

68

И ДАЛЕЕ ПО АНАЛОГИИАлгоритм универсален!

Page 69: Про построение нагруженных систем

Вопросы[email protected]