Самые частые проблемы и пути решения при росте...
TRANSCRIPT
![Page 1: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/1.jpg)
Самые частые проблемы и пути решения при росте
нагрузки и масштабировании проекта
Минкин Андрей. Namba Taxi
![Page 2: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/2.jpg)
Кто я
• 4 года системным администратором• 4 года разработчиком на Python/Go
![Page 3: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/3.jpg)
Что у нас вначале?
• Разрабатываем• Запускаем в продакшн• Обретаем глаза на продакшне
![Page 4: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/4.jpg)
Глаза на продакшне
• Мониторинг• Сбор метрик(newrelic, opbeat, etc)• Сбор ошибок(sentry)
![Page 5: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/5.jpg)
Ресурсов нет, но вы там держитесь
![Page 6: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/6.jpg)
На что бывает нагрузка
• Disk IO• Net• RAM• CPU
![Page 7: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/7.jpg)
Чем анализировать
• CPU/RAM – top/atop/htop/mpstat• Disk IO – iotop/iostat• RAM – free cat /etc/meminfo
![Page 8: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/8.jpg)
Откуда нагрузка на диск?
• Чтение• Запись
![Page 9: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/9.jpg)
Нагрузка на CPU
• Вычисления• Ожидание IO
![Page 10: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/10.jpg)
Нагрузка на RAM
• Mem-leak• Храним много данных в памяти
![Page 11: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/11.jpg)
Пути решения
• Оптимизация кода• Кеширование• Масштабирование
![Page 12: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/12.jpg)
Оптимизация
• Берем uwsgiFouigne• Пишем map функцию• Загоняем в Excel• ????• PROFIT
![Page 13: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/13.jpg)
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: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/14.jpg)
![Page 15: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/15.jpg)
Path map function
![Page 16: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/16.jpg)
uwsgiFouine
• uwsgiFouine --locale en_US.utf8 \ --path_map_function pmap.pmap /path/to/wsgi.log
![Page 17: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/17.jpg)
uwsgiFouine. Пример
![Page 18: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/18.jpg)
uwsgiFouine
• 10% методов -> 90% нагрузки
![Page 19: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/19.jpg)
Django ORM
• select_related()• prefetch_related()
![Page 20: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/20.jpg)
Кеширование
• Как внедрить• Как инвалидировать• Как оценить качество работы кеширования
![Page 21: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/21.jpg)
Внедрение кеширования
![Page 22: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/22.jpg)
Кеширование
• Как работает кеш• Что кешировать• Как кешировать• Инвалидация
![Page 23: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/23.jpg)
Как работает кеш
• Key-value• Данные в оперативной памяти• Может? Флушить данные на диск• LRU – Least Recently Used
![Page 24: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/24.jpg)
Что кешировать
• Результаты запросов к внешним API• Медленные выборки из БД• Долгий рендер html
![Page 25: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/25.jpg)
Как кешировать и инвалидировать
• Кладем в кеш по ключу• Обновляем по крону• Дублированное кеширование
![Page 26: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/26.jpg)
Кладем в кеш по ключу
![Page 27: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/27.jpg)
Дублированное кеширование
![Page 28: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/28.jpg)
Обновляем по крону
![Page 29: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/29.jpg)
Оценка качества работы кеширования
• %hit rate• %miss rate
![Page 30: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/30.jpg)
%hit rate и результат
• current > 95% - отлично• 85 < current < 95 – хорошо• current < 80 - плохо
![Page 31: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/31.jpg)
Масштабирование
![Page 32: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/32.jpg)
Когда внедрять?
• Все оптимизировано• Нет лишних запросов к ФС и БД• Админы все потюнили
![Page 33: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/33.jpg)
Как внедрять?
• Масштабирование БД• Масштабирование App• Масштабирование ФС• Балансировка
![Page 34: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/34.jpg)
Масштабирование БД
• Репликация(master/slave, master/master…) • Партицирование(partitioning)• Распределенная фс(hadoop fs, drbd)• Шардинг
![Page 35: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/35.jpg)
Масштабирование App
• Как хранить сессии?• Как отдавать статику?• Как накатывать миграции?• Как деплоить?
![Page 36: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/36.jpg)
Масштабирование ФС
• Storage engine• Distributed file storage
![Page 37: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/37.jpg)
Балансировка
• На стороне сервера• На стороне клиента
![Page 38: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/38.jpg)
Балансировка на серверах
• 1 frontend• Много бекендов• DNS round-robin
![Page 39: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/39.jpg)
Балансировка. Проблемы
• Не гибко, если на клиенте• Неравномерное использование ресурсов
![Page 40: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/40.jpg)
Конкурентный доступ
• БД• Cache
![Page 41: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/41.jpg)
Что предложит нам Django?
https://docs.djangoproject.com/en/1.7/ref/models/queries/#f-expressions
![Page 42: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/42.jpg)
А еще что?
![Page 43: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/43.jpg)
Что это даст?
![Page 44: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/44.jpg)
Как быть с redis?
![Page 45: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/45.jpg)
Выводы.
• Используйте транзакции БД• Следите за качеством работы кеша• Разделяйте workflow
![Page 46: Самые частые проблемы и пути решения при росте нагрузки и масштабировании проекта](https://reader035.vdocuments.site/reader035/viewer/2022062503/5872cd6a1a28ab74188b45d9/html5/thumbnails/46.jpg)
Вопросы?
• https://github.com/gen1us2k• Skype: gen1us2k• http://gen1us2k.com