Skip to content

laBobberto/L0_project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Система Отслеживания Заказов

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

Стек Технологий

  • Backend: Go
  • Веб-сервер: chi
  • База данных: PostgreSQL
  • Брокер сообщений: Kafka
  • Кэширование: LRU-кэш (внутренняя реализация)
  • Мониторинг (Метрики): Prometheus
  • Мониторинг (Визуализация): Grafana
  • Мониторинг (Трассировка): Jaeger
  • Контейнеризация: Docker / docker-compose
  • Frontend: HTML, CSS, JavaScript

Как запустить проект

Шаг 1: Запуск всей инфраструктуры

В корневой папке проекта выполните одну команду:

docker-compose up -d

Эта команда в фоновом режиме запустит всю систему:

  • postgres-db: База данных PostgreSQL.
  • kafka: Брокер сообщений.
  • zookeeper: Необходим для Kafka.
  • l0-app: Основное Go-приложение (HTTP-сервер и Kafka-консюмер).
  • prometheus: Сбор метрик.
  • grafana: Дэшборды.
  • jaeger: Трассировка.

Приложение l0-app (основной сервис) автоматически подключится к БД, применит миграции и начнет "прогрев" кэша, загружая существующие заказы.

Шаг 2: Запуск генератора заказов (Продюсер)

Чтобы в системе появились данные, нужно запустить продюсер. Он не является частью docker-compose, так как нужен только для генерации тестовой нагрузки.

Откройте новый терминал и перейдите в директорию продюсера:

cd cmd/producer

Запустите продюсер:

go run main.go

Каждые несколько секунд продюсер будет генерировать случайный заказ и отправлять его в топик orders. В логах docker-compose (командой docker-compose logs -f l0-app) вы увидите, как основной сервис их получает, сохраняет в БД и кэширует.

Как использовать (Доступные сервисы)

После запуска вам доступны несколько интерфейсов:

Основное приложение (поиск заказов):
http://localhost:8081

Откройте эту страницу в браузере. В логах продюсера (из Шага 2) скопируйте UID одного из отправленных заказов. Вставьте его в поле ввода и нажмите "Найти Заказ".

Jaeger (Трассировка):
http://localhost:16686

В интерфейсе Jaeger выберите сервис l0-app, чтобы посмотреть трейсы запросов (от HTTP-хендлера до кэша или БД).

Prometheus (Метрики):
http://localhost:9090

Здесь можно посмотреть сырые метрики, которые собирает сервис (например, http_requests_total, cache_hits_total, db_errors_total). Лучше смотреть через дэшборд в Grafana

Grafana (Дэшборды):
http://localhost:3000

(Логин/пароль по умолчанию: admin/admin). Здесь можно настроить дэшборды, используя Prometheus как источник данных.

Структура проекта

L0/
├── cmd/ # Главные приложения
│ ├── main/ # Основной сервис (HTTP-сервер и Kafka-консюмер)
│ └── producer/ # Продюсер для генерации и отправки тестовых данных
├── internal/ # Внутренняя логика приложения
│ ├── api/ # HTTP-хендлеры и настройка сервера
│ ├── cache/ # Реализация LRU-кэша
│ ├── config/ # Конфигурация приложения
│ ├── database/ # Работа с PostgreSQL (включая миграции)
│ ├── generator/ # Генератор случайных заказов для продюсера
│ ├── kafka/ # Логика для Kafka-консюмера (и DLQ)
│ ├── metrics/ # Определение метрик Prometheus
│ ├── model/ # Структуры данных (модели)
│ ├── tracing/ # Настройка трассировки (Jaeger)
│ └── validator/ # Валидатор структур
├── web/ # Файлы для фронтенда (HTML, CSS, JS)
│ ├── static/ # CSS и JS файлы
│ └── index.html # Главная страница
├── .env # Конфигурация
├── .golangci.yml # Линтер
├── docker-compose.yml # Файл для запуска всей инфраструктуры
├── Dockerfile # Dockerfile для основного Go-приложения
├── go.mod # Зависимости проекта
├── go.sum 
├── model.json # Шаблон данных (для генератора и тестов)
└── prometheus.yml # Конфигурация Prometheus

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors