Microservices with Spring
MONOLITH EK SINGLE, LARGE codebase/deployment unit hai — SAARI functionality (orders, users, payments) EK JAGAH. Simple hai START karne ke liye, LEKIN scale karте-karте, EK CHHOTA CHANGE bhi POORE application ko REDEPLOY karvaता hai, aur TEAMS ek-doosre ke code se COLLIDE karte hain.
MICROSERVICES architecture mein, application ko SMALL, INDEPENDENT services mein TODA jaata hai (Order Service, User Service, Payment Service) — HAR EK apna khud ka DATABASE, DEPLOYMENT, aur SCALING rakhती hai. Services APAS mein REST (synchronous, IMMEDIATE response) ya MESSAGE QUEUES (Kafka/RabbitMQ, asynchronous, DECOUPLED) se COMMUNICATE karti hain.
// Order Service (independent deployment):
@SpringBootApplication
public class OrderServiceApplication { }
// Synchronous call — IMMEDIATE response chahiye:
Inventory inventory = restTemplate.getForObject(
"http://inventory-service/api/check/" + productId, Inventory.class);
// Asynchronous — "fire and forget", DECOUPLED:
@Service
public class OrderService {
private final KafkaTemplate<String, OrderEvent> kafkaTemplate;
public void placeOrder(Order order) {
orderRepository.save(order);
kafkaTemplate.send("order-events", new OrderEvent(order));
// Order service ko WAIT nahi karna — inventory/email services APNI SPEED se process karengi
}
}- Monolith = ek deployment unit, simple start, harder to scale
- Microservices = independent services, apna database/deployment, complex lekin scalable
- Synchronous (REST) vs Asynchronous (Kafka/RabbitMQ) communication
Monolith mein, POORA application EK codebase, EK deployment unit hai — CHHOTA sa change bhi POORE application ko REDEPLOY karvaता hai. Microservices mein, HAR service INDEPENDENTLY deploy, scale, aur develop ho sakti hai — Order service ko scale karna ho to SIRF USKO scale karo, poore system ko NAHI.
Services EK-DUSRE se DO tareeke se baat kar sakti hain — SYNCHRONOUS (REST/HTTP calls, RestTemplate/WebClient se, IMMEDIATE response chahiye) ya ASYNCHRONOUS (message queues jaise Kafka/RabbitMQ, "FIRE AND FORGET", decoupled, RESILIENT to failures).
- Synchronous (REST) = immediate response chahiye, TIGHT coupling
- Asynchronous (Kafka/RabbitMQ) = decoupled, RESILIENT, eventual consistency
- Real systems mein, DONO patterns EK SAATH use hote hain