Latest commit

History

91 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Logistics Route Optimizer

Open Source система управления логистикой для высоконагруженных операций.


Проблема

Современные логистические операции требуют надежной системы обработки заказов, отслеживания транспорта и автоматической диспетчеризации. Существующие решения сложны в внедрении и не справляются с высокими нагрузками.

Решение

Logistics Route Optimizer — Open Source TMS с enterprise-grade надежностью:

  • Transactional Outbox — ни одного потерянного события
  • Saga Dispatch — автоматическая диспетчеризация с retry и компенсацией
  • Идемпотентность — без дубликатов при любой нагрузке
  • 50 000+ сообщений в секунду — обработка телеметрии без потерь

Устанавливаете на свой сервер — данные никогда не покидают вашу инфраструктуру.


Key Features

OSRM МаршрутизацияOpen Source Routing Machine с A* алгоритмом. Оптимальные маршруты по дорогам России (12ГБ OSM данных), расчёт ETA с учётом типов дорог
Saga DispatchАвтоматический подбор ТС, расчёт маршрута, назначение. 5 попыток с exponential backoff
Transaction OutboxСобытия пишутся в БД в той же транзакции что и данные — гарантия доставки
Высокие нагрузкиBackpressure в Kafka consumer, batch записи в PostgreSQL (50k+ rows/sec), партиционирование
ИдемпотентностьDatabase-based idempotency guards — ни одного дубликата даже при rebalance
PDF СчетаГенерация через pdfkit, хранение в MinIO (S3-совместимое хранилище)
МониторингPrometheus + Grafana (дашборды Kafka lag, gRPC latency, PG pool), Jaeger (distributed tracing), OpenTelemetry
БезопасностьJWT + Refresh tokens, RBAC, API Keys, audit logging

Screenshots

TrackingКарта маршрутов в реальном времени
CounterpartiesКонтрагенты, договоры, тарифы
SettingsНастройки: пользователи, роли, аудит

Архитектура

flowchart TB
subgraph Clients
Web[Web App<br/>localhost:5173]
Mobile[Mobile App]
External[External APIs]
end
subgraph Gateway
API[API Gateway<br/>:3000<br/>JWT · RBAC · WebSocket]
end
subgraph "Backend Services"
Order[order-service<br/>:50051]
Fleet[fleet-service<br/>:50053]
Routing[routing-service<br/>:50054]
Tracking[tracking-service<br/>:50055]
Dispatcher[dispatcher-service<br/>:50056]
Counterparty[counterparty-service<br/>:50057]
Invoice[invoice-service<br/>:50052]
end
subgraph "Databases"
PG1[(pg-order)]
PG2[(pg-fleet<br/>PostGIS)]
PG3[(pg-routing<br/>PostGIS)]
PG4[(pg-tracking<br/>partitioned)]
PG5[(pg-dispatcher)]
PG6[(pg-counterparty)]
PG7[(pg-invoices)]
PGA[(pg-auth)]
end
subgraph Infrastructure
Kafka[Kafka<br/>:9092]
OSRM[OSRM<br/>:5000]
MinIO[MinIO<br/>:9000]
Prometheus[Prometheus<br/>:9090]
Grafana[Grafana<br/>:3001]
Jaeger[Jaeger<br/>:16686]
end
Web --> API
Mobile --> API
External --> API
API --> Order
API --> Fleet
API --> Routing
API --> Tracking
API --> Counterparty
API --> Invoice
Dispatcher --> Order
Dispatcher --> Fleet
Dispatcher --> Routing
Order --> PG1
Order --> Kafka
Fleet --> PG2
Routing --> PG3
Routing -.-> OSRM
Tracking --> PG4
Dispatcher --> PG5
Counterparty --> PG6
Invoice --> PG7
Invoice --> MinIO
API --> PGA
Order -.publish.-> Kafka
Kafka -.consume.-> Dispatcher
Kafka -.consume.-> Tracking
Loading

Сервисы

СервисОтветственностьБаза данных
order-serviceЖизненный цикл заказов, OutboxPostgreSQL
fleet-serviceАвтопарк, PostGIS геозоныPostgreSQL + PostGIS
routing-serviceМаршруты через OSRM (A*), кеширование, ETAPostgreSQL + OSRM
tracking-serviceGPS телеметрия, batch writesPostgreSQL (partitioned)
dispatcher-serviceSaga orchestratorPostgreSQL
counterparty-serviceКонтрагенты, договоры, тарифыPostgreSQL
invoice-serviceСчета, PDF генерация в MinIOPostgreSQL + MinIO
api-gatewayREST API, auth, aggregationPostgreSQL

Инфраструктура

СервисПортОписание
osrm5000Open Source Routing Machine — маршрутизация по дорогам России
minio9000S3-совместимое хранилище для PDF
prometheus9090Сбор метрик
grafana3001Дашборды (Kafka lag, gRPC latency, PG pool)
jaeger16686Distributed tracing

Быстрый старт

# Клонируем
git clone https://github.com/your-org/logistics-optimizer
cd logistics-optimizer
# Полная инициализация (зависимости + OSM данные + Docker образы)
make init
# Запуск (Docker + фронтенд)
make up:dev
# Или отдельно:
make up # Только Docker
make web # Только фронтенд

URL:

Требования: Docker 24+, Docker Compose 2.20+, pnpm 9+, ~15GB диска

Разработка

# Сборка
make build
# Тесты
make test
make lint
make typecheck
# Логи
make logs
# Очистка
make clean # Контейнеры + тома
make clean:all # + node_modules + osrm-data

Tech Stack

КомпонентТехнология
BackendNestJS, TypeScript
База данныхPostgreSQL + PostGIS
Message brokerApache Kafka
Inter-servicegRPC
ObservabilityOpenTelemetry, Prometheus, Grafana, Jaeger
FrontendReact, Zustand, TanStack Table

Надёжность

Transactional Outbox

asynccreateOrder(dto){returndataSource.transaction(async(em)=>{constorder=em.create(OrderEntity,dto);awaitem.save(order);// Событие в той же транзакции — не потеряетсяawaitem.save(OutboxEvent,{eventType: 'order.created',payload: {orderId: order.id, ...dto}});});}

Saga Dispatch

order.created
→ GetAvailableVehicles (fleet-service)
→ CalculateRoute (routing-service) → AssignVehicle (fleet-service, optimistic lock)
→ UpdateOrderStatus (order-service)
→ Order Assigned ✓
При ошибке:
→ ReleaseVehicle
→ Retry × 5 (1s → 2s → 4s → 8s → 16s)
→ Order Failed

Backpressure

Kafka Consumer → Queue (500) → Batch Writer → PostgreSQL
↓
If overloaded:
Pause Kafka partition
Resume after flush

Roadmap

  • Kubernetes Helm charts
  • СМС/Email уведомления
  • Мобильное приложение
  • Интеграции (Wildberries, СДЭК, Деловые Линии)

Разработка

# Установить зависимости
make install
# Запуск всех сервисов (dev mode)
pnpm start:dev
# Один сервис
pnpm --filter @logistics/order-service start:dev
# Тесты
make test
make lint
make typecheck
# Очистка
make clean
make clean:all

Документация

Полная документация доступна в директории docs/:

ФайлСодержимое
docs/README.mdОбзор архитектуры с диаграммами
docs/SERVICES.mdДетальное описание каждого сервиса
docs/COMMUNICATION.mdgRPC методы и Kafka топики
docs/DATABASE.mdСхемы всех баз данных
docs/API.mdREST API reference
docs/FEATURES.mdПаттерны: Outbox, Saga, Idempotency, Backpressure
docs/PROJECT.mdProduct vision и бизнес-фичи

License

MIT — бесплатно, навсегда, без ограничений.

About

Микросервисная система оптимизации логистических маршрутов NestJS · Kafka · gRPC · PostgreSQL+PostGIS · OpenTelemetry · Grafana · Jaeger

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

91 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Logistics Route Optimizer

Open Source система управления логистикой для высоконагруженных операций.


Проблема

Современные логистические операции требуют надежной системы обработки заказов, отслеживания транспорта и автоматической диспетчеризации. Существующие решения сложны в внедрении и не справляются с высокими нагрузками.

Решение

Logistics Route Optimizer — Open Source TMS с enterprise-grade надежностью:

  • Transactional Outbox — ни одного потерянного события
  • Saga Dispatch — автоматическая диспетчеризация с retry и компенсацией
  • Идемпотентность — без дубликатов при любой нагрузке
  • 50 000+ сообщений в секунду — обработка телеметрии без потерь

Устанавливаете на свой сервер — данные никогда не покидают вашу инфраструктуру.


Key Features

OSRM МаршрутизацияOpen Source Routing Machine с A* алгоритмом. Оптимальные маршруты по дорогам России (12ГБ OSM данных), расчёт ETA с учётом типов дорог
Saga DispatchАвтоматический подбор ТС, расчёт маршрута, назначение. 5 попыток с exponential backoff
Transaction OutboxСобытия пишутся в БД в той же транзакции что и данные — гарантия доставки
Высокие нагрузкиBackpressure в Kafka consumer, batch записи в PostgreSQL (50k+ rows/sec), партиционирование
ИдемпотентностьDatabase-based idempotency guards — ни одного дубликата даже при rebalance
PDF СчетаГенерация через pdfkit, хранение в MinIO (S3-совместимое хранилище)
МониторингPrometheus + Grafana (дашборды Kafka lag, gRPC latency, PG pool), Jaeger (distributed tracing), OpenTelemetry
БезопасностьJWT + Refresh tokens, RBAC, API Keys, audit logging

Screenshots

TrackingКарта маршрутов в реальном времени
CounterpartiesКонтрагенты, договоры, тарифы
SettingsНастройки: пользователи, роли, аудит

Архитектура

flowchart TB
subgraph Clients
Web[Web App<br/>localhost:5173]
Mobile[Mobile App]
External[External APIs]
end
subgraph Gateway
API[API Gateway<br/>:3000<br/>JWT · RBAC · WebSocket]
end
subgraph "Backend Services"
Order[order-service<br/>:50051]
Fleet[fleet-service<br/>:50053]
Routing[routing-service<br/>:50054]
Tracking[tracking-service<br/>:50055]
Dispatcher[dispatcher-service<br/>:50056]
Counterparty[counterparty-service<br/>:50057]
Invoice[invoice-service<br/>:50052]
end
subgraph "Databases"
PG1[(pg-order)]
PG2[(pg-fleet<br/>PostGIS)]
PG3[(pg-routing<br/>PostGIS)]
PG4[(pg-tracking<br/>partitioned)]
PG5[(pg-dispatcher)]
PG6[(pg-counterparty)]
PG7[(pg-invoices)]
PGA[(pg-auth)]
end
subgraph Infrastructure
Kafka[Kafka<br/>:9092]
OSRM[OSRM<br/>:5000]
MinIO[MinIO<br/>:9000]
Prometheus[Prometheus<br/>:9090]
Grafana[Grafana<br/>:3001]
Jaeger[Jaeger<br/>:16686]
end
Web --> API
Mobile --> API
External --> API
API --> Order
API --> Fleet
API --> Routing
API --> Tracking
API --> Counterparty
API --> Invoice
Dispatcher --> Order
Dispatcher --> Fleet
Dispatcher --> Routing
Order --> PG1
Order --> Kafka
Fleet --> PG2
Routing --> PG3
Routing -.-> OSRM
Tracking --> PG4
Dispatcher --> PG5
Counterparty --> PG6
Invoice --> PG7
Invoice --> MinIO
API --> PGA
Order -.publish.-> Kafka
Kafka -.consume.-> Dispatcher
Kafka -.consume.-> Tracking
Loading

Сервисы

СервисОтветственностьБаза данных
order-serviceЖизненный цикл заказов, OutboxPostgreSQL
fleet-serviceАвтопарк, PostGIS геозоныPostgreSQL + PostGIS
routing-serviceМаршруты через OSRM (A*), кеширование, ETAPostgreSQL + OSRM
tracking-serviceGPS телеметрия, batch writesPostgreSQL (partitioned)
dispatcher-serviceSaga orchestratorPostgreSQL
counterparty-serviceКонтрагенты, договоры, тарифыPostgreSQL
invoice-serviceСчета, PDF генерация в MinIOPostgreSQL + MinIO
api-gatewayREST API, auth, aggregationPostgreSQL

Инфраструктура

СервисПортОписание
osrm5000Open Source Routing Machine — маршрутизация по дорогам России
minio9000S3-совместимое хранилище для PDF
prometheus9090Сбор метрик
grafana3001Дашборды (Kafka lag, gRPC latency, PG pool)
jaeger16686Distributed tracing

Быстрый старт

# Клонируем
git clone https://github.com/your-org/logistics-optimizer
cd logistics-optimizer
# Полная инициализация (зависимости + OSM данные + Docker образы)
make init
# Запуск (Docker + фронтенд)
make up:dev
# Или отдельно:
make up # Только Docker
make web # Только фронтенд

URL:

Требования: Docker 24+, Docker Compose 2.20+, pnpm 9+, ~15GB диска

Разработка

# Сборка
make build
# Тесты
make test
make lint
make typecheck
# Логи
make logs
# Очистка
make clean # Контейнеры + тома
make clean:all # + node_modules + osrm-data

Tech Stack

КомпонентТехнология
BackendNestJS, TypeScript
База данныхPostgreSQL + PostGIS
Message brokerApache Kafka
Inter-servicegRPC
ObservabilityOpenTelemetry, Prometheus, Grafana, Jaeger
FrontendReact, Zustand, TanStack Table

Надёжность

Transactional Outbox

asynccreateOrder(dto){returndataSource.transaction(async(em)=>{constorder=em.create(OrderEntity,dto);awaitem.save(order);// Событие в той же транзакции — не потеряетсяawaitem.save(OutboxEvent,{eventType: 'order.created',payload: {orderId: order.id, ...dto}});});}

Saga Dispatch

order.created
→ GetAvailableVehicles (fleet-service)
→ CalculateRoute (routing-service) → AssignVehicle (fleet-service, optimistic lock)
→ UpdateOrderStatus (order-service)
→ Order Assigned ✓
При ошибке:
→ ReleaseVehicle
→ Retry × 5 (1s → 2s → 4s → 8s → 16s)
→ Order Failed

Backpressure

Kafka Consumer → Queue (500) → Batch Writer → PostgreSQL
↓
If overloaded:
Pause Kafka partition
Resume after flush

Roadmap

  • Kubernetes Helm charts
  • СМС/Email уведомления
  • Мобильное приложение
  • Интеграции (Wildberries, СДЭК, Деловые Линии)

Разработка

# Установить зависимости
make install
# Запуск всех сервисов (dev mode)
pnpm start:dev
# Один сервис
pnpm --filter @logistics/order-service start:dev
# Тесты
make test
make lint
make typecheck
# Очистка
make clean
make clean:all

Документация

Полная документация доступна в директории docs/:

ФайлСодержимое
docs/README.mdОбзор архитектуры с диаграммами
docs/SERVICES.mdДетальное описание каждого сервиса
docs/COMMUNICATION.mdgRPC методы и Kafka топики
docs/DATABASE.mdСхемы всех баз данных
docs/API.mdREST API reference
docs/FEATURES.mdПаттерны: Outbox, Saga, Idempotency, Backpressure
docs/PROJECT.mdProduct vision и бизнес-фичи

License

MIT — бесплатно, навсегда, без ограничений.

About

Микросервисная система оптимизации логистических маршрутов NestJS · Kafka · gRPC · PostgreSQL+PostGIS · OpenTelemetry · Grafana · Jaeger

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

91 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Logistics Route Optimizer

Open Source система управления логистикой для высоконагруженных операций.


Проблема

Современные логистические операции требуют надежной системы обработки заказов, отслеживания транспорта и автоматической диспетчеризации. Существующие решения сложны в внедрении и не справляются с высокими нагрузками.

Решение

Logistics Route Optimizer — Open Source TMS с enterprise-grade надежностью:

  • Transactional Outbox — ни одного потерянного события
  • Saga Dispatch — автоматическая диспетчеризация с retry и компенсацией
  • Идемпотентность — без дубликатов при любой нагрузке
  • 50 000+ сообщений в секунду — обработка телеметрии без потерь

Устанавливаете на свой сервер — данные никогда не покидают вашу инфраструктуру.


Key Features

OSRM МаршрутизацияOpen Source Routing Machine с A* алгоритмом. Оптимальные маршруты по дорогам России (12ГБ OSM данных), расчёт ETA с учётом типов дорог
Saga DispatchАвтоматический подбор ТС, расчёт маршрута, назначение. 5 попыток с exponential backoff
Transaction OutboxСобытия пишутся в БД в той же транзакции что и данные — гарантия доставки
Высокие нагрузкиBackpressure в Kafka consumer, batch записи в PostgreSQL (50k+ rows/sec), партиционирование
ИдемпотентностьDatabase-based idempotency guards — ни одного дубликата даже при rebalance
PDF СчетаГенерация через pdfkit, хранение в MinIO (S3-совместимое хранилище)
МониторингPrometheus + Grafana (дашборды Kafka lag, gRPC latency, PG pool), Jaeger (distributed tracing), OpenTelemetry
БезопасностьJWT + Refresh tokens, RBAC, API Keys, audit logging

Screenshots

TrackingКарта маршрутов в реальном времени
CounterpartiesКонтрагенты, договоры, тарифы
SettingsНастройки: пользователи, роли, аудит

Архитектура

flowchart TB
subgraph Clients
Web[Web App<br/>localhost:5173]
Mobile[Mobile App]
External[External APIs]
end
subgraph Gateway
API[API Gateway<br/>:3000<br/>JWT · RBAC · WebSocket]
end
subgraph "Backend Services"
Order[order-service<br/>:50051]
Fleet[fleet-service<br/>:50053]
Routing[routing-service<br/>:50054]
Tracking[tracking-service<br/>:50055]
Dispatcher[dispatcher-service<br/>:50056]
Counterparty[counterparty-service<br/>:50057]
Invoice[invoice-service<br/>:50052]
end
subgraph "Databases"
PG1[(pg-order)]
PG2[(pg-fleet<br/>PostGIS)]
PG3[(pg-routing<br/>PostGIS)]
PG4[(pg-tracking<br/>partitioned)]
PG5[(pg-dispatcher)]
PG6[(pg-counterparty)]
PG7[(pg-invoices)]
PGA[(pg-auth)]
end
subgraph Infrastructure
Kafka[Kafka<br/>:9092]
OSRM[OSRM<br/>:5000]
MinIO[MinIO<br/>:9000]
Prometheus[Prometheus<br/>:9090]
Grafana[Grafana<br/>:3001]
Jaeger[Jaeger<br/>:16686]
end
Web --> API
Mobile --> API
External --> API
API --> Order
API --> Fleet
API --> Routing
API --> Tracking
API --> Counterparty
API --> Invoice
Dispatcher --> Order
Dispatcher --> Fleet
Dispatcher --> Routing
Order --> PG1
Order --> Kafka
Fleet --> PG2
Routing --> PG3
Routing -.-> OSRM
Tracking --> PG4
Dispatcher --> PG5
Counterparty --> PG6
Invoice --> PG7
Invoice --> MinIO
API --> PGA
Order -.publish.-> Kafka
Kafka -.consume.-> Dispatcher
Kafka -.consume.-> Tracking
Loading

Сервисы

СервисОтветственностьБаза данных
order-serviceЖизненный цикл заказов, OutboxPostgreSQL
fleet-serviceАвтопарк, PostGIS геозоныPostgreSQL + PostGIS
routing-serviceМаршруты через OSRM (A*), кеширование, ETAPostgreSQL + OSRM
tracking-serviceGPS телеметрия, batch writesPostgreSQL (partitioned)
dispatcher-serviceSaga orchestratorPostgreSQL
counterparty-serviceКонтрагенты, договоры, тарифыPostgreSQL
invoice-serviceСчета, PDF генерация в MinIOPostgreSQL + MinIO
api-gatewayREST API, auth, aggregationPostgreSQL

Инфраструктура

СервисПортОписание
osrm5000Open Source Routing Machine — маршрутизация по дорогам России
minio9000S3-совместимое хранилище для PDF
prometheus9090Сбор метрик
grafana3001Дашборды (Kafka lag, gRPC latency, PG pool)
jaeger16686Distributed tracing

Быстрый старт

# Клонируем
git clone https://github.com/your-org/logistics-optimizer
cd logistics-optimizer
# Полная инициализация (зависимости + OSM данные + Docker образы)
make init
# Запуск (Docker + фронтенд)
make up:dev
# Или отдельно:
make up # Только Docker
make web # Только фронтенд

URL:

Требования: Docker 24+, Docker Compose 2.20+, pnpm 9+, ~15GB диска

Разработка

# Сборка
make build
# Тесты
make test
make lint
make typecheck
# Логи
make logs
# Очистка
make clean # Контейнеры + тома
make clean:all # + node_modules + osrm-data

Tech Stack

КомпонентТехнология
BackendNestJS, TypeScript
База данныхPostgreSQL + PostGIS
Message brokerApache Kafka
Inter-servicegRPC
ObservabilityOpenTelemetry, Prometheus, Grafana, Jaeger
FrontendReact, Zustand, TanStack Table

Надёжность

Transactional Outbox

asynccreateOrder(dto){returndataSource.transaction(async(em)=>{constorder=em.create(OrderEntity,dto);awaitem.save(order);// Событие в той же транзакции — не потеряетсяawaitem.save(OutboxEvent,{eventType: 'order.created',payload: {orderId: order.id, ...dto}});});}

Saga Dispatch

order.created
→ GetAvailableVehicles (fleet-service)
→ CalculateRoute (routing-service) → AssignVehicle (fleet-service, optimistic lock)
→ UpdateOrderStatus (order-service)
→ Order Assigned ✓
При ошибке:
→ ReleaseVehicle
→ Retry × 5 (1s → 2s → 4s → 8s → 16s)
→ Order Failed

Backpressure

Kafka Consumer → Queue (500) → Batch Writer → PostgreSQL
↓
If overloaded:
Pause Kafka partition
Resume after flush

Roadmap

  • Kubernetes Helm charts
  • СМС/Email уведомления
  • Мобильное приложение
  • Интеграции (Wildberries, СДЭК, Деловые Линии)

Разработка

# Установить зависимости
make install
# Запуск всех сервисов (dev mode)
pnpm start:dev
# Один сервис
pnpm --filter @logistics/order-service start:dev
# Тесты
make test
make lint
make typecheck
# Очистка
make clean
make clean:all

Документация

Полная документация доступна в директории docs/:

ФайлСодержимое
docs/README.mdОбзор архитектуры с диаграммами
docs/SERVICES.mdДетальное описание каждого сервиса
docs/COMMUNICATION.mdgRPC методы и Kafka топики
docs/DATABASE.mdСхемы всех баз данных
docs/API.mdREST API reference
docs/FEATURES.mdПаттерны: Outbox, Saga, Idempotency, Backpressure
docs/PROJECT.mdProduct vision и бизнес-фичи

License

MIT — бесплатно, навсегда, без ограничений.

About

Микросервисная система оптимизации логистических маршрутов NestJS · Kafka · gRPC · PostgreSQL+PostGIS · OpenTelemetry · Grafana · Jaeger

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

91 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Logistics Route Optimizer

Open Source система управления логистикой для высоконагруженных операций.


Проблема

Современные логистические операции требуют надежной системы обработки заказов, отслеживания транспорта и автоматической диспетчеризации. Существующие решения сложны в внедрении и не справляются с высокими нагрузками.

Решение

Logistics Route Optimizer — Open Source TMS с enterprise-grade надежностью:

  • Transactional Outbox — ни одного потерянного события
  • Saga Dispatch — автоматическая диспетчеризация с retry и компенсацией
  • Идемпотентность — без дубликатов при любой нагрузке
  • 50 000+ сообщений в секунду — обработка телеметрии без потерь

Устанавливаете на свой сервер — данные никогда не покидают вашу инфраструктуру.


Key Features

OSRM МаршрутизацияOpen Source Routing Machine с A* алгоритмом. Оптимальные маршруты по дорогам России (12ГБ OSM данных), расчёт ETA с учётом типов дорог
Saga DispatchАвтоматический подбор ТС, расчёт маршрута, назначение. 5 попыток с exponential backoff
Transaction OutboxСобытия пишутся в БД в той же транзакции что и данные — гарантия доставки
Высокие нагрузкиBackpressure в Kafka consumer, batch записи в PostgreSQL (50k+ rows/sec), партиционирование
ИдемпотентностьDatabase-based idempotency guards — ни одного дубликата даже при rebalance
PDF СчетаГенерация через pdfkit, хранение в MinIO (S3-совместимое хранилище)
МониторингPrometheus + Grafana (дашборды Kafka lag, gRPC latency, PG pool), Jaeger (distributed tracing), OpenTelemetry
БезопасностьJWT + Refresh tokens, RBAC, API Keys, audit logging

Screenshots

TrackingКарта маршрутов в реальном времени
CounterpartiesКонтрагенты, договоры, тарифы
SettingsНастройки: пользователи, роли, аудит

Архитектура

flowchart TB
subgraph Clients
Web[Web App<br/>localhost:5173]
Mobile[Mobile App]
External[External APIs]
end
subgraph Gateway
API[API Gateway<br/>:3000<br/>JWT · RBAC · WebSocket]
end
subgraph "Backend Services"
Order[order-service<br/>:50051]
Fleet[fleet-service<br/>:50053]
Routing[routing-service<br/>:50054]
Tracking[tracking-service<br/>:50055]
Dispatcher[dispatcher-service<br/>:50056]
Counterparty[counterparty-service<br/>:50057]
Invoice[invoice-service<br/>:50052]
end
subgraph "Databases"
PG1[(pg-order)]
PG2[(pg-fleet<br/>PostGIS)]
PG3[(pg-routing<br/>PostGIS)]
PG4[(pg-tracking<br/>partitioned)]
PG5[(pg-dispatcher)]
PG6[(pg-counterparty)]
PG7[(pg-invoices)]
PGA[(pg-auth)]
end
subgraph Infrastructure
Kafka[Kafka<br/>:9092]
OSRM[OSRM<br/>:5000]
MinIO[MinIO<br/>:9000]
Prometheus[Prometheus<br/>:9090]
Grafana[Grafana<br/>:3001]
Jaeger[Jaeger<br/>:16686]
end
Web --> API
Mobile --> API
External --> API
API --> Order
API --> Fleet
API --> Routing
API --> Tracking
API --> Counterparty
API --> Invoice
Dispatcher --> Order
Dispatcher --> Fleet
Dispatcher --> Routing
Order --> PG1
Order --> Kafka
Fleet --> PG2
Routing --> PG3
Routing -.-> OSRM
Tracking --> PG4
Dispatcher --> PG5
Counterparty --> PG6
Invoice --> PG7
Invoice --> MinIO
API --> PGA
Order -.publish.-> Kafka
Kafka -.consume.-> Dispatcher
Kafka -.consume.-> Tracking
Loading

Сервисы

СервисОтветственностьБаза данных
order-serviceЖизненный цикл заказов, OutboxPostgreSQL
fleet-serviceАвтопарк, PostGIS геозоныPostgreSQL + PostGIS
routing-serviceМаршруты через OSRM (A*), кеширование, ETAPostgreSQL + OSRM
tracking-serviceGPS телеметрия, batch writesPostgreSQL (partitioned)
dispatcher-serviceSaga orchestratorPostgreSQL
counterparty-serviceКонтрагенты, договоры, тарифыPostgreSQL
invoice-serviceСчета, PDF генерация в MinIOPostgreSQL + MinIO
api-gatewayREST API, auth, aggregationPostgreSQL

Инфраструктура

СервисПортОписание
osrm5000Open Source Routing Machine — маршрутизация по дорогам России
minio9000S3-совместимое хранилище для PDF
prometheus9090Сбор метрик
grafana3001Дашборды (Kafka lag, gRPC latency, PG pool)
jaeger16686Distributed tracing

Быстрый старт

# Клонируем
git clone https://github.com/your-org/logistics-optimizer
cd logistics-optimizer
# Полная инициализация (зависимости + OSM данные + Docker образы)
make init
# Запуск (Docker + фронтенд)
make up:dev
# Или отдельно:
make up # Только Docker
make web # Только фронтенд

URL:

Требования: Docker 24+, Docker Compose 2.20+, pnpm 9+, ~15GB диска

Разработка

# Сборка
make build
# Тесты
make test
make lint
make typecheck
# Логи
make logs
# Очистка
make clean # Контейнеры + тома
make clean:all # + node_modules + osrm-data

Tech Stack

КомпонентТехнология
BackendNestJS, TypeScript
База данныхPostgreSQL + PostGIS
Message brokerApache Kafka
Inter-servicegRPC
ObservabilityOpenTelemetry, Prometheus, Grafana, Jaeger
FrontendReact, Zustand, TanStack Table

Надёжность

Transactional Outbox

asynccreateOrder(dto){returndataSource.transaction(async(em)=>{constorder=em.create(OrderEntity,dto);awaitem.save(order);// Событие в той же транзакции — не потеряетсяawaitem.save(OutboxEvent,{eventType: 'order.created',payload: {orderId: order.id, ...dto}});});}

Saga Dispatch

order.created
→ GetAvailableVehicles (fleet-service)
→ CalculateRoute (routing-service) → AssignVehicle (fleet-service, optimistic lock)
→ UpdateOrderStatus (order-service)
→ Order Assigned ✓
При ошибке:
→ ReleaseVehicle
→ Retry × 5 (1s → 2s → 4s → 8s → 16s)
→ Order Failed

Backpressure

Kafka Consumer → Queue (500) → Batch Writer → PostgreSQL
↓
If overloaded:
Pause Kafka partition
Resume after flush

Roadmap

  • Kubernetes Helm charts
  • СМС/Email уведомления
  • Мобильное приложение
  • Интеграции (Wildberries, СДЭК, Деловые Линии)

Разработка

# Установить зависимости
make install
# Запуск всех сервисов (dev mode)
pnpm start:dev
# Один сервис
pnpm --filter @logistics/order-service start:dev
# Тесты
make test
make lint
make typecheck
# Очистка
make clean
make clean:all

Документация

Полная документация доступна в директории docs/:

ФайлСодержимое
docs/README.mdОбзор архитектуры с диаграммами
docs/SERVICES.mdДетальное описание каждого сервиса
docs/COMMUNICATION.mdgRPC методы и Kafka топики
docs/DATABASE.mdСхемы всех баз данных
docs/API.mdREST API reference
docs/FEATURES.mdПаттерны: Outbox, Saga, Idempotency, Backpressure
docs/PROJECT.mdProduct vision и бизнес-фичи

License

MIT — бесплатно, навсегда, без ограничений.

About

Микросервисная система оптимизации логистических маршрутов NestJS · Kafka · gRPC · PostgreSQL+PostGIS · OpenTelemetry · Grafana · Jaeger

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

91 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Logistics Route Optimizer

Open Source система управления логистикой для высоконагруженных операций.


Проблема

Современные логистические операции требуют надежной системы обработки заказов, отслеживания транспорта и автоматической диспетчеризации. Существующие решения сложны в внедрении и не справляются с высокими нагрузками.

Решение

Logistics Route Optimizer — Open Source TMS с enterprise-grade надежностью:

  • Transactional Outbox — ни одного потерянного события
  • Saga Dispatch — автоматическая диспетчеризация с retry и компенсацией
  • Идемпотентность — без дубликатов при любой нагрузке
  • 50 000+ сообщений в секунду — обработка телеметрии без потерь

Устанавливаете на свой сервер — данные никогда не покидают вашу инфраструктуру.


Key Features

OSRM МаршрутизацияOpen Source Routing Machine с A* алгоритмом. Оптимальные маршруты по дорогам России (12ГБ OSM данных), расчёт ETA с учётом типов дорог
Saga DispatchАвтоматический подбор ТС, расчёт маршрута, назначение. 5 попыток с exponential backoff
Transaction OutboxСобытия пишутся в БД в той же транзакции что и данные — гарантия доставки
Высокие нагрузкиBackpressure в Kafka consumer, batch записи в PostgreSQL (50k+ rows/sec), партиционирование
ИдемпотентностьDatabase-based idempotency guards — ни одного дубликата даже при rebalance
PDF СчетаГенерация через pdfkit, хранение в MinIO (S3-совместимое хранилище)
МониторингPrometheus + Grafana (дашборды Kafka lag, gRPC latency, PG pool), Jaeger (distributed tracing), OpenTelemetry
БезопасностьJWT + Refresh tokens, RBAC, API Keys, audit logging

Screenshots

TrackingКарта маршрутов в реальном времени
CounterpartiesКонтрагенты, договоры, тарифы
SettingsНастройки: пользователи, роли, аудит

Архитектура

flowchart TB
subgraph Clients
Web[Web App<br/>localhost:5173]
Mobile[Mobile App]
External[External APIs]
end
subgraph Gateway
API[API Gateway<br/>:3000<br/>JWT · RBAC · WebSocket]
end
subgraph "Backend Services"
Order[order-service<br/>:50051]
Fleet[fleet-service<br/>:50053]
Routing[routing-service<br/>:50054]
Tracking[tracking-service<br/>:50055]
Dispatcher[dispatcher-service<br/>:50056]
Counterparty[counterparty-service<br/>:50057]
Invoice[invoice-service<br/>:50052]
end
subgraph "Databases"
PG1[(pg-order)]
PG2[(pg-fleet<br/>PostGIS)]
PG3[(pg-routing<br/>PostGIS)]
PG4[(pg-tracking<br/>partitioned)]
PG5[(pg-dispatcher)]
PG6[(pg-counterparty)]
PG7[(pg-invoices)]
PGA[(pg-auth)]
end
subgraph Infrastructure
Kafka[Kafka<br/>:9092]
OSRM[OSRM<br/>:5000]
MinIO[MinIO<br/>:9000]
Prometheus[Prometheus<br/>:9090]
Grafana[Grafana<br/>:3001]
Jaeger[Jaeger<br/>:16686]
end
Web --> API
Mobile --> API
External --> API
API --> Order
API --> Fleet
API --> Routing
API --> Tracking
API --> Counterparty
API --> Invoice
Dispatcher --> Order
Dispatcher --> Fleet
Dispatcher --> Routing
Order --> PG1
Order --> Kafka
Fleet --> PG2
Routing --> PG3
Routing -.-> OSRM
Tracking --> PG4
Dispatcher --> PG5
Counterparty --> PG6
Invoice --> PG7
Invoice --> MinIO
API --> PGA
Order -.publish.-> Kafka
Kafka -.consume.-> Dispatcher
Kafka -.consume.-> Tracking
Loading

Сервисы

СервисОтветственностьБаза данных
order-serviceЖизненный цикл заказов, OutboxPostgreSQL
fleet-serviceАвтопарк, PostGIS геозоныPostgreSQL + PostGIS
routing-serviceМаршруты через OSRM (A*), кеширование, ETAPostgreSQL + OSRM
tracking-serviceGPS телеметрия, batch writesPostgreSQL (partitioned)
dispatcher-serviceSaga orchestratorPostgreSQL
counterparty-serviceКонтрагенты, договоры, тарифыPostgreSQL
invoice-serviceСчета, PDF генерация в MinIOPostgreSQL + MinIO
api-gatewayREST API, auth, aggregationPostgreSQL

Инфраструктура

СервисПортОписание
osrm5000Open Source Routing Machine — маршрутизация по дорогам России
minio9000S3-совместимое хранилище для PDF
prometheus9090Сбор метрик
grafana3001Дашборды (Kafka lag, gRPC latency, PG pool)
jaeger16686Distributed tracing

Быстрый старт

# Клонируем
git clone https://github.com/your-org/logistics-optimizer
cd logistics-optimizer
# Полная инициализация (зависимости + OSM данные + Docker образы)
make init
# Запуск (Docker + фронтенд)
make up:dev
# Или отдельно:
make up # Только Docker
make web # Только фронтенд

URL:

Требования: Docker 24+, Docker Compose 2.20+, pnpm 9+, ~15GB диска

Разработка

# Сборка
make build
# Тесты
make test
make lint
make typecheck
# Логи
make logs
# Очистка
make clean # Контейнеры + тома
make clean:all # + node_modules + osrm-data

Tech Stack

КомпонентТехнология
BackendNestJS, TypeScript
База данныхPostgreSQL + PostGIS
Message brokerApache Kafka
Inter-servicegRPC
ObservabilityOpenTelemetry, Prometheus, Grafana, Jaeger
FrontendReact, Zustand, TanStack Table

Надёжность

Transactional Outbox

asynccreateOrder(dto){returndataSource.transaction(async(em)=>{constorder=em.create(OrderEntity,dto);awaitem.save(order);// Событие в той же транзакции — не потеряетсяawaitem.save(OutboxEvent,{eventType: 'order.created',payload: {orderId: order.id, ...dto}});});}

Saga Dispatch

order.created
→ GetAvailableVehicles (fleet-service)
→ CalculateRoute (routing-service) → AssignVehicle (fleet-service, optimistic lock)
→ UpdateOrderStatus (order-service)
→ Order Assigned ✓
При ошибке:
→ ReleaseVehicle
→ Retry × 5 (1s → 2s → 4s → 8s → 16s)
→ Order Failed

Backpressure

Kafka Consumer → Queue (500) → Batch Writer → PostgreSQL
↓
If overloaded:
Pause Kafka partition
Resume after flush

Roadmap

  • Kubernetes Helm charts
  • СМС/Email уведомления
  • Мобильное приложение
  • Интеграции (Wildberries, СДЭК, Деловые Линии)

Разработка

# Установить зависимости
make install
# Запуск всех сервисов (dev mode)
pnpm start:dev
# Один сервис
pnpm --filter @logistics/order-service start:dev
# Тесты
make test
make lint
make typecheck
# Очистка
make clean
make clean:all

Документация

Полная документация доступна в директории docs/:

ФайлСодержимое
docs/README.mdОбзор архитектуры с диаграммами
docs/SERVICES.mdДетальное описание каждого сервиса
docs/COMMUNICATION.mdgRPC методы и Kafka топики
docs/DATABASE.mdСхемы всех баз данных
docs/API.mdREST API reference
docs/FEATURES.mdПаттерны: Outbox, Saga, Idempotency, Backpressure
docs/PROJECT.mdProduct vision и бизнес-фичи

License

MIT — бесплатно, навсегда, без ограничений.

About

Микросервисная система оптимизации логистических маршрутов NestJS · Kafka · gRPC · PostgreSQL+PostGIS · OpenTelemetry · Grafana · Jaeger

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

91 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Logistics Route Optimizer

Open Source система управления логистикой для высоконагруженных операций.


Проблема

Современные логистические операции требуют надежной системы обработки заказов, отслеживания транспорта и автоматической диспетчеризации. Существующие решения сложны в внедрении и не справляются с высокими нагрузками.

Решение

Logistics Route Optimizer — Open Source TMS с enterprise-grade надежностью:

  • Transactional Outbox — ни одного потерянного события
  • Saga Dispatch — автоматическая диспетчеризация с retry и компенсацией
  • Идемпотентность — без дубликатов при любой нагрузке
  • 50 000+ сообщений в секунду — обработка телеметрии без потерь

Устанавливаете на свой сервер — данные никогда не покидают вашу инфраструктуру.


Key Features

OSRM МаршрутизацияOpen Source Routing Machine с A* алгоритмом. Оптимальные маршруты по дорогам России (12ГБ OSM данных), расчёт ETA с учётом типов дорог
Saga DispatchАвтоматический подбор ТС, расчёт маршрута, назначение. 5 попыток с exponential backoff
Transaction OutboxСобытия пишутся в БД в той же транзакции что и данные — гарантия доставки
Высокие нагрузкиBackpressure в Kafka consumer, batch записи в PostgreSQL (50k+ rows/sec), партиционирование
ИдемпотентностьDatabase-based idempotency guards — ни одного дубликата даже при rebalance
PDF СчетаГенерация через pdfkit, хранение в MinIO (S3-совместимое хранилище)
МониторингPrometheus + Grafana (дашборды Kafka lag, gRPC latency, PG pool), Jaeger (distributed tracing), OpenTelemetry
БезопасностьJWT + Refresh tokens, RBAC, API Keys, audit logging

Screenshots

TrackingКарта маршрутов в реальном времени
CounterpartiesКонтрагенты, договоры, тарифы
SettingsНастройки: пользователи, роли, аудит

Архитектура

flowchart TB
subgraph Clients
Web[Web App<br/>localhost:5173]
Mobile[Mobile App]
External[External APIs]
end
subgraph Gateway
API[API Gateway<br/>:3000<br/>JWT · RBAC · WebSocket]
end
subgraph "Backend Services"
Order[order-service<br/>:50051]
Fleet[fleet-service<br/>:50053]
Routing[routing-service<br/>:50054]
Tracking[tracking-service<br/>:50055]
Dispatcher[dispatcher-service<br/>:50056]
Counterparty[counterparty-service<br/>:50057]
Invoice[invoice-service<br/>:50052]
end
subgraph "Databases"
PG1[(pg-order)]
PG2[(pg-fleet<br/>PostGIS)]
PG3[(pg-routing<br/>PostGIS)]
PG4[(pg-tracking<br/>partitioned)]
PG5[(pg-dispatcher)]
PG6[(pg-counterparty)]
PG7[(pg-invoices)]
PGA[(pg-auth)]
end
subgraph Infrastructure
Kafka[Kafka<br/>:9092]
OSRM[OSRM<br/>:5000]
MinIO[MinIO<br/>:9000]
Prometheus[Prometheus<br/>:9090]
Grafana[Grafana<br/>:3001]
Jaeger[Jaeger<br/>:16686]
end
Web --> API
Mobile --> API
External --> API
API --> Order
API --> Fleet
API --> Routing
API --> Tracking
API --> Counterparty
API --> Invoice
Dispatcher --> Order
Dispatcher --> Fleet
Dispatcher --> Routing
Order --> PG1
Order --> Kafka
Fleet --> PG2
Routing --> PG3
Routing -.-> OSRM
Tracking --> PG4
Dispatcher --> PG5
Counterparty --> PG6
Invoice --> PG7
Invoice --> MinIO
API --> PGA
Order -.publish.-> Kafka
Kafka -.consume.-> Dispatcher
Kafka -.consume.-> Tracking
Loading

Сервисы

СервисОтветственностьБаза данных
order-serviceЖизненный цикл заказов, OutboxPostgreSQL
fleet-serviceАвтопарк, PostGIS геозоныPostgreSQL + PostGIS
routing-serviceМаршруты через OSRM (A*), кеширование, ETAPostgreSQL + OSRM
tracking-serviceGPS телеметрия, batch writesPostgreSQL (partitioned)
dispatcher-serviceSaga orchestratorPostgreSQL
counterparty-serviceКонтрагенты, договоры, тарифыPostgreSQL
invoice-serviceСчета, PDF генерация в MinIOPostgreSQL + MinIO
api-gatewayREST API, auth, aggregationPostgreSQL

Инфраструктура

СервисПортОписание
osrm5000Open Source Routing Machine — маршрутизация по дорогам России
minio9000S3-совместимое хранилище для PDF
prometheus9090Сбор метрик
grafana3001Дашборды (Kafka lag, gRPC latency, PG pool)
jaeger16686Distributed tracing

Быстрый старт

# Клонируем
git clone https://github.com/your-org/logistics-optimizer
cd logistics-optimizer
# Полная инициализация (зависимости + OSM данные + Docker образы)
make init
# Запуск (Docker + фронтенд)
make up:dev
# Или отдельно:
make up # Только Docker
make web # Только фронтенд

URL:

Требования: Docker 24+, Docker Compose 2.20+, pnpm 9+, ~15GB диска

Разработка

# Сборка
make build
# Тесты
make test
make lint
make typecheck
# Логи
make logs
# Очистка
make clean # Контейнеры + тома
make clean:all # + node_modules + osrm-data

Tech Stack

КомпонентТехнология
BackendNestJS, TypeScript
База данныхPostgreSQL + PostGIS
Message brokerApache Kafka
Inter-servicegRPC
ObservabilityOpenTelemetry, Prometheus, Grafana, Jaeger
FrontendReact, Zustand, TanStack Table

Надёжность

Transactional Outbox

asynccreateOrder(dto){returndataSource.transaction(async(em)=>{constorder=em.create(OrderEntity,dto);awaitem.save(order);// Событие в той же транзакции — не потеряетсяawaitem.save(OutboxEvent,{eventType: 'order.created',payload: {orderId: order.id, ...dto}});});}

Saga Dispatch

order.created
→ GetAvailableVehicles (fleet-service)
→ CalculateRoute (routing-service) → AssignVehicle (fleet-service, optimistic lock)
→ UpdateOrderStatus (order-service)
→ Order Assigned ✓
При ошибке:
→ ReleaseVehicle
→ Retry × 5 (1s → 2s → 4s → 8s → 16s)
→ Order Failed

Backpressure

Kafka Consumer → Queue (500) → Batch Writer → PostgreSQL
↓
If overloaded:
Pause Kafka partition
Resume after flush

Roadmap

  • Kubernetes Helm charts
  • СМС/Email уведомления
  • Мобильное приложение
  • Интеграции (Wildberries, СДЭК, Деловые Линии)

Разработка

# Установить зависимости
make install
# Запуск всех сервисов (dev mode)
pnpm start:dev
# Один сервис
pnpm --filter @logistics/order-service start:dev
# Тесты
make test
make lint
make typecheck
# Очистка
make clean
make clean:all

Документация

Полная документация доступна в директории docs/:

ФайлСодержимое
docs/README.mdОбзор архитектуры с диаграммами
docs/SERVICES.mdДетальное описание каждого сервиса
docs/COMMUNICATION.mdgRPC методы и Kafka топики
docs/DATABASE.mdСхемы всех баз данных
docs/API.mdREST API reference
docs/FEATURES.mdПаттерны: Outbox, Saga, Idempotency, Backpressure
docs/PROJECT.mdProduct vision и бизнес-фичи

License

MIT — бесплатно, навсегда, без ограничений.

About

Микросервисная система оптимизации логистических маршрутов NestJS · Kafka · gRPC · PostgreSQL+PostGIS · OpenTelemetry · Grafana · Jaeger

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

91 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Logistics Route Optimizer

Open Source система управления логистикой для высоконагруженных операций.


Проблема

Современные логистические операции требуют надежной системы обработки заказов, отслеживания транспорта и автоматической диспетчеризации. Существующие решения сложны в внедрении и не справляются с высокими нагрузками.

Решение

Logistics Route Optimizer — Open Source TMS с enterprise-grade надежностью:

  • Transactional Outbox — ни одного потерянного события
  • Saga Dispatch — автоматическая диспетчеризация с retry и компенсацией
  • Идемпотентность — без дубликатов при любой нагрузке
  • 50 000+ сообщений в секунду — обработка телеметрии без потерь

Устанавливаете на свой сервер — данные никогда не покидают вашу инфраструктуру.


Key Features

OSRM МаршрутизацияOpen Source Routing Machine с A* алгоритмом. Оптимальные маршруты по дорогам России (12ГБ OSM данных), расчёт ETA с учётом типов дорог
Saga DispatchАвтоматический подбор ТС, расчёт маршрута, назначение. 5 попыток с exponential backoff
Transaction OutboxСобытия пишутся в БД в той же транзакции что и данные — гарантия доставки
Высокие нагрузкиBackpressure в Kafka consumer, batch записи в PostgreSQL (50k+ rows/sec), партиционирование
ИдемпотентностьDatabase-based idempotency guards — ни одного дубликата даже при rebalance
PDF СчетаГенерация через pdfkit, хранение в MinIO (S3-совместимое хранилище)
МониторингPrometheus + Grafana (дашборды Kafka lag, gRPC latency, PG pool), Jaeger (distributed tracing), OpenTelemetry
БезопасностьJWT + Refresh tokens, RBAC, API Keys, audit logging

Screenshots

TrackingКарта маршрутов в реальном времени
CounterpartiesКонтрагенты, договоры, тарифы
SettingsНастройки: пользователи, роли, аудит

Архитектура

flowchart TB
subgraph Clients
Web[Web App<br/>localhost:5173]
Mobile[Mobile App]
External[External APIs]
end
subgraph Gateway
API[API Gateway<br/>:3000<br/>JWT · RBAC · WebSocket]
end
subgraph "Backend Services"
Order[order-service<br/>:50051]
Fleet[fleet-service<br/>:50053]
Routing[routing-service<br/>:50054]
Tracking[tracking-service<br/>:50055]
Dispatcher[dispatcher-service<br/>:50056]
Counterparty[counterparty-service<br/>:50057]
Invoice[invoice-service<br/>:50052]
end
subgraph "Databases"
PG1[(pg-order)]
PG2[(pg-fleet<br/>PostGIS)]
PG3[(pg-routing<br/>PostGIS)]
PG4[(pg-tracking<br/>partitioned)]
PG5[(pg-dispatcher)]
PG6[(pg-counterparty)]
PG7[(pg-invoices)]
PGA[(pg-auth)]
end
subgraph Infrastructure
Kafka[Kafka<br/>:9092]
OSRM[OSRM<br/>:5000]
MinIO[MinIO<br/>:9000]
Prometheus[Prometheus<br/>:9090]
Grafana[Grafana<br/>:3001]
Jaeger[Jaeger<br/>:16686]
end
Web --> API
Mobile --> API
External --> API
API --> Order
API --> Fleet
API --> Routing
API --> Tracking
API --> Counterparty
API --> Invoice
Dispatcher --> Order
Dispatcher --> Fleet
Dispatcher --> Routing
Order --> PG1
Order --> Kafka
Fleet --> PG2
Routing --> PG3
Routing -.-> OSRM
Tracking --> PG4
Dispatcher --> PG5
Counterparty --> PG6
Invoice --> PG7
Invoice --> MinIO
API --> PGA
Order -.publish.-> Kafka
Kafka -.consume.-> Dispatcher
Kafka -.consume.-> Tracking
Loading

Сервисы

СервисОтветственностьБаза данных
order-serviceЖизненный цикл заказов, OutboxPostgreSQL
fleet-serviceАвтопарк, PostGIS геозоныPostgreSQL + PostGIS
routing-serviceМаршруты через OSRM (A*), кеширование, ETAPostgreSQL + OSRM
tracking-serviceGPS телеметрия, batch writesPostgreSQL (partitioned)
dispatcher-serviceSaga orchestratorPostgreSQL
counterparty-serviceКонтрагенты, договоры, тарифыPostgreSQL
invoice-serviceСчета, PDF генерация в MinIOPostgreSQL + MinIO
api-gatewayREST API, auth, aggregationPostgreSQL

Инфраструктура

СервисПортОписание
osrm5000Open Source Routing Machine — маршрутизация по дорогам России
minio9000S3-совместимое хранилище для PDF
prometheus9090Сбор метрик
grafana3001Дашборды (Kafka lag, gRPC latency, PG pool)
jaeger16686Distributed tracing

Быстрый старт

# Клонируем
git clone https://github.com/your-org/logistics-optimizer
cd logistics-optimizer
# Полная инициализация (зависимости + OSM данные + Docker образы)
make init
# Запуск (Docker + фронтенд)
make up:dev
# Или отдельно:
make up # Только Docker
make web # Только фронтенд

URL:

Требования: Docker 24+, Docker Compose 2.20+, pnpm 9+, ~15GB диска

Разработка

# Сборка
make build
# Тесты
make test
make lint
make typecheck
# Логи
make logs
# Очистка
make clean # Контейнеры + тома
make clean:all # + node_modules + osrm-data

Tech Stack

КомпонентТехнология
BackendNestJS, TypeScript
База данныхPostgreSQL + PostGIS
Message brokerApache Kafka
Inter-servicegRPC
ObservabilityOpenTelemetry, Prometheus, Grafana, Jaeger
FrontendReact, Zustand, TanStack Table

Надёжность

Transactional Outbox

asynccreateOrder(dto){returndataSource.transaction(async(em)=>{constorder=em.create(OrderEntity,dto);awaitem.save(order);// Событие в той же транзакции — не потеряетсяawaitem.save(OutboxEvent,{eventType: 'order.created',payload: {orderId: order.id, ...dto}});});}

Saga Dispatch

order.created
→ GetAvailableVehicles (fleet-service)
→ CalculateRoute (routing-service) → AssignVehicle (fleet-service, optimistic lock)
→ UpdateOrderStatus (order-service)
→ Order Assigned ✓
При ошибке:
→ ReleaseVehicle
→ Retry × 5 (1s → 2s → 4s → 8s → 16s)
→ Order Failed

Backpressure

Kafka Consumer → Queue (500) → Batch Writer → PostgreSQL
↓
If overloaded:
Pause Kafka partition
Resume after flush

Roadmap

  • Kubernetes Helm charts
  • СМС/Email уведомления
  • Мобильное приложение
  • Интеграции (Wildberries, СДЭК, Деловые Линии)

Разработка

# Установить зависимости
make install
# Запуск всех сервисов (dev mode)
pnpm start:dev
# Один сервис
pnpm --filter @logistics/order-service start:dev
# Тесты
make test
make lint
make typecheck
# Очистка
make clean
make clean:all

Документация

Полная документация доступна в директории docs/:

ФайлСодержимое
docs/README.mdОбзор архитектуры с диаграммами
docs/SERVICES.mdДетальное описание каждого сервиса
docs/COMMUNICATION.mdgRPC методы и Kafka топики
docs/DATABASE.mdСхемы всех баз данных
docs/API.mdREST API reference
docs/FEATURES.mdПаттерны: Outbox, Saga, Idempotency, Backpressure
docs/PROJECT.mdProduct vision и бизнес-фичи

License

MIT — бесплатно, навсегда, без ограничений.

About

Микросервисная система оптимизации логистических маршрутов NestJS · Kafka · gRPC · PostgreSQL+PostGIS · OpenTelemetry · Grafana · Jaeger

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

91 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Logistics Route Optimizer

Open Source система управления логистикой для высоконагруженных операций.


Проблема

Современные логистические операции требуют надежной системы обработки заказов, отслеживания транспорта и автоматической диспетчеризации. Существующие решения сложны в внедрении и не справляются с высокими нагрузками.

Решение

Logistics Route Optimizer — Open Source TMS с enterprise-grade надежностью:

  • Transactional Outbox — ни одного потерянного события
  • Saga Dispatch — автоматическая диспетчеризация с retry и компенсацией
  • Идемпотентность — без дубликатов при любой нагрузке
  • 50 000+ сообщений в секунду — обработка телеметрии без потерь

Устанавливаете на свой сервер — данные никогда не покидают вашу инфраструктуру.


Key Features

OSRM МаршрутизацияOpen Source Routing Machine с A* алгоритмом. Оптимальные маршруты по дорогам России (12ГБ OSM данных), расчёт ETA с учётом типов дорог
Saga DispatchАвтоматический подбор ТС, расчёт маршрута, назначение. 5 попыток с exponential backoff
Transaction OutboxСобытия пишутся в БД в той же транзакции что и данные — гарантия доставки
Высокие нагрузкиBackpressure в Kafka consumer, batch записи в PostgreSQL (50k+ rows/sec), партиционирование
ИдемпотентностьDatabase-based idempotency guards — ни одного дубликата даже при rebalance
PDF СчетаГенерация через pdfkit, хранение в MinIO (S3-совместимое хранилище)
МониторингPrometheus + Grafana (дашборды Kafka lag, gRPC latency, PG pool), Jaeger (distributed tracing), OpenTelemetry
БезопасностьJWT + Refresh tokens, RBAC, API Keys, audit logging

Screenshots

TrackingКарта маршрутов в реальном времени
CounterpartiesКонтрагенты, договоры, тарифы
SettingsНастройки: пользователи, роли, аудит

Архитектура

flowchart TB
subgraph Clients
Web[Web App<br/>localhost:5173]
Mobile[Mobile App]
External[External APIs]
end
subgraph Gateway
API[API Gateway<br/>:3000<br/>JWT · RBAC · WebSocket]
end
subgraph "Backend Services"
Order[order-service<br/>:50051]
Fleet[fleet-service<br/>:50053]
Routing[routing-service<br/>:50054]
Tracking[tracking-service<br/>:50055]
Dispatcher[dispatcher-service<br/>:50056]
Counterparty[counterparty-service<br/>:50057]
Invoice[invoice-service<br/>:50052]
end
subgraph "Databases"
PG1[(pg-order)]
PG2[(pg-fleet<br/>PostGIS)]
PG3[(pg-routing<br/>PostGIS)]
PG4[(pg-tracking<br/>partitioned)]
PG5[(pg-dispatcher)]
PG6[(pg-counterparty)]
PG7[(pg-invoices)]
PGA[(pg-auth)]
end
subgraph Infrastructure
Kafka[Kafka<br/>:9092]
OSRM[OSRM<br/>:5000]
MinIO[MinIO<br/>:9000]
Prometheus[Prometheus<br/>:9090]
Grafana[Grafana<br/>:3001]
Jaeger[Jaeger<br/>:16686]
end
Web --> API
Mobile --> API
External --> API
API --> Order
API --> Fleet
API --> Routing
API --> Tracking
API --> Counterparty
API --> Invoice
Dispatcher --> Order
Dispatcher --> Fleet
Dispatcher --> Routing
Order --> PG1
Order --> Kafka
Fleet --> PG2
Routing --> PG3
Routing -.-> OSRM
Tracking --> PG4
Dispatcher --> PG5
Counterparty --> PG6
Invoice --> PG7
Invoice --> MinIO
API --> PGA
Order -.publish.-> Kafka
Kafka -.consume.-> Dispatcher
Kafka -.consume.-> Tracking
Loading

Сервисы

СервисОтветственностьБаза данных
order-serviceЖизненный цикл заказов, OutboxPostgreSQL
fleet-serviceАвтопарк, PostGIS геозоныPostgreSQL + PostGIS
routing-serviceМаршруты через OSRM (A*), кеширование, ETAPostgreSQL + OSRM
tracking-serviceGPS телеметрия, batch writesPostgreSQL (partitioned)
dispatcher-serviceSaga orchestratorPostgreSQL
counterparty-serviceКонтрагенты, договоры, тарифыPostgreSQL
invoice-serviceСчета, PDF генерация в MinIOPostgreSQL + MinIO
api-gatewayREST API, auth, aggregationPostgreSQL

Инфраструктура

СервисПортОписание
osrm5000Open Source Routing Machine — маршрутизация по дорогам России
minio9000S3-совместимое хранилище для PDF
prometheus9090Сбор метрик
grafana3001Дашборды (Kafka lag, gRPC latency, PG pool)
jaeger16686Distributed tracing

Быстрый старт

# Клонируем
git clone https://github.com/your-org/logistics-optimizer
cd logistics-optimizer
# Полная инициализация (зависимости + OSM данные + Docker образы)
make init
# Запуск (Docker + фронтенд)
make up:dev
# Или отдельно:
make up # Только Docker
make web # Только фронтенд

URL:

Требования: Docker 24+, Docker Compose 2.20+, pnpm 9+, ~15GB диска

Разработка

# Сборка
make build
# Тесты
make test
make lint
make typecheck
# Логи
make logs
# Очистка
make clean # Контейнеры + тома
make clean:all # + node_modules + osrm-data

Tech Stack

КомпонентТехнология
BackendNestJS, TypeScript
База данныхPostgreSQL + PostGIS
Message brokerApache Kafka
Inter-servicegRPC
ObservabilityOpenTelemetry, Prometheus, Grafana, Jaeger
FrontendReact, Zustand, TanStack Table

Надёжность

Transactional Outbox

asynccreateOrder(dto){returndataSource.transaction(async(em)=>{constorder=em.create(OrderEntity,dto);awaitem.save(order);// Событие в той же транзакции — не потеряетсяawaitem.save(OutboxEvent,{eventType: 'order.created',payload: {orderId: order.id, ...dto}});});}

Saga Dispatch

order.created
→ GetAvailableVehicles (fleet-service)
→ CalculateRoute (routing-service) → AssignVehicle (fleet-service, optimistic lock)
→ UpdateOrderStatus (order-service)
→ Order Assigned ✓
При ошибке:
→ ReleaseVehicle
→ Retry × 5 (1s → 2s → 4s → 8s → 16s)
→ Order Failed

Backpressure

Kafka Consumer → Queue (500) → Batch Writer → PostgreSQL
↓
If overloaded:
Pause Kafka partition
Resume after flush

Roadmap

  • Kubernetes Helm charts
  • СМС/Email уведомления
  • Мобильное приложение
  • Интеграции (Wildberries, СДЭК, Деловые Линии)

Разработка

# Установить зависимости
make install
# Запуск всех сервисов (dev mode)
pnpm start:dev
# Один сервис
pnpm --filter @logistics/order-service start:dev
# Тесты
make test
make lint
make typecheck
# Очистка
make clean
make clean:all

Документация

Полная документация доступна в директории docs/:

ФайлСодержимое
docs/README.mdОбзор архитектуры с диаграммами
docs/SERVICES.mdДетальное описание каждого сервиса
docs/COMMUNICATION.mdgRPC методы и Kafka топики
docs/DATABASE.mdСхемы всех баз данных
docs/API.mdREST API reference
docs/FEATURES.mdПаттерны: Outbox, Saga, Idempotency, Backpressure
docs/PROJECT.mdProduct vision и бизнес-фичи

License

MIT — бесплатно, навсегда, без ограничений.

About

Микросервисная система оптимизации логистических маршрутов NestJS · Kafka · gRPC · PostgreSQL+PostGIS · OpenTelemetry · Grafana · Jaeger

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages