478b3c3cbb27b009407abe296b0d91b2.ppt
- Количество слайдов: 46
Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта Минкин Андрей. Namba Taxi
Кто я • 4 года системным администратором • 4 года разработчиком на Python/Go
Что у нас вначале? • Разрабатываем • Запускаем в продакшн • Обретаем глаза на продакшне
Глаза на продакшне • Мониторинг • Сбор метрик(newrelic, opbeat, etc) • Сбор ошибок(sentry)
Ресурсов нет, но вы там держитесь
На что бывает нагрузка • • Disk IO Net RAM CPU
Чем анализировать • CPU/RAM – top/atop/htop/mpstat • Disk IO – iotop/iostat • RAM – free cat /etc/meminfo
Откуда нагрузка на диск? • Чтение • Запись
Нагрузка на CPU • Вычисления • Ожидание IO
Нагрузка на RAM • Mem-leak • Храним много данных в памяти
Пути решения • Оптимизация кода • Кеширование • Масштабирование
Оптимизация • • • Берем uwsgi. Fouigne Пишем map функцию Загоняем в Excel ? ? PROFIT
uwsgi. Fouine --locale en_US. utf 8 /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)?
Path map function
uwsgi. Fouine • uwsgi. Fouine --locale en_US. utf 8 --path_map_function pmap /path/to/wsgi. log
uwsgi. Fouine. Пример
uwsgi. Fouine • 10% методов -> 90% нагрузки
Django ORM • select_related() • prefetch_related()
Кеширование • Как внедрить • Как инвалидировать • Как оценить качество работы кеширования
Внедрение кеширования
Кеширование • • Как работает кеш Что кешировать Как кешировать Инвалидация
Как работает кеш • • Key-value Данные в оперативной памяти Может? Флушить данные на диск LRU – Least Recently Used
Что кешировать • Результаты запросов к внешним API • Медленные выборки из БД • Долгий рендер html
Как кешировать и инвалидировать • Кладем в кеш по ключу • Обновляем по крону • Дублированное кеширование
Кладем в кеш по ключу
Дублированное кеширование
Обновляем по крону
Оценка качества работы кеширования • %hit rate • %miss rate
%hit rate и результат • current > 95% - отлично • 85 < current < 95 – хорошо • current < 80 - плохо
Масштабирование
Когда внедрять? • Все оптимизировано • Нет лишних запросов к ФС и БД • Админы все потюнили
Как внедрять? • • Масштабирование БД Масштабирование App Масштабирование ФС Балансировка
Масштабирование БД • • Репликация(master/slave, master/master…) Партицирование(partitioning) Распределенная фс(hadoop fs, drbd) Шардинг
Масштабирование App • • Как Как хранить сессии? отдавать статику? накатывать миграции? деплоить?
Масштабирование ФС • Storage engine • Distributed file storage
Балансировка • На стороне сервера • На стороне клиента
Балансировка на серверах • 1 frontend • Много бекендов • DNS round-robin
Балансировка. Проблемы • Не гибко, если на клиенте • Неравномерное использование ресурсов
Конкурентный доступ • БД • Cache
Что предложит нам Django? https: //docs. djangoproject. com/en/1. 7/ref/models/queries/#f-expressions
А еще что?
Что это даст?
Как быть с redis?
Выводы. • Используйте транзакции БД • Следите за качеством работы кеша • Разделяйте workflow
Вопросы? • https: //github. com/gen 1 us 2 k • Skype: gen 1 us 2 k • http: //gen 1 us 2 k. com
478b3c3cbb27b009407abe296b0d91b2.ppt