46
Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта Минкин Андрей. Namba Taxi

Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Embed Size (px)

Citation preview

Page 1: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Самые частые проблемы и пути решения при росте

нагрузки и масштабировании проекта

Минкин Андрей. Namba Taxi

Page 2: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Кто я

• 4 года системным администратором• 4 года разработчиком на Python/Go

Page 3: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Что у нас вначале?

• Разрабатываем• Запускаем в продакшн• Обретаем глаза на продакшне

Page 4: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Глаза на продакшне

• Мониторинг• Сбор метрик(newrelic, opbeat, etc)• Сбор ошибок(sentry)

Page 5: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Ресурсов нет, но вы там держитесь

Page 6: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

На что бывает нагрузка

• Disk IO• Net• RAM• CPU

Page 7: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Чем анализировать

• CPU/RAM – top/atop/htop/mpstat• Disk IO – iotop/iostat• RAM – free cat /etc/meminfo

Page 8: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Откуда нагрузка на диск?

• Чтение• Запись

Page 9: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Нагрузка на CPU

• Вычисления• Ожидание IO

Page 10: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Нагрузка на RAM

• Mem-leak• Храним много данных в памяти

Page 11: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Пути решения

• Оптимизация кода• Кеширование• Масштабирование

Page 12: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Оптимизация

• Берем uwsgiFouigne• Пишем map функцию• Загоняем в Excel• ????• PROFIT

Page 13: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

uwsgiFouine --locale en_US.utf8 /path/to/wsgi.log

• Where was the most time spent?• What were the slowest pages (max page load time)?• What were the slowest pages (avg page load time)?

Page 14: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта
Page 15: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Path map function

Page 16: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

uwsgiFouine

• uwsgiFouine --locale en_US.utf8 \ --path_map_function pmap.pmap /path/to/wsgi.log

Page 17: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

uwsgiFouine. Пример

Page 18: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

uwsgiFouine

• 10% методов -> 90% нагрузки

Page 19: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Django ORM

• select_related()• prefetch_related()

Page 20: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Кеширование

• Как внедрить• Как инвалидировать• Как оценить качество работы кеширования

Page 21: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Внедрение кеширования

Page 22: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Кеширование

• Как работает кеш• Что кешировать• Как кешировать• Инвалидация

Page 23: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Как работает кеш

• Key-value• Данные в оперативной памяти• Может? Флушить данные на диск• LRU – Least Recently Used

Page 24: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Что кешировать

• Результаты запросов к внешним API• Медленные выборки из БД• Долгий рендер html

Page 25: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Как кешировать и инвалидировать

• Кладем в кеш по ключу• Обновляем по крону• Дублированное кеширование

Page 26: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Кладем в кеш по ключу

Page 27: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Дублированное кеширование

Page 28: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Обновляем по крону

Page 29: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Оценка качества работы кеширования

• %hit rate• %miss rate

Page 30: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

%hit rate и результат

• current > 95% - отлично• 85 < current < 95 – хорошо• current < 80 - плохо

Page 31: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

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

Page 32: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Когда внедрять?

• Все оптимизировано• Нет лишних запросов к ФС и БД• Админы все потюнили

Page 33: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Как внедрять?

• Масштабирование БД• Масштабирование App• Масштабирование ФС• Балансировка

Page 34: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Масштабирование БД

• Репликация(master/slave, master/master…) • Партицирование(partitioning)• Распределенная фс(hadoop fs, drbd)• Шардинг

Page 35: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

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

• Как хранить сессии?• Как отдавать статику?• Как накатывать миграции?• Как деплоить?

Page 36: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Масштабирование ФС

• Storage engine• Distributed file storage

Page 37: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

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

• На стороне сервера• На стороне клиента

Page 38: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Балансировка на серверах

• 1 frontend• Много бекендов• DNS round-robin

Page 39: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Балансировка. Проблемы

• Не гибко, если на клиенте• Неравномерное использование ресурсов

Page 40: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Конкурентный доступ

• БД• Cache

Page 41: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Что предложит нам Django?

https://docs.djangoproject.com/en/1.7/ref/models/queries/#f-expressions

Page 42: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

А еще что?

Page 43: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Что это даст?

Page 44: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Как быть с redis?

Page 45: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Выводы.

• Используйте транзакции БД• Следите за качеством работы кеша• Разделяйте workflow

Page 46: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта

Вопросы?

• https://github.com/gen1us2k• Skype: gen1us2k• http://gen1us2k.com