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

Содержание

Слайд 2

HighLoad. Лекция №3 Масштабируемость (англ. scalability) – способность системы справляться с

HighLoad. Лекция №3

Масштабируемость (англ. scalability) – способность системы справляться с увеличением

рабочей нагрузки, при добавлении ресурсов, как правило аппаратных. Количественно можно оценить как отношение полученного роста производительности к увеличению кол-ва используемых ресурсов. Если отношение близко к единице то масштабирование называют линейным.
Слайд 3

HighLoad. Лекция №3 Распределение нагрузки на множество серверов бесполезно без возможности

HighLoad. Лекция №3

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

нагрузку в нужных пропорциях (балансировать).
Если из-за дисбаланса вся нагрузка попадает на один сервер то никакой масштабируемости быть не может.

Балансировка нагрузки (Load balancing)

Слайд 4

HighLoad. Лекция №3 Доставить процессоров, памяти, дисков Купить более мощный сервер

HighLoad. Лекция №3

Доставить процессоров, памяти, дисков
Купить более мощный сервер
Купить еще более

мощный сервер (очень дорого)
Соотношение роста производительности на вложенные деньги стремительно падает с выходом за пределы массовых конфигураций
Наступит момент когда все равно не хватит

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

Слайд 5

HighLoad. Лекция №3 Разнести нагрузку на несколько серверов Возможно там где

HighLoad. Лекция №3

Разнести нагрузку на несколько серверов
Возможно там где нет/мало общих

ресурсов
Часто требует изменений в системе
Возрастает сложность поддержки
На больших масштабах дает снижение TCO*
*TCO – Total Cost of Ownership (совокупная стоимость владения)

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

Слайд 6

HighLoad. Лекция №3 Балансировка нагрузки

HighLoad. Лекция №3

Балансировка нагрузки

Слайд 7

HighLoad. Лекция №3 Алгоритмы балансировки

HighLoad. Лекция №3

Алгоритмы балансировки

Слайд 8

HighLoad. Лекция №3 Бекенды получают запросы по очереди в одном и

HighLoad. Лекция №3

Бекенды получают запросы по очереди в одном и том

же порядке (циклическое расписание).
Веса: A – 10 B – 10 C – 10 “ABC” – расписание запросов

Round-Robin

Слайд 9

HighLoad. Лекция №3 Бекенды получают запросы пропорционально весам согласно расписанию. Веса:

HighLoad. Лекция №3

Бекенды получают запросы пропорционально весам согласно расписанию.
Веса: A – 50% B

– 20% C – 10% “AAAAABBC” – расписание с пиками
“ABAABAAC” – расписание равномерное

Weighted Round-Robin

Слайд 10

HighLoad. Лекция №3 Достоинства: Равномерный RPS на бекендах Подходит: Запросы одинаковой

HighLoad. Лекция №3

Достоинства:
Равномерный RPS на бекендах
Подходит:
Запросы одинаковой стоимости
Запросы небольшой стоимости

Weighted Round-Robin

Слайд 11

HighLoad. Лекция №3 Формула: N (номер сервера) = Hash(IP) % M

HighLoad. Лекция №3

Формула:
N (номер сервера) = Hash(IP) % M (количество бекендов)
Возможные

варианты:
HASH (src ip) HASH (src ip + src port) HASH (src ip + src port + dst ip + dst port) *
* Можно предсоздать много бакетов и балансировать RR

Hash

Слайд 12

HighLoad. Лекция №3 Достоинства: Отсутствие состояния на балансировщике Запросы одного пользователя

HighLoad. Лекция №3

Достоинства:
Отсутствие состояния на балансировщике
Запросы одного пользователя попадают на один

бекенд
Недостатки:
Дисбаланс
Перераспределение пользователей при смене

Hash

Слайд 13

HighLoad. Лекция №3 При изменении состава бекендов мигрирует минимально-возможное количество пользователей. Пример: http://nginx.org/en/docs/http/ngx_http_upstream_module.html#hash Consistent Hash

HighLoad. Лекция №3

При изменении состава бекендов мигрирует минимально-возможное количество пользователей.
Пример:
http://nginx.org/en/docs/http/ngx_http_upstream_module.html#hash

Consistent

Hash
Слайд 14

HighLoad. Лекция №3 DNS Routing L4 (IP) L7 (HTTP) Уровни балансировки

HighLoad. Лекция №3

DNS
Routing
L4 (IP)
L7 (HTTP)

Уровни балансировки

Слайд 15

HighLoad. Лекция №3 GSLB – Global Scale Load Balancing LSLB –

HighLoad. Лекция №3

GSLB – Global Scale Load Balancing
LSLB – Local Scale

Load Balancing

Классификация методов

Слайд 16

HighLoad. Лекция №3 DNS сервер отвечает несколькими адресами При следующем ответе

HighLoad. Лекция №3

DNS сервер отвечает несколькими адресами
При следующем ответе сдвигает список

на 1 позицию
Клиенты обычно берут первый адрес из списка
Windows Vista когда появилась брала «ближайший»
Короткий TTL чтобы отключать упавшие сервера

Round-Robin DNS

Слайд 17

HighLoad. Лекция №3 Достоинства: Простота и дешевизна Минимальная нагрузка на DNS

HighLoad. Лекция №3

Достоинства:
Простота и дешевизна
Минимальная нагрузка на DNS сервер
Отсутствие одной точки

входа
Небольшое добавление отказоустойчивости

Round-Robin DNS

Слайд 18

HighLoad. Лекция №3 Недостатки: Ограниченное кол-во серверов в UDP-ответе Игнорирование TTL

HighLoad. Лекция №3

Недостатки:
Ограниченное кол-во серверов в UDP-ответе
Игнорирование TTL на кеширующих серверах
Долгое

отключение упавшего сервера
Сильный дисбаланс между серверами
Windows Vista берет «ближайший» адрес а не первый
Невозможен взвешенный Round-Robin

Round-Robin DNS

Слайд 19

HighLoad. Лекция №3 mail.ru $ host mail.ru mail.ru has address 94.100.191.209

HighLoad. Лекция №3

mail.ru

$ host mail.ru
mail.ru has address 94.100.191.209
mail.ru has address 94.100.191.210
mail.ru

has address 94.100.191.241
mail.ru has address 94.100.191.242
mail.ru has address 94.100.191.243
mail.ru has address 94.100.191.244
mail.ru has address 94.100.191.245
mail.ru has address 94.100.191.246
mail.ru has address 94.100.191.247
mail.ru has address 94.100.191.248
mail.ru has address 94.100.191.249
mail.ru has address 94.100.191.250
mail.ru has address 94.100.191.201
mail.ru has address 94.100.191.202
mail.ru has address 94.100.191.203
mail.ru has address 94.100.191.204
mail.ru has address 94.100.191.205
mail.ru has address 94.100.191.206
mail.ru has address 94.100.191.207
mail.ru has address 94.100.191.208

$ host mail.ru
mail.ru has address 94.100.191.250
mail.ru has address 94.100.191.201
mail.ru has address 94.100.191.202
mail.ru has address 94.100.191.203
mail.ru has address 94.100.191.204
mail.ru has address 94.100.191.205
mail.ru has address 94.100.191.206
mail.ru has address 94.100.191.207
mail.ru has address 94.100.191.208
mail.ru has address 94.100.191.209
mail.ru has address 94.100.191.210
mail.ru has address 94.100.191.241
mail.ru has address 94.100.191.242
mail.ru has address 94.100.191.243
mail.ru has address 94.100.191.244
mail.ru has address 94.100.191.245
mail.ru has address 94.100.191.246
mail.ru has address 94.100.191.247
mail.ru has address 94.100.191.248
mail.ru has address 94.100.191.249

Слайд 20

HighLoad. Лекция №3 vk.com $ host vk.com vk.com has address 87.240.131.100

HighLoad. Лекция №3

vk.com

$ host vk.com
vk.com has address 87.240.131.100
vk.com has address 87.240.131.101
vk.com

has address 87.240.131.102
vk.com has address 87.240.131.103
vk.com has address 87.240.131.104
vk.com has address 87.240.131.117
vk.com has address 87.240.131.118
vk.com has address 87.240.131.119
vk.com has address 87.240.131.120
vk.com has address 87.240.143.241
vk.com has address 87.240.143.242
vk.com has address 87.240.143.243
vk.com has address 87.240.143.244
vk.com has address 87.240.143.245
vk.com has address 87.240.143.246
vk.com has address 87.240.143.247
vk.com has address 87.240.143.248
vk.com has address 93.186.224.244
vk.com has address 93.186.224.245
vk.com has address 93.186.224.246
vk.com has address 87.240.131.97
vk.com has address 87.240.131.98
vk.com has address 87.240.131.99

$ host vk.com
vk.com has address 87.240.131.101
vk.com has address 87.240.131.102
vk.com has address 87.240.131.103
vk.com has address 87.240.131.104
vk.com has address 87.240.131.117
vk.com has address 87.240.131.118
vk.com has address 87.240.131.119
vk.com has address 87.240.131.120
vk.com has address 87.240.143.241
vk.com has address 87.240.143.242
vk.com has address 87.240.143.243
vk.com has address 87.240.143.244
vk.com has address 87.240.143.245
vk.com has address 87.240.143.246
vk.com has address 87.240.143.247
vk.com has address 87.240.143.248
vk.com has address 93.186.224.244
vk.com has address 93.186.224.245
vk.com has address 93.186.224.246
vk.com has address 87.240.131.97
vk.com has address 87.240.131.98
vk.com has address 87.240.131.99
vk.com has address 87.240.131.100

Слайд 21

HighLoad. Лекция №3 www.yandex.ru $ host www.yandex.ru www.yandex.ru has address 87.250.250.203

HighLoad. Лекция №3

www.yandex.ru

$ host www.yandex.ru
www.yandex.ru has address 87.250.250.203
www.yandex.ru has address 87.250.251.3
www.yandex.ru

has address 93.158.134.3
www.yandex.ru has address 93.158.134.203
www.yandex.ru has address 213.180.193.3
www.yandex.ru has address 213.180.204.3
www.yandex.ru has address 77.88.21.3
www.yandex.ru has address 87.250.250.3

$ host www.yandex.ru
www.yandex.ru has address 87.250.251.3
www.yandex.ru has address 93.158.134.3
www.yandex.ru has address 93.158.134.203
www.yandex.ru has address 213.180.193.3
www.yandex.ru has address 213.180.204.3
www.yandex.ru has address 77.88.21.3
www.yandex.ru has address 87.250.250.3
www.yandex.ru has address 87.250.250.203

Слайд 22

HighLoad. Лекция №3 google.com $ host google.com google.com has address 173.194.32.227

HighLoad. Лекция №3

google.com

$ host google.com
google.com has address 173.194.32.227
google.com has address 173.194.32.228
google.com

has address 173.194.32.229
google.com has address 173.194.32.230
google.com has address 173.194.32.231
google.com has address 173.194.32.232
google.com has address 173.194.32.233
google.com has address 173.194.32.238
google.com has address 173.194.32.224
google.com has address 173.194.32.225
google.com has address 173.194.32.226

$ host google.com
google.com has address 173.194.32.228
google.com has address 173.194.32.229
google.com has address 173.194.32.230
google.com has address 173.194.32.231
google.com has address 173.194.32.232
google.com has address 173.194.32.233
google.com has address 173.194.32.238
google.com has address 173.194.32.224
google.com has address 173.194.32.225
google.com has address 173.194.32.226
google.com has address 173.194.32.227

Слайд 23

HighLoad. Лекция №3 Выдает один случайный адрес в ответе Взвешенный Round-Robin Xixi DNS

HighLoad. Лекция №3

Выдает один случайный адрес в ответе
Взвешенный Round-Robin

Xixi DNS

Слайд 24

HighLoad. Лекция №3 Сервер выдает адрес ближайшего к пользователю ДЦ Сервер

HighLoad. Лекция №3

Сервер выдает адрес ближайшего к пользователю ДЦ
Сервер видит адрес

Resolver а не конечного клиента
Возможные пути решения проблемы:
DNS сервер 8.8.8.8 от Google
Google предлагает добавить в DNS-запрос IP клиента

Geo-based DNS

Слайд 25

HighLoad. Лекция №3 Сервер выдает адрес ближайшего к пользователю ДЦ c

HighLoad. Лекция №3

Сервер выдает адрес ближайшего к пользователю ДЦ c с

минимальным RTT
Сервер видит адрес Resolver а не конечного клиента
Пример: AWS Route 53

Latency-based DNS

Слайд 26

HighLoad. Лекция №3 BGP Anycast

HighLoad. Лекция №3

BGP Anycast

Слайд 27

HighLoad. Лекция №3 Недостатки: Сложность конфигурации и поддержки Поломка соединений при

HighLoad. Лекция №3

Недостатки:
Сложность конфигурации и поддержки
Поломка соединений при перескоке трафика между

ДЦ
Необходима своя AS и сеть /24*

BGP Anycast

Слайд 28

HighLoad. Лекция №3 Cisco CSS (L4) Cisco ACE (L7) F5 BIG-IP

HighLoad. Лекция №3

Cisco CSS (L4)
Cisco ACE (L7)
F5 BIG-IP
Citrix NetScaler
Radware ADC

Hardware Load

Balancers
Слайд 29

HighLoad. Лекция №3 LVS (Linux Virtual Server) Nginx HAProxy ATS Software Load Balancers

HighLoad. Лекция №3

LVS (Linux Virtual Server)
Nginx
HAProxy
ATS

Software Load Balancers

Слайд 30

HighLoad. Лекция №3 Virtual Server via NAT Virtual Server via IP

HighLoad. Лекция №3

Virtual Server via NAT
Virtual Server via IP Tunneling
Virtual Server

via Direct Routing

Layer 3/4 Load Balancing

Слайд 31

HighLoad. Лекция №3 Layer 4: Virtual Server via NAT

HighLoad. Лекция №3

Layer 4: Virtual Server via NAT

Слайд 32

HighLoad. Лекция №3 Плюсы: Сервера могут быть в разных физических сетях

HighLoad. Лекция №3

Плюсы:
Сервера могут быть в разных физических сетях
Минусы:
Большая нагрузка на

процессор
Весь обратный трафик идет через балансер

Layer 4: Virtual Server via NAT

Слайд 33

HighLoad. Лекция №3 Layer 4: Virtual Server via IP Tunneling IP Encapsulation

HighLoad. Лекция №3

Layer 4: Virtual Server via IP Tunneling

IP Encapsulation

Слайд 34

HighLoad. Лекция №3 Плюсы: Сервера могут быть в разных физических сетях

HighLoad. Лекция №3

Плюсы:
Сервера могут быть в разных физических сетях
Высокая производительность
Минусы:
Дополнительная нагрузка

на процессор
Сложная настройка инкапсуляции

Layer 4: Virtual Server via IP Tunneling

Слайд 35

HighLoad. Лекция №3 Layer 3: Virtual Server via Direct Routing Dst MAC Address Change

HighLoad. Лекция №3

Layer 3: Virtual Server via Direct Routing

Dst MAC Address

Change
Слайд 36

HighLoad. Лекция №3 Плюсы: Высокая производительность Минусы: Сервера должны быть в

HighLoad. Лекция №3

Плюсы:
Высокая производительность
Минусы:
Сервера должны быть в одной физической сети

Layer 3:

Virtual Server via Direct Routing
Слайд 37

HighLoad. Лекция №3 Программный монитор доступности нод Сигнализирует балансеру при падении/подъемы

HighLoad. Лекция №3

Программный монитор доступности нод
Сигнализирует балансеру при падении/подъемы ноды
Умеет VRRP/CARP

резервирование нод между собой

keepalived

Слайд 38

HighLoad. Лекция №3 Отвечает на PING Принимает соединение на порт Отвечает

HighLoad. Лекция №3

Отвечает на PING
Принимает соединение на порт
Отвечает на простой HEAD

или GET запрос
Отвечает на специальный запрос (cgi-bin/ping)

Проверка работоспособности серверов

Слайд 39

HighLoad. Лекция №3 То же самое что для для балансинга между

HighLoad. Лекция №3
То же самое что для для балансинга между ДЦ
Требует

настройки на сетевом оборудовании
Требует специального размещения оборудования

BGP/RIP балансировка внутри ДЦ

Слайд 40

HighLoad. Лекция №3 HTTP Reverse Proxy: TCP multiplexing Persistence / Sticky

HighLoad. Лекция №3

HTTP Reverse Proxy:
TCP multiplexing
Persistence / Sticky sessions / Client

affinity
Кеширование
SSL Termination
Gzip
Гибкие настройки для учета бизнес-логики

Layer 7 Load Balancing

Слайд 41

HighLoad. Лекция №3 Плюсы: Высокая гибкость конфигурации Надежное резервирование Равномерное распределение

HighLoad. Лекция №3

Плюсы:
Высокая гибкость конфигурации
Надежное резервирование
Равномерное распределение нагрузки
Решение проблемы медленных клиентов
Минусы:
Относительно

низкая производительность
Необходима модификация ПО для приема X-Real-IP

Layer 7 Load Balancing

Слайд 42

HighLoad. Лекция №3 (Оптимизационная задача) Проблемы: Небольшой timeout: обрежем долгие живые

HighLoad. Лекция №3

(Оптимизационная задача)
Проблемы:
Небольшой timeout: обрежем долгие живые запросы
Большой timeout: затормозим

обычные запросы
Идеи:
Использование квантилей для выбора значения
Разные настройки для разных типов запросов

Выбор таймаута на запрос к upstream

Слайд 43

HighLoad. Лекция №3 Алгоритм выбора другого (следующего) бекенда в случае отказа

HighLoad. Лекция №3

Алгоритм выбора другого (следующего) бекенда в случае отказа текущего

в процессе обработки запроса
На примере nginx:
proxy_next_upstream <список ситуаций>
proxy_next_upstream_timeout
proxy_next_upstream_tries

Политика failover

Слайд 44

HighLoad. Лекция №3 Варианты: DNS L4 L7 на отдельных серверах L7

HighLoad. Лекция №3

Варианты:
DNS
L4
L7 на отдельных серверах
L7 локальный на клиенте (aka sidecar

proxy)

Балансировка внутри проекта

Слайд 45

HighLoad. Лекция №3 Session cache – работает в пределах одного IP

HighLoad. Лекция №3

Session cache – работает в пределах одного IP
Session tickets

– поддерживают не все браузеры
Perfect Forward Secrecy (PFS)
Application Transport Security (ATS) в iOS 9
Let’s Encrypt – бесплатные SSL-сертификаты

SSL Termination

Слайд 46

HighLoad. Лекция №3 Почти также дешев как DNS Увеличивает задержку на

HighLoad. Лекция №3

Почти также дешев как DNS
Увеличивает задержку на каждый запрос
Имеет

единую точку отказа
Хорош для выдачи ближайшего к пользователю сервера

Redirect Based Load Balancing

Слайд 47

HighLoad. Лекция №3 Выдаем в приложении прямые ссылки на сервера Обеспечиваем

HighLoad. Лекция №3

Выдаем в приложении прямые ссылки на сервера
Обеспечиваем балансировку и

отказоустойчивость
При хорошей реализации одно из самых эффективных решений
Минусы:
Неудобно программировать
Раскрываем внутреннее устройство проекта

Application Based Load Balancing

Слайд 48

HighLoad. Лекция №3 Выбор сервера в коде страницы в браузере Легко

HighLoad. Лекция №3

Выбор сервера в коде страницы в браузере
Легко обеспечить отказоустойчивость

запросив другой сервер
Минусы:
Плохо совместим с AJAX из-за crossdomain policy

Client Based Load Balancing

Слайд 49

HighLoad. Лекция №3 Уносим форум на отдельный домен Уносим статику на

HighLoad. Лекция №3

Уносим форум на отдельный домен
Уносим статику на отдельный домен
И

так далее…
Минусы:
Сложно администрировать
Легко попасть на неделимый кусок сайта

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

Слайд 50

HighLoad. Лекция №3 Домашнее задание №2 Собрать Load Balancer в облачном

HighLoad. Лекция №3

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

Собрать Load Balancer в облачном сервисе на

выбор (AWS, DigitalOcean, Windows Azure, Google Cloud etc)
Распределить нагрузку на несколько серверов (L4: NAT, tunneling, L7: nginx, Haproxy)*
Продемонстрировать распределение нагрузки (системные и пользовательские метрики)
Продемонстрировать срабатывание механизмов отказоустойчивости к падению одного сервера