Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Клиентские 
приложения под 
нагрузкой 
Андрей Смирнов 
@smira
Backend-разработчик 
Высокие нагрузки, сто тысяч 
запросов в секунду, база 
данных не справляется… 
Что там клиентское 
пр...
Клиентский разработчик 
Вышла новая версия SDK, надо 
проверить на новой модели 
xPhone. 
Опять там в бэкенде кривой API 
...
Продукт = 
Backend + Приложение
Приложение =❓Продукт
Backend =❓Продукт
Приложение Сеть Backend
Сеть ненадежна
Ошибки при отправке запроса 
• Нет сетевого соединения 
• Получен ответ с ошибкой сервера 
• Таймаут получения ответа
Неопределенность 
• Запрос отправлен, ответ не получен: 
• Запрос получен сервером и … 
• не обработан 
• обработан, но с ...
Таймауты
Таймауты 
timeout1 > timeout2 > timeout3
Повтор запроса 
• Всякий ли запрос можно повторить? 
• запрос, не изменяющий состояние 
• идемпотентный запрос 
• запрос, ...
Идемпотентность запросов 
• Создать(Объект) ⇒ ID1 
• Создать(Объект) ⇒ ID2 
• Не идемпотентен, повторение - создание 
дубл...
ID на клиенте 
• Создать(ID, объект) ⇒ ОК 
• Создать(ID, объект) ⇒ ОК (ничего не делает)
Отпечаток запроса 
• Создать(объект) ⇒ отпечаток запроса 
• Если запрос уже отправлялся, вернуть 
предыдущий ответ 
• Или ...
Прозрачные коды ошибок 
• Используйте HTTP-коды ошибок 
• Ошибки может генерировать не только backend 
• Возвращайте допол...
Сетевое взаимодействие 
• Используйте HTTP(S), Keep-Alive, Pipelining 
• WebSocket для двунаправленного взаимодействия 
• ...
Клиент - это DDoS
Причины 
• Баги в коде 
• Поведение сети 
• Клиентское окружение 
• Авария на стороне сервера
Особенности 
• Нельзя отправить в /dev/null 
• Одновременное обновление версий ПО 
• Выкатить исправленную версию быстро н...
Как избежать? 
• Тестирование в реальной среде 
• Rate limiting
Нагрузка и время отклика 
100 
10 
отклик, сек 0,1 
1 
1000 2000 3000 4000 5000 6000 7000 
нагрузка, запросов/сек
Нагрузка и время отклика 
100 
10 
отклик, сек 0,1 
1 
1000 2000 3000 4000 5000 6000 7000 
нагрузка, запросов/сек
Нагрузка и время отклика 
100 
10 
отклик, сек 0,1 
1 
1000 2000 3000 4000 5000 6000 7000 
нагрузка, запросов/сек
Нагрузка и время отклика 
100 
10 
отклик, сек 0,1 
1 
1000 2000 3000 4000 5000 6000 7000 
нагрузка, запросов/сек
Нагрузка и время отклика 
100 
10 
отклик, сек 0,1 
1 
1000 2000 3000 4000 5000 6000 7000 
нагрузка, запросов/сек
Нагрузка и время отклика 
100 
10 
отклик, сек 0,1 
1 
1000 2000 3000 4000 5000 6000 7000 
нагрузка, запросов/сек
Алгоритм повтора 
• Повтор через фиксированный интервал 
• Экспоненциальное откладывание 
D = min(D⋅F,Dmax ) 
D = D + Norm...
Экспоненциальное откладывание 
задержка, секунды 
600 
450 
300 
150 
0 
1 2 3 4 5 6 7 8 9 
номер попытки
Синхронизация данных
Мгновенный отклик
Работа в offline-режиме
Схема клиентского приложения
Конфликты 
• Обнаружение конфликтов 
• Стратегии борьбы с конфликтами: 
• Уменьшение размера изменений 
• Слияние изменени...
CRDT 
• Fa(Fb(X)) = Fb(Fa(X)) 
• Счетчики 
• Множества 
• “Последний побеждает”
Клиент как веб-сервис
Асимметричность 
• Приложение может обращаться к backend 
• А backend к приложению? 
• Web Socket 
• Push Notifications 
•...
Приложение ≈ Backend
Backend является клиентом 
• Backend⇛БД 
• Backend⇛Backend (SOA) 
• Backend⇛Внешний сервис 
• Backend⇛Клиент
Клиент является backendом 
• Хранение данных 
• “CAP”-теорема при синхронизации 
• Мощная среда исполнения
Спасибо! Вопросы? 
• Андрей Смирнов 
• @smira 
• me@smira.ru 
• h,p://smira.ru/
Конфигурация 
• Независимость от основной серверной 
инфраструктуры 
• Включение/отключение функций 
• A/B тестирование 
•...
Мониторинг на стороне backend 
• Сбор данных об активности клиента 
• Поиск и агрегация по параметрам клиентского 
приложе...
Отслеживание crashей 
• Когда и сколько раз произошел сбой? 
• Какая версия приложения? Какая платформа? 
• Какие сбои сам...
Сбор метрик 
• Производительность приложения 
• Сетевые метрики (по типу сети, географическому 
признаку) 
• Пользовательс...
SaaS-решения 
• Crashlytics 
• Cri,ercism 
• New Relic 
• AirBrake 
• …
Клиентские приложения под нагрузкой, Андрей Смирнов
Upcoming SlideShare
Loading in …5
×

Клиентские приложения под нагрузкой, Андрей Смирнов

1,127 views

Published on

Доклад Андрея Смирнова с HighLoad++ 2014.

Published in: Internet
  • Be the first to comment

Клиентские приложения под нагрузкой, Андрей Смирнов

  1. 1. Клиентские приложения под нагрузкой Андрей Смирнов @smira
  2. 2. Backend-разработчик Высокие нагрузки, сто тысяч запросов в секунду, база данных не справляется… Что там клиентское приложение делать? Три строчки и всё, а они опять багов насажали… h,p://www.reddit.com/r/funny/comments/1ecrkg/the_beard_is_as_smooth_as_the_gif/
  3. 3. Клиентский разработчик Вышла новая версия SDK, надо проверить на новой модели xPhone. Опять там в бэкенде кривой API придумали, под нагрузкой падает, а у приложения рейтинг низкий из-за них… h,p://www.edge-online.com/features/fearing-hipster-developer/
  4. 4. Продукт = Backend + Приложение
  5. 5. Приложение =❓Продукт
  6. 6. Backend =❓Продукт
  7. 7. Приложение Сеть Backend
  8. 8. Сеть ненадежна
  9. 9. Ошибки при отправке запроса • Нет сетевого соединения • Получен ответ с ошибкой сервера • Таймаут получения ответа
  10. 10. Неопределенность • Запрос отправлен, ответ не получен: • Запрос получен сервером и … • не обработан • обработан, но с ошибкой • обработан успешно • Запрос не получен h,p://www.trinityp3.com/2014/04/media-agency-rebate-debate/
  11. 11. Таймауты
  12. 12. Таймауты timeout1 > timeout2 > timeout3
  13. 13. Повтор запроса • Всякий ли запрос можно повторить? • запрос, не изменяющий состояние • идемпотентный запрос • запрос, приводящий к повторному действию • Можно ли повторить запрос, который привёл к ошибке API?
  14. 14. Идемпотентность запросов • Создать(Объект) ⇒ ID1 • Создать(Объект) ⇒ ID2 • Не идемпотентен, повторение - создание дубликатов
  15. 15. ID на клиенте • Создать(ID, объект) ⇒ ОК • Создать(ID, объект) ⇒ ОК (ничего не делает)
  16. 16. Отпечаток запроса • Создать(объект) ⇒ отпечаток запроса • Если запрос уже отправлялся, вернуть предыдущий ответ • Или выполнить запрос и сохранить ответ по ключу отпечатка запроса
  17. 17. Прозрачные коды ошибок • Используйте HTTP-коды ошибок • Ошибки может генерировать не только backend • Возвращайте дополнительную информацию
  18. 18. Сетевое взаимодействие • Используйте HTTP(S), Keep-Alive, Pipelining • WebSocket для двунаправленного взаимодействия • Не используйте polling • Используйте push notifications • На мобильных устройствах: берегите батарею и радиоканал
  19. 19. Клиент - это DDoS
  20. 20. Причины • Баги в коде • Поведение сети • Клиентское окружение • Авария на стороне сервера
  21. 21. Особенности • Нельзя отправить в /dev/null • Одновременное обновление версий ПО • Выкатить исправленную версию быстро не всегда возможно
  22. 22. Как избежать? • Тестирование в реальной среде • Rate limiting
  23. 23. Нагрузка и время отклика 100 10 отклик, сек 0,1 1 1000 2000 3000 4000 5000 6000 7000 нагрузка, запросов/сек
  24. 24. Нагрузка и время отклика 100 10 отклик, сек 0,1 1 1000 2000 3000 4000 5000 6000 7000 нагрузка, запросов/сек
  25. 25. Нагрузка и время отклика 100 10 отклик, сек 0,1 1 1000 2000 3000 4000 5000 6000 7000 нагрузка, запросов/сек
  26. 26. Нагрузка и время отклика 100 10 отклик, сек 0,1 1 1000 2000 3000 4000 5000 6000 7000 нагрузка, запросов/сек
  27. 27. Нагрузка и время отклика 100 10 отклик, сек 0,1 1 1000 2000 3000 4000 5000 6000 7000 нагрузка, запросов/сек
  28. 28. Нагрузка и время отклика 100 10 отклик, сек 0,1 1 1000 2000 3000 4000 5000 6000 7000 нагрузка, запросов/сек
  29. 29. Алгоритм повтора • Повтор через фиксированный интервал • Экспоненциальное откладывание D = min(D⋅F,Dmax ) D = D + NormVariate(0,D⋅ J ) F = 1.7, J = 0.1
  30. 30. Экспоненциальное откладывание задержка, секунды 600 450 300 150 0 1 2 3 4 5 6 7 8 9 номер попытки
  31. 31. Синхронизация данных
  32. 32. Мгновенный отклик
  33. 33. Работа в offline-режиме
  34. 34. Схема клиентского приложения
  35. 35. Конфликты • Обнаружение конфликтов • Стратегии борьбы с конфликтами: • Уменьшение размера изменений • Слияние изменений • “Последний побеждает”
  36. 36. CRDT • Fa(Fb(X)) = Fb(Fa(X)) • Счетчики • Множества • “Последний побеждает”
  37. 37. Клиент как веб-сервис
  38. 38. Асимметричность • Приложение может обращаться к backend • А backend к приложению? • Web Socket • Push Notifications • …
  39. 39. Приложение ≈ Backend
  40. 40. Backend является клиентом • Backend⇛БД • Backend⇛Backend (SOA) • Backend⇛Внешний сервис • Backend⇛Клиент
  41. 41. Клиент является backendом • Хранение данных • “CAP”-теорема при синхронизации • Мощная среда исполнения
  42. 42. Спасибо! Вопросы? • Андрей Смирнов • @smira • me@smira.ru • h,p://smira.ru/
  43. 43. Конфигурация • Независимость от основной серверной инфраструктуры • Включение/отключение функций • A/B тестирование • Изменение параметров • Применение параметров для части пользователей
  44. 44. Мониторинг на стороне backend • Сбор данных об активности клиента • Поиск и агрегация по параметрам клиентского приложения, пользователя, сессии и т.п.
  45. 45. Отслеживание crashей • Когда и сколько раз произошел сбой? • Какая версия приложения? Какая платформа? • Какие сбои самые частые?
  46. 46. Сбор метрик • Производительность приложения • Сетевые метрики (по типу сети, географическому признаку) • Пользовательская база • Дополнительные метрики (UX)
  47. 47. SaaS-решения • Crashlytics • Cri,ercism • New Relic • AirBrake • …

×