Old Architecture (2016–2020) VS Modern Architecture (2023–2026)
This is probably the biggest shift in Java microservices over the last 8–10 years. Many Spring Boot courses still teach the Netflix OSS stack (Eureka, Ribbon, Zuul, Hystrix,…
This is probably the biggest shift in Java microservices over the last 8–10 years. Many Spring Boot courses still teach the Netflix OSS stack (Eureka, Ribbon, Zuul, Hystrix, Config Server, etc.), but modern enterprise applications running on Kubernetes have replaced many of those components with Kubernetes-native solutions.
Let’s compare them.
Old Architecture (2016–2020)
A typical Spring Cloud microservices architecture looked like this:
Client
|
Zuul Gateway
|
Eureka Server
________________________
| | | |
User Svc Order Svc Cart Svc Payment Svc
| | | |
Eureka Client in every service
|
Spring Cloud Config Server
|
Git Repository
Ribbon → Load Balancing
Hystrix → Circuit Breaker
Feign → Service Calls
RabbitMQ → Config Refresh
Notice how many Spring Cloud components were required.
Modern Architecture (2023–2026)
Today, on Kubernetes:
Internet
|
AWS ALB / NLB
|
Kubernetes Ingress
|
API Gateway Pods
|
--------------------------------
| | | |
User Order Payment Cart
Pods Pods Pods Pods
| | | |
Kubernetes Service (ClusterIP)
|
Kubernetes DNS
Much of what Spring Cloud used to provide is now handled by Kubernetes and the cloud platform.
Component-by-Component Comparison
| Old Spring Cloud | Modern Kubernetes | Who handles it now? |
|---|---|---|
| Eureka Server | Kubernetes DNS + Services | Kubernetes |
| Eureka Client | None | Kubernetes |
| Ribbon | Kubernetes Service | Kubernetes |
| Spring Cloud LoadBalancer | Kubernetes Service | Kubernetes |
| Zuul | API Gateway / Ingress | Kubernetes / Gateway |
| Hystrix | Resilience4j | Application |
| Config Server | ConfigMaps / Secrets (sometimes Config Server still used) | Kubernetes |
| Ribbon + Feign | OpenFeign + Kubernetes DNS | Mixed |
| Docker Compose | Kubernetes | Kubernetes |
1. Eureka Server
Old
You had to run a dedicated Eureka Server.
Eureka Server
/ | \
/ | \
Order User Payment
Every service had to register.
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
Modern
There is no Eureka Server.
Each Service automatically gets a DNS name.
payment-service
↓
10.96.1.20
↓
Pods
Your code simply calls:
http://payment-service/pay
Kubernetes resolves the service name automatically.
No registration is required.
2. Eureka Client
Previously every service had:
@EnableEurekaClient
and
eureka.client.register-with-eureka=true
Today…
You remove everything.
No dependency.
No annotations.
No configuration.
3. Ribbon / Spring Cloud LoadBalancer
Previously:
Feign
↓
Ribbon
↓
Eureka
↓
Payment Instance
Ribbon queried Eureka.
It selected an instance.
Now:
Feign
↓
payment-service
↓
Kubernetes Service
↓
Pod
Kubernetes chooses the pod.
4. API Gateway
Old
Zuul
or
Spring Cloud Gateway
Modern
Most companies still use:
- Spring Cloud Gateway
- Kong
- NGINX Ingress
- Envoy Gateway
The difference is that the gateway itself runs as Kubernetes pods.
ALB
↓
Gateway Pods
↓
Services
So gateways still exist—they’re just deployed on Kubernetes.
5. Config Server
This one is interesting.
Previously
Git
↓
Config Server
↓
Microservices
Every service fetched configuration from Config Server.
Modern
Often replaced with:
ConfigMap
↓
Pods
or
Secrets
↓
Pods
But many large enterprises still use Spring Cloud Config Server because:
- centralized configuration
- Git version history
- easy rollback
- same approach across multiple environments
So Config Server has not disappeared.
6. Docker Compose
Previously developers used
docker-compose.yml
to start:
- RabbitMQ
- Kafka
- Redis
- MySQL
- Services
Now:
Everything is deployed using Kubernetes manifests or package managers like Helm.
7. Service Discovery
Old:
Service starts
↓
Registers to Eureka
↓
Heartbeat every 30 sec
↓
Other services discover it
Modern:
Pod starts
↓
Deployment creates Pod
↓
Service label matches Pod
↓
DNS updated
↓
Ready
No registration API.
No heartbeat.
Kubernetes manages it.
8. Health Checks
Previously:
Actuator
↓
Eureka
↓
UP/DOWN
Now:
Actuator
↓
Readiness Probe
↓
Kubernetes
↓
Traffic or No Traffic
Kubernetes continuously checks health.
9. Scaling
Old
Need 10 instances?
↓
Start 10 JVMs
↓
Register all in Eureka
Modern
kubectl scale deployment payment --replicas=10
or
The Horizontal Pod Autoscaler automatically increases or decreases pod count based on CPU, memory, or custom metrics.
10. Load Balancing
Old
Ribbon
↓
Choose Instance
Modern
Kubernetes Service
↓
Choose Pod
What still remains from Spring Cloud?
Not everything disappeared.
These are still very common:
| Spring Cloud Component | Used Today? | Why |
|---|---|---|
| OpenFeign | ✅ Yes | Easy service-to-service REST calls |
| Spring Cloud Gateway | ✅ Yes | API Gateway |
| Config Server | ✅ Sometimes | Centralized config |
| Bus (RabbitMQ/Kafka) | ✅ Sometimes | Config refresh/events |
| Resilience4j | ✅ Yes | Circuit breaker, retries, rate limiting |
| Sleuth | ❌ Mostly replaced | Replaced by Micrometer Tracing/OpenTelemetry |
| Zipkin | ⚠️ Sometimes | Many teams now use Jaeger or managed observability platforms |
What does a modern Spring Boot project include?
Spring Boot
│
├── REST APIs
├── OpenFeign
├── Spring Security
├── JWT / OAuth2
├── Resilience4j
├── Actuator
├── Micrometer
├── OpenTelemetry
├── Kafka / RabbitMQ
└── Docker
Everything else—service discovery, load balancing, scaling, networking, and pod lifecycle—is typically handled by Kubernetes and the cloud platform.
The evolution at a glance
| Concern | Old (Netflix OSS Era) | Modern (Kubernetes Era) |
|---|---|---|
| Service Discovery | Eureka | Kubernetes DNS + Services |
| Load Balancing | Ribbon / Spring Cloud LoadBalancer | Kubernetes Services + Cloud Load Balancer |
| External Traffic | NGINX/Zuul | AWS ALB + Ingress |
| API Gateway | Zuul | Spring Cloud Gateway / Kong / Envoy |
| Scaling | Manual / ASG | Kubernetes Deployments + HPA |
| Health Checks | Eureka + Actuator | Readiness & Liveness Probes |
| Configuration | Spring Cloud Config | ConfigMaps, Secrets, or Config Server |
| Deployment | Docker Compose / VMs | Kubernetes |
| Monitoring | Actuator + Sleuth | Micrometer + OpenTelemetry |
| Service Communication | Feign + Ribbon | Feign + Kubernetes DNS |