Разделите сбор событий, очистку данных, локальный журнал с TTL и uploader. Серверные запросы на выгрузку должны проходить через тот же контролируемый pipeline.
Проектирование архитектуры клиентской части для логирования пользовательских сценариев (мобильная)
Разделите сбор событий, очистку данных, локальный журнал с TTL и uploader. Серверные запросы на выгрузку должны проходить через тот же контролируемый pipeline.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Разработать верхнеуровневую структуру мобильного клиента, отвечающего за сбор и передачу логов пользовательских сценариев. Необходимо включить следующие компоненты:
- сбор метаданных: идентификатор пользователя, версия приложения, сведения об устройстве;
- описание событий: открытые экраны, запросы к серверу, входящие и исходящие данные, результаты выполнения, возникшие ошибки, отметки времени;
- локальное кэширование с политикой истечения срока хранения;
- механизмы ручного и автоматического выгрузки логов;
- возможность получения логов по запросу сервера;
- определение формата и объёма передаваемых данных.
Серверный контракт: сериализованный файл журнала в JSON, содержащий события, связанные с пользователем, временем, экраном и версией приложения.
Ответ
Разделите сбор событий, очистку данных, локальный журнал с TTL и uploader. Серверные запросы на выгрузку должны проходить через тот же контролируемый pipeline.
Collector формирует JSON-запись с event-id, временем, экраном, версией приложения, псевдонимным user-id и correlation-id. Raw входящие/исходящие тела по умолчанию не сохраняйте: используйте allowlist полей, коды результата и размеры. Storage ограничивает общий объём, удаляет просроченное и сохраняет курсор выгрузки. Uploader сжимает сериализованный журнал, отправляет чанками и повторяет только неподтверждённые части. Ручная и серверная выгрузка используют одинаковые проверки доступа, согласия и лимитов. Ключи хранятся отдельно; сетевой запрос не должен держать блокировку хранилища.