Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Что такое highload?

Что такое highload?

Олег Федосеев (НГС) рассказывает про высоконагруженные сайты.

«Если вы интересуетесь веб-разработкой, то вы наверняка слышали слово "highload". Это модно, это интересно, все хотят это попробовать на себе. Но мало кто знает, что на самом деле значит "highload" или "высокие нагрузки" и что нужно знать, чтобы правильно "готовить" высоконагруженный проект.

Мы поговорим о том, что же такое highload, узнаем, с какими проблемами может столкнуться условный веб-проект при росте нагрузки, и попробуем решить эти проблемы. Также мы обсудим, какие подходы и инструменты должен знать веб-разработчик, чтобы успешно справиться с любыми нагрузками»

Подробности: http://techtalks.nsu.ru

Tech Talks @NSU

November 11, 2014
Tweet

More Decks by Tech Talks @NSU

Other Decks in Education

Transcript

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

    программировании уже более 8 лет • Люблю Golang и котиков :) Кто я? Олег Федосеев olegfedoseev o.fedoseev@office.ngs.ru
  2. • НГС один из крупнейших сайтов за Уралом • 18

    миллионов хитов в день, более миллиона уникальных посетителей в день • Тысячи запросов в секунду в приложению, в пиках до 10к rps • Десятки тысяч запросов в секунду к базам • Гигабайты трафика :) Откуда я знаю про Highload?
  3. Load Balancer dns nginx upstream Frontend Backend nginx upstream mysql

    proxy mysql proxy Shard A Shard B Slave Master proxy Memcache / Redis Task Queue NoSQL Cassandra / Riak И что получим из него
  4. Гуглить: Nginx proxy_cache, Nginx fastcgi_cache Varnish, Apache Traffic Server •

    Самое простое поставить рядом второй сервер • Меньше запросов к backend’у - меньше нагрузка • Кэшируем всё! Масштабируем backend
  5. Гуглить: Nginx proxy_cache, Nginx fastcgi_cache Varnish, Apache Traffic Server •

    Самое простое поставить рядом второй сервер • Меньше запросов к backend’у - меньше нагрузка • Кэшируем всё! Масштабируем backend
  6. Кэширование • Кэши не страшно потерять, по этому шардинг •

    Для лучшей отказоустойчивости используем специализированные прокси - twemproxy, mcrouter • Помним про race-condition • Экспериментально определяем размер кэша • Обязательно мониторить hit/miss
  7. Load Balancer dns nginx upstream Frontend Backend nginx upstream Slave

    Master proxy Memcache / Redis Репликация Гуглить: mysql binlog, row-based/statement-based replication
  8. Load Balancer dns nginx upstream Frontend Backend nginx upstream Slave

    Master proxy Memcache / Redis Репликация
  9. Load Balancer dns nginx upstream Frontend Backend nginx upstream Slave

    Master proxy Memcache / Redis Репликация Гуглить: haproxy, mysql-proxy, pgpool
  10. Нюансы репликации (MySQL) • Репликация может лагать • Нужно быть

    аккуратным с недетерминированными запросами (NOW(), RAND() и т.д.) • В случае падения мастера - нужна ручная перестройка схемы • Стоит регулярно смотреть в slowlog • Масштабирует только чтение
  11. Load Balancer dns nginx upstream Frontend Backend nginx upstream Slave

    proxy Memcache / Redis master-master репликация
  12. Load Balancer dns nginx upstream Frontend Backend nginx upstream mysql

    proxy mysql proxy Shard A Shard B Slave Master proxy Memcache / Redis Шардинг Гуглить: mysql cluster, mysql fabric
  13. • Очень важно выбрать правильный ключ • В случае с

    транзакциями боль • На сколько прост ввод/вывод шарда • Записи масштабируются, но требует много ресурсов • Ещё кучи нюансов :) Шардинг Но не забываем про NoSQL :)
  14. • Много хороших решений • Надо уметь готовить • Другая

    схема данных • Другой язык запросов • Другие приоритеты в CAP теореме NoSQL
  15. Load Balancer dns nginx upstream Frontend Backend nginx upstream mysql

    proxy mysql proxy Shard A Shard B Slave Master proxy Memcache / Redis NoSQL Cassandra / Riak Теперь с NoSQL
  16. • Мастер-мастер даст отказоустойчивость • Шардинг даст пропорциональный прирост записи,

    но есть нюансы • Не стоит забывать про “NoSQL” решения, есть очень хорошие базы данных • Иногда полезно совмещать RDBMS и NoSQL решения Масштабирование записи
  17. Load Balancer dns nginx upstream Frontend Backend nginx upstream mysql

    proxy mysql proxy Shard A Shard B Slave Master proxy Memcache / Redis Task Queue NoSQL Cassandra / Riak Итоговая архитектура
  18. Мониторинг Гуглить: zabbix, graphite, pinba, statsd etsy skyline, opentsdb, influxdb

    • Графики должны быть на все изменяющиеся значения • Даже если значение не изменяется, на него должен быть график (вдруг изменится) • Как минимум следить за превышением пороговых значений • В идеале отслеживание трендов и “умное” детектирование аномалий
  19. Общие нюансы Гуглить: fault-tolerance, failover, soa microservice arcitecture • Всегда

    помните о проблеме больших чисел • Помните о блокировках в разных частях системы • Отказоустойчивость очень важна • Загружать сервера на 100% опасно • SOA и микросервисы
  20. Секреты высоконагруженных систем • Отделяем мух от котлет для полноценной

    утилизации ресурсов и независимой масштабируемость • Все сервисы масштабируются по разному, но подходы похожие • Но помни про нюансы (лаги, консистентность и т.д.) • Быстрый и автоматический failover залог здорового сна • Использовать php+mysql для всех задач можно, но есть специализированные сервисы для многих задач