TGViewer
Системный суетолог Системный суетолог @systemsyetolog · 918 subscribers
Post #54 2.26K
Welcome_Board.jpg147 KB
👋 Всем привет!
Обещала выложить свое решение по задачке, которая была на систем дизайн интервью.

Если коротко, то схема получилась такая:
1⃣ Передача Геолокации курьеров
Устройства курьеров отправляют геолокацию через HTTP-запросы в сервис Геолокации.
Сервис геолокации записывает данные в Кафку.
Из Кафки данные ассинхронно записываются в БД Геолокации и БД Мониторинга.

2⃣Отслеживание курьеров проверяющим
Проверяющий выбирает область для отслеживания на карте - отправляется HTTP-запрос с 2 координатами в сервис Мониторинга курьеров (для упрощения задачи предположили, что можно выделять только прямоугольную область)
Открывается вебсокет соединение для передачи на клиент данных в реалтайме.
Сервис мониторинга получает из БД Геолокации координаты, принадлежащие области, и курьеров. Далее передает данные на клиент.

3⃣Просмотр истории перемещений курьера за период
Проверяющий в фильтре выбирает курьера и период - отправляется HTTP-запрос в сервис Истории. Сервис Истории читает данные из БД Геолокации.

4⃣Очистка истории перемещений за год
Сервис очистки запускается раз в сутки и удаляет из БД Геолокации устаревшие данные.

➕Базы Данных
БД Геолокации - хранит всю историю геолокаций по курьерам за 1 год.
Это реляционная БД (Postgres), тк важна консистентность.

БД Мониторинга - хранит последнюю геолокацию курьера. Кмк хорошо подойдет Redis, тк он производительный и быстрый. Ключ - ИД курьера.

➕ Масштабирование
- Обязательно масштабируем сервис Геолокации с учетом 3300 RPS. На вход ставим балансировщик (условно ngnix, распределять можно раунд робином)
- Шардируем БД Геолокации. Ключ шардирования - по timestamp, чтобы удобно было читать историю. Нагрузку на запись БД выдержать должна, тк пишем асинхронно из Кафки.
- Каждый шард реплицируем.

Из минусов, которые я сейчас вижу на этой схеме:
1. Не проработана история с сохранением настроек области проверяющего.
2. Не хватает API Gateway для распределения запросов между сервисом Мониторинга и Истории.

⚡А как бы вы решали задачу? Мб есть более оптимальные решения)
  • 👍 13
  • ❤ 6
More from @systemsyetolog
  1. Aug 14, 2024👋Всем привет! 24-25 августа пройдет Weekend offer к нам в бизнес линию. Хорошая возможнос…
  2. Jul 11, 2024Проходить собеседования — это навык. Если в 2024-м вы хотите — меньше волноваться на собес…
  3. Jun 12, 2024Как системному аналитику стать мидлом в бигтехе? 👨‍💻 Приходи на интенсив для системных а…
  4. Apr 12, 2024👋 Давно обещала обратную связь по курсу «Проектирование архитектуры и интеграций (API/бро…
  5. Jan 24, 2024Всем привет 👋 Недавно изучала тему брокеров сообщений в облаках. Одно из самых популярное…
  6. Jan 9, 2024Привет 👋 🧑‍💻 Всем легкого рабочего дня сегодня. Хотя мне еще отдыхать 2 дня, пора потих…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →