GitHub - order-viewer


screen

О проекте

Сервис предназначен для приёма, обработки и хранения данных о заказах, поступающих через Kafka. Основная цель — обеспечить надёжное хранение заказов в PostgreSQL и быстрый доступ к ним через кэширование в памяти. Сервис включает простой веб-интерфейс для просмотра информации о заказе по его идентификатору.

Ключевой функционал

Интеграция с Kafka. Сервис подписывается на топик с данными заказов и обрабатывает входящие сообщения в реальном времени.

Валидация и обработка ошибок. Некорректные или невалидные сообщения логируются и игнорируются, не нарушая работу сервиса.

Сохранение в PostgreSQL. Данные заказов сохраняются в нормализованную структуру БД с использованием транзакций для обеспечения целостности.

In-memory кэширование. Последние полученные заказы хранятся в памяти (map) для мгновенного доступа без обращения к БД.

Восстановление кэша при старте. При запуске сервис автоматически заполняет кэш данными из базы, что гарантирует отказоустойчивость после перезапусков.

HTTP API. Эндпоинт для получения данных заказа по ID (JSON) с приоритетным обращением к кэшу и fallback к БД.

Веб-интерфейс. Простая HTML-страница для ввода ID заказа и отображения информации, полученной от API.

Архитектурные решения

Сервис написан на Go, что обеспечивает высокую производительность при работе с большим потоком сообщений. Для работы с Kafka используется надежный клиент с подтверждением сообщений (commit), чтобы гарантировать, что данные не теряются при сбоях.

База данных PostgreSQL спроектирована с учётом структуры входящего JSON: заказы хранятся в связанных таблицах (заказ, доставка, оплата, товары) для нормализации данных.

Кэш реализован как потокобезопасная структура с мьютексами, что позволяет безопасно работать с ним из нескольких горутин одновременно.

Обработка ошибок и отказоустойчивость

  • Транзакции БД гарантируют атомарность при сохранении связанных данных
  • Подтверждение сообщений Kafka только после успешного сохранения в БД
  • Логирование всех ошибок для мониторинга и отладки

Технологии

  • Язык: Go 1.22+
  • Брокер сообщений: Apache Kafka
  • База данных: PostgreSQL
  • Кэширование: In-memory
  • Контейнеризация: Docker, Docker Compose