54
Что такое Highload? Тайны высоконагруженных систем. Скандалы. Интриги. Расследования.

Что такое Highload? Секреты высокой нагрузки

Embed Size (px)

Citation preview

Page 1: Что такое Highload? Секреты высокой нагрузки

Что такое Highload?

Тайны высоконагруженных систем. Скандалы. Интриги. Расследования.

Page 2: Что такое Highload? Секреты высокой нагрузки

• Отвечаю за веб-разработку в НГС

• В вебе и программировании уже более 8 лет

• Люблю Golang и котиков :)

Кто я?

Олег Федосеев olegfedoseev

[email protected]

Page 3: Что такое Highload? Секреты высокой нагрузки

• НГС один из крупнейших сайтов за Уралом

• 18 миллионов хитов в день, более миллиона уникальных посетителей в день

• Тысячи запросов в секунду в приложению, в пиках до 10к rps

• Десятки тысяч запросов в секунду к базам

• Гигабайты трафика :)

Откуда я знаю про Highload?

Page 4: Что такое Highload? Секреты высокой нагрузки

Highload Определение

Page 5: Что такое Highload? Секреты высокой нагрузки

Ваш вариант?

“Highload это…

Page 6: Что такое Highload? Секреты высокой нагрузки

…когда сайт ломается”

“Highload это…

Page 7: Что такое Highload? Секреты высокой нагрузки

…когда больше 10 тысяч пользователей в день”

“Highload это…

Page 8: Что такое Highload? Секреты высокой нагрузки

“Highload это…

…когда больше 100 тысяч пользователей в день”

Page 9: Что такое Highload? Секреты высокой нагрузки

“Highload это…

…когда больше миллиона пользователей в час!”

Page 10: Что такое Highload? Секреты высокой нагрузки

На самом деле нет

Page 11: Что такое Highload? Секреты высокой нагрузки

Пользователи != Запросы

Page 12: Что такое Highload? Секреты высокой нагрузки

Запросы бывают разные YouTube != Лента.ру

А ещё их кэшируют :)

Page 13: Что такое Highload? Секреты высокой нагрузки

Highload это когда ресурсов одного сервера уже мало

Page 14: Что такое Highload? Секреты высокой нагрузки

Секреты высоконагруженных

систем

Page 15: Что такое Highload? Секреты высокой нагрузки

LAMP’овый пример

Page 16: Что такое Highload? Секреты высокой нагрузки

LoadBalancer

dns

nginx upstream

Frontend Backend

nginx upstream

mysql proxy

mysql proxy

Shar

d A

Shar

d B

SlaveMaster

proxy

Mem

cach

e / R

edis

Task

Queue

NoSQLCassandra / Riak

И что получим из него

Page 17: Что такое Highload? Секреты высокой нагрузки

LAMP - Linux, Apache, MySQL, PHP

Гуглить: LAMP, ubuntu, php, vps, apache server, mysql

VPS

Page 18: Что такое Highload? Секреты высокой нагрузки

LAMP - Linux, Apache, MySQL, PHP

Гуглить: LAMP, ubuntu, php, vds, apache server, mysql

VDS

Page 19: Что такое Highload? Секреты высокой нагрузки

LAMP - Linux, Apache, MySQL, PHP

Гуглить: LAMP, ubuntu, php, dedicated, apache server, mysql

dedicated

Page 20: Что такое Highload? Секреты высокой нагрузки

Выносим базу

Гуглить: n-tier arcitecture mysql configuration

Page 21: Что такое Highload? Секреты высокой нагрузки

nginx перед apache

Гуглить: nginx, libevent, libev nginx vs apache

Page 22: Что такое Highload? Секреты высокой нагрузки

А зачем нам apache?

Гуглить: php-fpm, fastcgi

Page 23: Что такое Highload? Секреты высокой нагрузки

А если у нас много видео?

Гуглить: http load balancer dns round-robin

?

Page 24: Что такое Highload? Секреты высокой нагрузки

Балансировка запросов

Гуглить: http load balancer dns round-robin

DNS1.1.1.1

2.2.2.2

Page 25: Что такое Highload? Секреты высокой нагрузки

Балансировка запросов

Гуглить: load balancer, Cisco ACE

Page 26: Что такое Highload? Секреты высокой нагрузки

Балансировка запросов

Гуглить: tcp load balancer, haproxy

Page 27: Что такое Highload? Секреты высокой нагрузки

Балансировка запросов

Гуглить: geoip, anycast, bgp

DNSexample.com

US → 1.1.1.1

EU → 2.2.2.2

ДЦ в США

ДЦ в Европе

Page 28: Что такое Highload? Секреты высокой нагрузки

Промежуточный итог

Page 29: Что такое Highload? Секреты высокой нагрузки

Масштабируем backend

Гуглить: nginx upstream, nginx fastcgi_pass nginx proxy_pass

Page 30: Что такое Highload? Секреты высокой нагрузки

Гуглить: Nginx proxy_cache, Nginx fastcgi_cache Varnish, Apache Traffic Server

• Самое простое поставить рядом второй сервер

• Меньше запросов к backend’у - меньше нагрузка

• Кэшируем всё!

Масштабируем backend

Page 31: Что такое Highload? Секреты высокой нагрузки

Гуглить: Nginx proxy_cache, Nginx fastcgi_cache Varnish, Apache Traffic Server

• Самое простое поставить рядом второй сервер

• Меньше запросов к backend’у - меньше нагрузка

• Кэшируем всё!

Масштабируем backend

Page 32: Что такое Highload? Секреты высокой нагрузки

Добавим кэша

Гуглить: Nginx proxy_cache, Nginx fastcgi_cache Varnish, Apache Traffic Server

Page 33: Что такое Highload? Секреты высокой нагрузки

Добавим кэша

Гуглить: memcache, redis, key-value store, crc32, libketama, consistent hashing, handlersocket

A-I J-T U-Z

Page 34: Что такое Highload? Секреты высокой нагрузки

Добавим кэша

Гуглить: twemproxy, mcrouter haproxy

A-I J-T U-Z

Page 35: Что такое Highload? Секреты высокой нагрузки

Кэширование

• Кэши не страшно потерять, по этому шардинг • Для лучшей отказоустойчивости используем специализированные прокси - twemproxy, mcrouter

• Помним про race-condition • Экспериментально определяем размер кэша • Обязательно мониторить hit/miss

Page 36: Что такое Highload? Секреты высокой нагрузки

proxy

Memcache / Redis

Что получилось

dns

LoadBalancer

nginx upstream

Frontend Backend

nginx upstream

Page 37: Что такое Highload? Секреты высокой нагрузки

LoadBalancer

dns

nginx upstream

Frontend Backend

nginx upstream

Slave

Master

proxy

Memcache / Redis

Репликация

Гуглить: mysql binlog, row-based/statement-based replication

Page 38: Что такое Highload? Секреты высокой нагрузки

LoadBalancer

dns

nginx upstream

Frontend Backend

nginx upstream

Slave

Master

proxy

Memcache / Redis

Репликация

Page 39: Что такое Highload? Секреты высокой нагрузки

LoadBalancer

dns

nginx upstream

Frontend Backend

nginx upstream

Slave

Master

proxy

Memcache / Redis

Репликация

Гуглить: haproxy, mysql-proxy, pgpool

Page 40: Что такое Highload? Секреты высокой нагрузки

Нюансы репликации (MySQL)

• Репликация может лагать • Нужно быть аккуратным с недетерминированными запросами (NOW(), RAND() и т.д.)

• В случае падения мастера - нужна ручная перестройка схемы

• Стоит регулярно смотреть в slowlog • Масштабирует только чтение

Page 41: Что такое Highload? Секреты высокой нагрузки

LoadBalancer

dns

nginx upstream

Frontend Backend

nginx upstream

Slave

proxy

Memcache / Redis

master-master репликация

Page 42: Что такое Highload? Секреты высокой нагрузки

LoadBalancer

dns

nginx upstream

Frontend Backend

nginx upstream

mysql proxy

mysql proxy

Shar

d A

Shar

d B

SlaveMaster

proxy

Memcache / Redis

Шардинг

Гуглить: mysql cluster, mysql fabric

Page 43: Что такое Highload? Секреты высокой нагрузки

• Очень важно выбрать правильный ключ • В случае с транзакциями боль • На сколько прост ввод/вывод шарда • Записи масштабируются, но требует много ресурсов • Ещё кучи нюансов :)

Шардинг

Но не забываем про NoSQL :)

Page 44: Что такое Highload? Секреты высокой нагрузки

Шардинг в MongoDB

Гуглить: mongodb, mongodb sharding

Page 45: Что такое Highload? Секреты высокой нагрузки

Cassandra

Гуглить: cassandra, google bigtable, hbase, amazon dynamo, riak

Page 46: Что такое Highload? Секреты высокой нагрузки

• Много хороших решений • Надо уметь готовить • Другая схема данных • Другой язык запросов • Другие приоритеты в CAP теореме

NoSQL

Page 47: Что такое Highload? Секреты высокой нагрузки

LoadBalancer

dns

nginx upstream

Frontend Backend

nginx upstream

mysql proxy

mysql proxy

Shar

d A

Shar

d B

SlaveMaster

proxy

Mem

cach

e / R

edis

NoSQLCassandra / Riak

Теперь с NoSQL

Page 48: Что такое Highload? Секреты высокой нагрузки

• Мастер-мастер даст отказоустойчивость • Шардинг даст пропорциональный прирост записи, но есть нюансы

• Не стоит забывать про “NoSQL” решения, есть очень хорошие базы данных

• Иногда полезно совмещать RDBMS и NoSQL решения

Масштабирование записи

Page 49: Что такое Highload? Секреты высокой нагрузки

LoadBalancer

dns

nginx upstream

Frontend Backend

nginx upstream

mysql proxy

mysql proxy

Shar

d A

Shar

d B

SlaveMaster

proxy

Mem

cach

e / R

edis

Task

Queue

NoSQLCassandra / Riak

Итоговая архитектура

Page 50: Что такое Highload? Секреты высокой нагрузки

Релиз новой версии кода

Гуглить: blue-green deployment continuous delivery

Page 51: Что такое Highload? Секреты высокой нагрузки

Мониторинг

Гуглить: zabbix, graphite, pinba, statsd etsy skyline, opentsdb, influxdb

• Графики должны быть на все изменяющиеся значения

• Даже если значение не изменяется, на него должен быть график (вдруг изменится)

• Как минимум следить за превышением пороговых значений

• В идеале отслеживание трендов и “умное” детектирование аномалий

Page 52: Что такое Highload? Секреты высокой нагрузки

Общие нюансы

Гуглить: fault-tolerance, failover, soa microservice arcitecture

• Всегда помните о проблеме больших чисел

• Помните о блокировках в разных частях системы

• Отказоустойчивость очень важна

• Загружать сервера на 100% опасно

• SOA и микросервисы

Page 53: Что такое Highload? Секреты высокой нагрузки

Секреты высоконагруженных систем• Отделяем мух от котлет для полноценной утилизации ресурсов и независимой масштабируемость

• Все сервисы масштабируются по разному, но подходы похожие

• Но помни про нюансы (лаги, консистентность и т.д.)

• Быстрый и автоматический failover залог здорового сна

• Использовать php+mysql для всех задач можно, но есть специализированные сервисы для многих задач

Page 54: Что такое Highload? Секреты высокой нагрузки

Олег Федосеев olegfedoseev

[email protected]

Вопросы?