Мобильный system design: SDK аналитики событий
Вопрос
Спроектируйте мобильный SDK для сбора событий аналитики: события из любого места приложения, доставка на сервер без потерь, минимальное влияние на батарею, трафик и время запуска.
Коротко
Что должно быть в решении
- 1Требования: гарантии доставки (at-least-once), порядок, приватность, лимиты размера
- 2API SDK: неблокирующий
track, общие свойства, идентификаторы, согласие пользователя - 3Хранение: очередь событий на диске, ограничение размера, вытеснение старых
- 4Отправка: пакетами по размеру и таймеру, сжатие, ретраи с backoff, фоновые окна
- 5Идемпотентность: id события, дедупликация на сервере
- 6Влияние: ленивая инициализация, без работы на главном потоке, метрики самого SDK
Что спросит интервьюер
- Что делать, если пользователь отозвал согласие на аналитику?
- Как не потерять события при крэше приложения?
Разбор
Публичный API: track(name, properties) возвращается мгновенно, запись уходит в фоновую очередь. Общие свойства (версия, платформа, сессия) добавляются автоматически. SDK уважает согласие пользователя: без него события не пишутся, при отзыве очередь очищается.
Хранение: события пишутся в лёгкую базу или файл-журнал на диске сразу, чтобы пережить крэш и выгрузку. Размер очереди ограничен, при переполнении вытесняются старые события с учётом важности.
Отправка: пакетами по 50-100 событий или раз в N секунд, сжатие gzip, при старте и при уходе приложения в фон. Ошибки повторяются с экспоненциальной задержкой, успешный пакет удаляется. Каждое событие имеет id, и сервер дедуплицирует, что даёт at-least-once без дублей в отчётах. Порядок определяется временем и счётчиком внутри сессии.
Влияние: SDK инициализируется лениво после первого кадра, не делает работы на главном потоке, не будит радиомодуль ради одного события. Метрики самого SDK (размер очереди, процент доставки) отправляются тем же каналом.
Приватность: никаких персональных данных в свойствах по умолчанию, фильтр запрещённых ключей.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Мобильный system design»
- Мобильный system design: каталог и корзина маркетплейса
- Мобильный system design: лента новостей с картинками и видео
- Мобильный system design: загрузка фото и видео
- Мобильный system design: мессенджер
- Мобильный system design: заметки с синхронизацией между устройствами
- Мобильный system design: истории (stories)
- Мобильный system design: такси с отслеживанием машины на карте
- Оценка объёмов в мобильном system design