Особенности работы backend для мобильных приложений или Python Django UWSGI в продакшен, Дмитрий Швеенков, Mail.Ru Group
•Download as PPTX, PDF•
1 like•8,493 views
Доклад посвящен жизни проектов в продакшен. Речь пойдет о связке Python-Django-Uwsgi для backend мобильных приложений, настройке серверов, измерении времени и оценке качества работы backend. Также спикер расскажет о профилировании Django, Memcached в Python.
1 of 25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
More Related Content
Особенности работы backend для мобильных приложений или Python Django UWSGI в продакшен, Дмитрий Швеенков, Mail.Ru Group
1. Особенности работы backend для
мобильных приложений или
Python Django UWSGI в продакшен
Дмитрий Швеенков, руководитель команды разработки
4. О чем доклад
- Особенности разработки backend для мобильных приложений
- Измерение времени ответа backend
- Особенности работы стека python – django – uwsgi – nginx
- Оптимизация производительности
- Инструменты и подходы, которые мы используем
4
5. Задачи backend
- Агрегация информации о новостных ресурсах
- Хранение медиа контента
- Кэширование данных
- JSON API
- Работа с изображениями (crop, resize)
5
6. Особенности разработки API
- Разнообразие устройств и ОС:
- Планшеты
- Смартфоны
- iOS
- Android
- Windows phone
- и т.п.
- Редизайн мобильных приложений
6
8. Допустимое время ответа backend
Каким должен быть response_time?
- 1 секунда, это быстро?
- 5 секунд?
- 200 миллисекунд, норма
8
9. Как измерить время работы backend?
- Измерения на backend - timeit $ python -m timeit '"-".join(str(n) for n in range(100))'
- Измерения на клиенте - wrk, ab, siege
- Nginx access logs log_format main '$remote_addr - [$time_local] "$request" '
'$status $bytes_sent $request_length '
'$request_time $upstream_response_time'
9
12. Сбор метрик в продакшен
- Statsd+Graphite+Grafana
https://github.com/bitly/statsdaemon
http://graphiteapp.org/
http://grafana.org/
- Отправка из uwsgi --carbon 127.0.0.1:2003
- Diamond для cpu, la, network и iostat
https://github.com/python-diamond/Diamond
- Хранение истории
- Группировка по платформам ios/android
- Автоматизация сравнения графиков
http://bit.ly/2d8fcHl
12
13. - Рост кол-ва пользователей приводит к росту qps к backend
- Рост qps потребляет ресурсы сервера
- Для обработки запросов требуются uwsgi-workers
Как выбрать оптимальное количество workers? http://bit.ly/2cDjGpA
cpu cores x 2
Рост нагрузки, стек python – django – uwsgi – nginx
13
14. Как uWSGI обрабатывает входящие запросы?
Рост нагрузки
bind
listen
fork
while true:
a
ccept
uWSGI master uWSGI worker
14
15. Рост нагрузки
- uwsgi options --thunder-lock - http://bit.ly/2ckdRPe
- David Cramer, discus.com - http://bit.ly/2cxckEX
15
21. К чему мы стремимся при разработке backend
- Меньше обращений
- Легкие запросы
- Простые решения
21
22. Подводим итоги
- Разработка backend для мобильных приложений отличается от backend
для web приложений
- Производительность стека python – django – uwsgi – nginx требует
экспериментальных проверок в продакшен
- Для мобильного приложения очень важно время ответа backend
- Время ответа backend нужно измерять правильно
22
25. Пример кода view, чего стараемся избегать
class GetNewsByIdView(BaseNewsView):
def get_response(self, request):
if version == "1.0":
return {...}
elif version == "2.0":
return []
25
Editor's Notes
KPI (Key Performance Indicator) – это показатель достижения успеха в определенной деятельности или в достижении определенных целей