http://techtalks.nsu.ru
Видеозапись: http://www.youtube.com/watch?v=6PDtlAzFRlE
11 ноября 2014. Что такое Highload? Секреты высокой нагрузки. (Олег Федосеев, НГС)
«Если вы интересуетесь веб-разработкой, то вы наверняка слышали слово "highload". Это модно, это интересно, все хотят это попробовать на себе. Но мало кто знает, что на самом деле значит "highload" или "высокие нагрузки" и что нужно знать, чтобы правильно "готовить" высоконагруженный проект. Мы поговорим о том, что же такое highload, узнаем, с какими проблемами может сталкнуться условный веб-проект при росте нагрузки и попробуем решить эти проблемы. Также мы обсудим, какие подходы и инструменты должен знать веб-разработчик, чтобы успешно справиться с любыми нагрузками.»
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
2. • Отвечаю за веб-разработку в НГС
• В вебе и программировании уже
более 8 лет
• Люблю Golang и котиков :)
Кто я?
Олег Федосеев
olegfedoseev
o.fedoseev@office.ngs.ru
3. • НГС один из крупнейших сайтов за
Уралом
• 18 миллионов хитов в день, более
миллиона уникальных посетителей в день
• Тысячи запросов в секунду в приложению,
в пиках до 10к rps
• Десятки тысяч запросов в секунду к базам
• Гигабайты трафика :)
Откуда я знаю про Highload?
30. Гуглить:
Nginx proxy_cache, Nginx fastcgi_cache
Varnish, Apache Traffic Server
• Самое простое поставить рядом второй сервер
• Меньше запросов к backend’у - меньше нагрузка
• Кэшируем всё!
Масштабируем backend
31. Гуглить:
Nginx proxy_cache, Nginx fastcgi_cache
Varnish, Apache Traffic Server
• Самое простое поставить рядом второй сервер
• Меньше запросов к backend’у - меньше нагрузка
• Кэшируем всё!
Масштабируем backend
35. Кэширование
• Кэши не страшно потерять, по этому шардинг
• Для лучшей отказоустойчивости используем
специализированные прокси - twemproxy, mcrouter
• Помним про race-condition
• Экспериментально определяем размер кэша
• Обязательно мониторить hit/miss
40. Нюансы репликации (MySQL)
• Репликация может лагать
• Нужно быть аккуратным с недетерминированными
запросами (NOW(), RAND() и т.д.)
• В случае падения мастера - нужна ручная
перестройка схемы
• Стоит регулярно смотреть в slowlog
• Масштабирует только чтение
43. • Очень важно выбрать правильный ключ
• В случае с транзакциями боль
• На сколько прост ввод/вывод шарда
• Записи масштабируются, но требует много ресурсов
• Ещё кучи нюансов :)
Шардинг
Но не забываем про NoSQL :)
48. • Мастер-мастер даст отказоустойчивость
• Шардинг даст пропорциональный прирост записи, но
есть нюансы
• Не стоит забывать про “NoSQL” решения, есть очень
хорошие базы данных
• Иногда полезно совмещать RDBMS и NoSQL
решения
Масштабирование записи
50. Релиз новой версии кода
Гуглить:
blue-green deployment
continuous delivery
51. Мониторинг
Гуглить:
zabbix, graphite, pinba, statsd
etsy skyline, opentsdb, influxdb
• Графики должны быть на все изменяющиеся
значения
• Даже если значение не изменяется, на него
должен быть график (вдруг изменится)
• Как минимум следить за превышением пороговых
значений
• В идеале отслеживание трендов и “умное”
детектирование аномалий
52. Общие нюансы
Гуглить:
fault-tolerance, failover, soa
microservice arcitecture
• Всегда помните о проблеме больших чисел
• Помните о блокировках в разных частях системы
• Отказоустойчивость очень важна
• Загружать сервера на 100% опасно
• SOA и микросервисы
53. Секреты высоконагруженных систем
• Отделяем мух от котлет для полноценной утилизации
ресурсов и независимой масштабируемость
• Все сервисы масштабируются по разному, но
подходы похожие
• Но помни про нюансы (лаги, консистентность и т.д.)
• Быстрый и автоматический failover залог здорового
сна
• Использовать php+mysql для всех задач можно, но
есть специализированные сервисы для многих задач