Naval Logistics Monolith → Microservices

Zero-downtime migration of a naval logistics monolith handling millions of annual shipments to an event-driven microservices architecture using Kafka and Spring Boot.

3× throughput increase Zero-downtime migration Sub-200ms P99 latency
Java Spring Boot Apache Kafka PostgreSQL Docker Kubernetes GitLab CI

Overview

A national transportation group needed to modernise its core shipment-tracking platform — a decade-old Java monolith that was becoming a bottleneck for both operational scale and developer productivity.

Challenge

The system processed millions of shipment events per year and was deeply coupled: the tracking, billing, and notification domains all lived in a single deployable. Any change required a full regression cycle and a multi-hour maintenance window.

Solution

We adopted the strangler-fig pattern to incrementally extract services without big-bang rewrites or downtime:

  1. Event backbone first — deployed Apache Kafka and established the domain event schema for shipment state changes.
  2. Tracking service extracted — new microservice consumed events from Kafka and replaced the monolith’s read path, running in parallel before the old path was decommissioned.
  3. Billing and notification followed — same pattern, extracting one bounded context at a time over six months.

Outcome

  • End-to-end throughput tripled under peak load
  • Teams could deploy independently, cutting release cycles from days to hours
  • Full observability stack (Prometheus + Grafana) gave the operations team real-time insight for the first time