Advertisement

More Related Content

Slideshows for you(20)

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

Advertisement

More from Ontico(20)

Advertisement

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

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