SlideShare a Scribd company logo
Особенности работы backend для
мобильных приложений или
Python Django UWSGI в продакшен
Дмитрий Швеенков, руководитель команды разработки
О себе
Дмитрий Швеенков
Руководитель команды разработки в Mail.Ru Group
mailto: shveenkov@mail.ru
2
Мобильные приложения
Новости Гороскопы
3
О чем доклад
- Особенности разработки backend для мобильных приложений
- Измерение времени ответа backend
- Особенности работы стека python – django – uwsgi – nginx
- Оптимизация производительности
- Инструменты и подходы, которые мы используем
4
Задачи backend
- Агрегация информации о новостных ресурсах
- Хранение медиа контента
- Кэширование данных
- JSON API
- Работа с изображениями (crop, resize)
5
Особенности разработки API
- Разнообразие устройств и ОС:
- Планшеты
- Смартфоны
- iOS
- Android
- Windows phone
- и т.п.
- Редизайн мобильных приложений
6
Время запуска приложения
Время запуска влияет на ретеншен - http://bit.ly/2cDc60a
7
Допустимое время ответа backend
Каким должен быть response_time?
- 1 секунда, это быстро?
- 5 секунд?
- 200 миллисекунд, норма
8
Как измерить время работы 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
Графики rps и upstream_time
10
upstream_response_time хороший показатель?
Среднее для upstream_response_time
(20 + 10 + 20 + 10 + 10 + 20 + 500 + 500 + 500 + 400) / 10 = 199мс
Персентили http://bit.ly/2d4z5zi
$ fgrep "13/Sep/2016:10:" access.log | awk '{print $NF}' | sort -n | python percentile_stdin.py
11
Сбор метрик в продакшен
- 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
- Рост кол-ва пользователей приводит к росту qps к backend
- Рост qps потребляет ресурсы сервера
- Для обработки запросов требуются uwsgi-workers
Как выбрать оптимальное количество workers? http://bit.ly/2cDjGpA
cpu cores x 2
Рост нагрузки, стек python – django – uwsgi – nginx
13
Как uWSGI обрабатывает входящие запросы?
Рост нагрузки
bind
listen
fork
while true:
a
ccept
uWSGI master uWSGI worker
14
Рост нагрузки
- uwsgi options --thunder-lock - http://bit.ly/2ckdRPe
- David Cramer, discus.com - http://bit.ly/2cxckEX
15
Рост нагрузки
Параметры nginx http://bit.ly/2cfxEkh:
- uwsgi_buffers
- uwsgi_buffer_size
location /news {
uwsgi_pass mobs_backend;
include uwsgi_params;
uwsgi_buffers 256 16k;
}
16
Профилирование django-python
Профилирование начинается в голове разработчика ©
http://bit.ly/2cV82Gg
http://bit.ly/2ckeTKS
pip install django-extensions
INSTALLED_APPS += ('django_extensions',)
python manage.py runprofileserver --use-cprofile --prof-path=~/prof
wget -O- -S http://127.0.0.1:8000/news/v2/getNewsById?id=291235
gprof2dot -f pstats ~/prof/out.prof | dot -Tpng -o ~/prof/out.png
17
Визуализация результатов профилирования
18
Визуализация результатов профилирования
19
Тюнинг memcached
- python-memcached pickle/cpickle commit http://bit.ly/2ckfdJL
- модуль pymemcache http://bit.ly/2cDCsir
- упаковка/распаковка через msgpack
- использование опций noreply=true, tcp_nodelay=1
20
К чему мы стремимся при разработке backend
- Меньше обращений
- Легкие запросы
- Простые решения
21
Подводим итоги
- Разработка backend для мобильных приложений отличается от backend
для web приложений
- Производительность стека python – django – uwsgi – nginx требует
экспериментальных проверок в продакшен
- Для мобильного приложения очень важно время ответа backend
- Время ответа backend нужно измерять правильно
22
Вопросы?
Спасибо за внимание!
mailto: shveenkov@mail.ru
23
Настройка mysql
- myISAM, не используем транзакции
- key_buffer_size >= sum(du -hs *.MYI)
- ssd
- mysql_query_cache
- mysql_slow_query_log
24
Пример кода view, чего стараемся избегать
class GetNewsByIdView(BaseNewsView):
def get_response(self, request):
if version == "1.0":
return {...}
elif version == "2.0":
return []
25

More Related Content

What's hot (20)

ODP
Highload 2011-demona
Sergey Bochenkov
 
PDF
Дмитрий Дегтярев, "Хабикаса"
Ontico
 
PDF
Почти Github Flow в вёб-разработке или как мы делаем Русторию
SQALab
 
PPTX
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
it-people
 
PPT
Использование различных СУБД в высоконагруженных проектах
Media Gorod
 
PPTX
Второе пришествие WAP игр. Антон Гришин
Wake_up_province
 
PDF
15.03.19 WebPromo SEOday SEO-инсайты из логов: от WP блога до международного ...
Vladislav Morgun
 
PDF
Екатерина Войденко "Горизонтальное масштабирование MySQL"
Yandex
 
PDF
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
it-people
 
PDF
Micro-services, Упрощаем монолитные приложения
Rinat Abdullin
 
PPTX
От 40 до 2 секунд
oelifantiev
 
PDF
Как Python Дайджест работает с внешней статикой
PyNSK
 
PDF
Webpack для самых маленьких | Odessa Frontend Meetup #5
OdessaFrontend
 
PDF
Сергей Чистович "Подходы к кешированию на UGC-сервисе"
Yandex
 
PPTX
как сделать свой кластер на postgresql 95
Максим Селиверстов
 
PDF
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON
 
PPT
MongoDB basics in Russian
Oleg Kachan
 
PDF
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
Mikhail Tabunov
 
PDF
Скриншоты как сервис
Сергей Мелюков
 
PDF
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
Аліна Шепшелей
 
Highload 2011-demona
Sergey Bochenkov
 
Дмитрий Дегтярев, "Хабикаса"
Ontico
 
Почти Github Flow в вёб-разработке или как мы делаем Русторию
SQALab
 
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
it-people
 
Использование различных СУБД в высоконагруженных проектах
Media Gorod
 
Второе пришествие WAP игр. Антон Гришин
Wake_up_province
 
15.03.19 WebPromo SEOday SEO-инсайты из логов: от WP блога до международного ...
Vladislav Morgun
 
Екатерина Войденко "Горизонтальное масштабирование MySQL"
Yandex
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
it-people
 
Micro-services, Упрощаем монолитные приложения
Rinat Abdullin
 
От 40 до 2 секунд
oelifantiev
 
Как Python Дайджест работает с внешней статикой
PyNSK
 
Webpack для самых маленьких | Odessa Frontend Meetup #5
OdessaFrontend
 
Сергей Чистович "Подходы к кешированию на UGC-сервисе"
Yandex
 
как сделать свой кластер на postgresql 95
Максим Селиверстов
 
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON
 
MongoDB basics in Russian
Oleg Kachan
 
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
Mikhail Tabunov
 
Скриншоты как сервис
Сергей Мелюков
 
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
Аліна Шепшелей
 

Viewers also liked (20)

PPTX
Мотивированный игрок: вовлечение через средние и дальние цели, Александр Пань...
Mail.ru Group
 
PDF
«Pocker - GUI для Docker», Владимир Василькин (ALMWorks, Санкт-Петербург)
Mail.ru Group
 
PDF
«История разработки eazyBI», Raimonds Simanovskis (eazyBI, Латвия)
Mail.ru Group
 
PDF
«Как написать свой первый плагин для JIRA», Александр Кузнецов (StiltSoft, Бе...
Mail.ru Group
 
PDF
Мобильный веб: назад в будущее
Badoo Development
 
PDF
Технологии vs коммуникации: что важнее?
Badoo Development
 
PPTX
Багфиксинг процесса разработки в iOS: взгляд с двух сторон
Badoo Development
 
PDF
Как автотесты ускоряют релизы в OK.ru
Badoo Development
 
PDF
TechLeads meetup: Макс Лапшин, Erlyvideo
Badoo Development
 
PPTX
TechLeads meetup: Евгений Потапов, ITSumma
Badoo Development
 
PDF
TechLeads meetup: Алексей Рыбак, Badoo
Badoo Development
 
PPTX
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
Badoo Development
 
PDF
Что такое Highload? Секреты высокой нагрузки
Tech Talks @NSU
 
PPTX
LinkMeUp-V3 (05.2013)
eucariot
 
PPT
LinkMeUp-V1 (03.2013)
eucariot
 
PPT
LinkMeUp-V2 (04.2013)
eucariot
 
PDF
Ивенты в играх — кейс Pixonic, Максим Кожнов, Руководитель отдела аналитики, ...
Mail.ru Group
 
PPTX
Особенности дизайна VR-игр, Дмитрий Трубицин, старший дизайнер игр, департаме...
Mail.ru Group
 
PDF
Современные базовые принципы UX-проектирования в играх, Ольга Шуберт, ведущий...
Mail.ru Group
 
PDF
Особенности тестирования мобильных приложений (Android, iOS)
Эльвина Сакаева
 
Мотивированный игрок: вовлечение через средние и дальние цели, Александр Пань...
Mail.ru Group
 
«Pocker - GUI для Docker», Владимир Василькин (ALMWorks, Санкт-Петербург)
Mail.ru Group
 
«История разработки eazyBI», Raimonds Simanovskis (eazyBI, Латвия)
Mail.ru Group
 
«Как написать свой первый плагин для JIRA», Александр Кузнецов (StiltSoft, Бе...
Mail.ru Group
 
Мобильный веб: назад в будущее
Badoo Development
 
Технологии vs коммуникации: что важнее?
Badoo Development
 
Багфиксинг процесса разработки в iOS: взгляд с двух сторон
Badoo Development
 
Как автотесты ускоряют релизы в OK.ru
Badoo Development
 
TechLeads meetup: Макс Лапшин, Erlyvideo
Badoo Development
 
TechLeads meetup: Евгений Потапов, ITSumma
Badoo Development
 
TechLeads meetup: Алексей Рыбак, Badoo
Badoo Development
 
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
Badoo Development
 
Что такое Highload? Секреты высокой нагрузки
Tech Talks @NSU
 
LinkMeUp-V3 (05.2013)
eucariot
 
LinkMeUp-V1 (03.2013)
eucariot
 
LinkMeUp-V2 (04.2013)
eucariot
 
Ивенты в играх — кейс Pixonic, Максим Кожнов, Руководитель отдела аналитики, ...
Mail.ru Group
 
Особенности дизайна VR-игр, Дмитрий Трубицин, старший дизайнер игр, департаме...
Mail.ru Group
 
Современные базовые принципы UX-проектирования в играх, Ольга Шуберт, ведущий...
Mail.ru Group
 
Особенности тестирования мобильных приложений (Android, iOS)
Эльвина Сакаева
 
Ad

Similar to Особенности работы backend для мобильных приложений или Python Django UWSGI в продакшен, Дмитрий Швеенков, Mail.Ru Group (20)

PDF
Coub - как мы строили аналитическую платформу на несколько миллиардов событий...
Ontico
 
PDF
Pavel Dovbush Toster
Pavel Dovbush
 
PDF
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Ontico
 
PDF
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Ontico
 
PDF
Near-realtime аналитика событий в высоконагруженном проекте
Badoo Development
 
PDF
Near-realtime аналитика событий в высоконагруженном проекте
Alexandr Krasheninnikov
 
PDF
Near-realtime аналитика событий в высоконагруженном проекте
Yulia Kotova
 
PDF
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Dev_Party
 
PDF
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
Yandex
 
PPTX
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
sportgid
 
PPTX
антон веснин Rails Application Servers
rit2010
 
PPTX
развертывание среды Rails (антон веснин, Locum Ru)
guest40e031
 
PDF
Как мы строили аналитическую платформу на несколько миллиардов событии в меся...
Coub
 
PDF
Технологии больших веб проектов завтра и послезавтра
Nikita Semenov
 
PDF
PUG #9 at OWOX: Поиск узких мест в приложении на PHP
Анна Магас
 
PDF
Что такое мобильная платформа HyperHive
Pavel Lipanov
 
PPTX
What do you MEAN? или введение в Fullstack JavaScript
Vasiliy Teliatnikov
 
PDF
Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц
Tanya Denisyuk
 
PDF
FT & HA Rails приложений приложений — это просто
Александр Ежов
 
PPTX
мониторинг производительности приложения на PINBA
Slach
 
Coub - как мы строили аналитическую платформу на несколько миллиардов событий...
Ontico
 
Pavel Dovbush Toster
Pavel Dovbush
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Ontico
 
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Ontico
 
Near-realtime аналитика событий в высоконагруженном проекте
Badoo Development
 
Near-realtime аналитика событий в высоконагруженном проекте
Alexandr Krasheninnikov
 
Near-realtime аналитика событий в высоконагруженном проекте
Yulia Kotova
 
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Dev_Party
 
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
Yandex
 
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
sportgid
 
антон веснин Rails Application Servers
rit2010
 
развертывание среды Rails (антон веснин, Locum Ru)
guest40e031
 
Как мы строили аналитическую платформу на несколько миллиардов событии в меся...
Coub
 
Технологии больших веб проектов завтра и послезавтра
Nikita Semenov
 
PUG #9 at OWOX: Поиск узких мест в приложении на PHP
Анна Магас
 
Что такое мобильная платформа HyperHive
Pavel Lipanov
 
What do you MEAN? или введение в Fullstack JavaScript
Vasiliy Teliatnikov
 
Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц
Tanya Denisyuk
 
FT & HA Rails приложений приложений — это просто
Александр Ежов
 
мониторинг производительности приложения на PINBA
Slach
 
Ad

More from Mail.ru Group (20)

PDF
Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
Mail.ru Group
 
PDF
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
Mail.ru Group
 
PDF
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
Mail.ru Group
 
PDF
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
Mail.ru Group
 
PDF
Управление инцидентами в Почте Mail.ru, Антон Викторов
Mail.ru Group
 
PDF
DAST в CI/CD, Ольга Свиридова
Mail.ru Group
 
PDF
Почему вам стоит использовать свой велосипед и почему не стоит Александр Бел...
Mail.ru Group
 
PDF
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...
Mail.ru Group
 
PDF
RAPIDS: ускоряем Pandas и scikit-learn на GPU Павел Клеменков, NVidia
Mail.ru Group
 
PDF
WebAuthn в реальной жизни, Анатолий Остапенко
Mail.ru Group
 
PDF
AMP для электронной почты, Сергей Пешков
Mail.ru Group
 
PDF
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
Mail.ru Group
 
PDF
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Mail.ru Group
 
PDF
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
Mail.ru Group
 
PDF
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Mail.ru Group
 
PDF
Этика искусственного интеллекта, Александр Кармаев (AI Journey)
Mail.ru Group
 
PDF
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
Mail.ru Group
 
PDF
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
Mail.ru Group
 
PDF
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
Mail.ru Group
 
PDF
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
Mail.ru Group
 
Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
Mail.ru Group
 
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
Mail.ru Group
 
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
Mail.ru Group
 
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
Mail.ru Group
 
Управление инцидентами в Почте Mail.ru, Антон Викторов
Mail.ru Group
 
DAST в CI/CD, Ольга Свиридова
Mail.ru Group
 
Почему вам стоит использовать свой велосипед и почему не стоит Александр Бел...
Mail.ru Group
 
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...
Mail.ru Group
 
RAPIDS: ускоряем Pandas и scikit-learn на GPU Павел Клеменков, NVidia
Mail.ru Group
 
WebAuthn в реальной жизни, Анатолий Остапенко
Mail.ru Group
 
AMP для электронной почты, Сергей Пешков
Mail.ru Group
 
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
Mail.ru Group
 
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Mail.ru Group
 
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
Mail.ru Group
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Mail.ru Group
 
Этика искусственного интеллекта, Александр Кармаев (AI Journey)
Mail.ru Group
 
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
Mail.ru Group
 
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
Mail.ru Group
 
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
Mail.ru Group
 
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
Mail.ru Group
 

Особенности работы backend для мобильных приложений или Python Django UWSGI в продакшен, Дмитрий Швеенков, Mail.Ru Group

  • 1. Особенности работы backend для мобильных приложений или Python Django UWSGI в продакшен Дмитрий Швеенков, руководитель команды разработки
  • 2. О себе Дмитрий Швеенков Руководитель команды разработки в Mail.Ru Group mailto: [email protected] 2
  • 4. О чем доклад - Особенности разработки backend для мобильных приложений - Измерение времени ответа backend - Особенности работы стека python – django – uwsgi – nginx - Оптимизация производительности - Инструменты и подходы, которые мы используем 4
  • 5. Задачи backend - Агрегация информации о новостных ресурсах - Хранение медиа контента - Кэширование данных - JSON API - Работа с изображениями (crop, resize) 5
  • 6. Особенности разработки API - Разнообразие устройств и ОС: - Планшеты - Смартфоны - iOS - Android - Windows phone - и т.п. - Редизайн мобильных приложений 6
  • 7. Время запуска приложения Время запуска влияет на ретеншен - http://bit.ly/2cDc60a 7
  • 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
  • 10. Графики rps и upstream_time 10
  • 11. upstream_response_time хороший показатель? Среднее для upstream_response_time (20 + 10 + 20 + 10 + 10 + 20 + 500 + 500 + 500 + 400) / 10 = 199мс Персентили http://bit.ly/2d4z5zi $ fgrep "13/Sep/2016:10:" access.log | awk '{print $NF}' | sort -n | python percentile_stdin.py 11
  • 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
  • 16. Рост нагрузки Параметры nginx http://bit.ly/2cfxEkh: - uwsgi_buffers - uwsgi_buffer_size location /news { uwsgi_pass mobs_backend; include uwsgi_params; uwsgi_buffers 256 16k; } 16
  • 17. Профилирование django-python Профилирование начинается в голове разработчика © http://bit.ly/2cV82Gg http://bit.ly/2ckeTKS pip install django-extensions INSTALLED_APPS += ('django_extensions',) python manage.py runprofileserver --use-cprofile --prof-path=~/prof wget -O- -S http://127.0.0.1:8000/news/v2/getNewsById?id=291235 gprof2dot -f pstats ~/prof/out.prof | dot -Tpng -o ~/prof/out.png 17
  • 20. Тюнинг memcached - python-memcached pickle/cpickle commit http://bit.ly/2ckfdJL - модуль pymemcache http://bit.ly/2cDCsir - упаковка/распаковка через msgpack - использование опций noreply=true, tcp_nodelay=1 20
  • 21. К чему мы стремимся при разработке backend - Меньше обращений - Легкие запросы - Простые решения 21
  • 22. Подводим итоги - Разработка backend для мобильных приложений отличается от backend для web приложений - Производительность стека python – django – uwsgi – nginx требует экспериментальных проверок в продакшен - Для мобильного приложения очень важно время ответа backend - Время ответа backend нужно измерять правильно 22
  • 24. Настройка mysql - myISAM, не используем транзакции - key_buffer_size >= sum(du -hs *.MYI) - ssd - mysql_query_cache - mysql_slow_query_log 24
  • 25. Пример кода view, чего стараемся избегать class GetNewsByIdView(BaseNewsView): def get_response(self, request): if version == "1.0": return {...} elif version == "2.0": return [] 25

Editor's Notes

  • #9: KPI (Key Performance Indicator) – это показатель достижения успеха в определенной деятельности или в достижении определенных целей