ЛЕКЦ 11: МИКРОСЕРВИС АРХИТЕКТУР (Microservices Architecture)
Хичээлийн зорилго: Микросервис архитектурын суурь ойлголт, монолит vs микросервис ялгаа, сервис хоорондын харилцаа (REST, gRPC, Message Queue), API Gateway, Service Discovery, Circuit Breaker, Saga Pattern, Event-Driven Architecture, Docker + Kubernetes ашиглан микросервис deploy хийхийг эзэмшүүлэх.
Хамрах хүрээ: Monolith vs Microservices, Bounded Context (DDD), REST & gRPC, Synchronous & Asynchronous Communication, API Gateway, Service Registry (Eureka), Config Server, Circuit Breaker (Resilience4j), Saga Pattern, Event-Driven (Kafka), CQRS, Docker Compose, Kubernetes Deployment, Spring Cloud.
ХЭСЭГ 1: ОНОЛЫН СУУРЬ (Theory & Foundations)
1.1 Монолит архитектур гэж юу вэ?
💡 Зүйрлэл: Монолит = Нэг том байшин. Бүх өрөө (гал тогоо, унтлагын өрөө, оффис) НЭГ ДОТОР. Нэг хана нурвал → Бүх байшин нурна.
Монолит бүтэц:
┌─────────────────────────────────────────┐
│ MONOLITH APP │
│ │
│ ┌──────────┐ ┌──────────┐ ┌─────────┐ │
│ │ Student │ │ Teacher │ │ Course │ │
│ │ Module │ │ Module │ │ Module │ │
│ └────┬─────┘ └────┬─────┘ └────┬────┘ │
│ │ │ │ │
│ ┌────▼─────────────▼────────────▼────┐ │
│ │ SHARED DATABASE │ │
│ └────────────────────────────────────┘ │
│ │
│ 1 WAR/JAR → 1 Server → 1 DB │
└─────────────────────────────────────────┘
Монолитийн давуу ба сул талууд:
| Давуу тал | Сул тал |
|---|---|
| Хөгжүүлэхэд ХЯЛБАР (эхэнд) | Том болоход НАРИЙСДАГ |
| Deploy хялбар (1 файл) | Нэг module-д алдаа → БҮГД унана |
| Debug хялбар | Scale хэцүү (бүхэлдээ scale) |
| Transaction хялбар | Технологи солиход хэцүү |
| Тест хялбар (эхэнд) | Build удаан (10+ мин) |
| Bag хүн ойлгоно | 100+ хөгжүүлэгч → Conflict |
1.2 Микросервис архитектур гэж юу вэ?
💡 Зүйрлэл: Микросервис = Хотхоны тусдаа байшингууд. Байшин бүр бие даасан (өөрийн гал тогоо, ус, цахилгаан). Нэг байшин нурсан ч бусад нь зүгээр.
Микросервис бүтэц:
┌────────────┐ ┌────────────┐ ┌────────────┐
│ Student │ │ Teacher │ │ Course │
│ Service │ │ Service │ │ Service │
│ │ │ │ │ │
│ Port:8081 │ │ Port:8082 │ │ Port:8083 │
│ ┌──────┐ │ │ ┌──────┐ │ │ ┌──────┐ │
│ │ DB 1 │ │ │ │ DB 2 │ │ │ │ DB 3 │ │
│ └──────┘ │ │ └──────┘ │ │ └──────┘ │
└─────┬──────┘ └──────┬─────┘ └──────┬─────┘
│ │ │
└────────────────┼───────────────┘
│
┌────────▼────────┐
│ API Gateway │
│ (Port: 8080) │
└────────┬────────┘
│
┌────▼────┐
│ Client │
└─────────┘
Микросервисийн давуу ба сул талууд:
| Давуу тал | Сул тал |
|---|---|
| Бие даасан DEPLOY | Нарийн түвэгтэй (distributed system) |
| Бие даасан SCALE | Сүлжээний latency |
| Технологи ЧӨЛӨӨТЭЙ | Distributed transaction хэцүү |
| Баг бие даасан ажиллана | Мониторинг НАРИЙН |
| Fault isolation (нэг унасан ч бусад ok) | Debug хэцүү (олон сервис) |
| Build хурдан (сервис тус бүр) | Operational complexity |
1.3 Монолит vs Микросервис — Хэзээ аль нь тохирох вэ?
| Шинж | Монолит | Микросервис |
|---|---|---|
| Багийн хэмжээ | 1-10 хөгжүүлэгч | 10+ хөгжүүлэгч (баг бүрт сервис) |
| Төслийн хэмжээ | Жижиг-дунд | Том, нарийн |
| Traffic | Бага-дунд | Их, тогтмолгүй |
| Deploy давтамж | Хоногт 1-2 | Өдөрт 10+ (сервис тус бүр) |
| Технологи | Нэг stack | Олон stack (polyglot) |
| Scale | Босоо (vertical) | Хэвтээ (horizontal, сервис тус бүр) |
| Эхлэх | ✅ Хялбар | ❌ Нарийн |
⚠️ Чухал: "Монолит = Буруу" биш! Эхлэхдээ монолит → Том болсон бол → Микросервис рүү шилжих. "Start with monolith, evolve to microservices."
1.4 Bounded Context (Domain-Driven Design)
Bounded Context гэж юу вэ?
Сервис бүр ӨӨР ӨӨРИЙН домэйн (хүрээ)-г хариуцна. Нэг ойлголт өөр context-д ӨӨӨР утгатай.
┌─────────────────┐ ┌─────────────────┐
│ Student Context │ │ Payment Context │
│ │ │ │
│ Student: │ │ Student: │
│ - id │ │ - id │
│ - name │ │ - accountId │
│ - email │ │ - balance │
│ - gpa │ │ - paymentHistory│
│ - department │ │ │
│ │ │ "Student" гэхдээ │
│ "Student" гэхдээ│ │ төлбөрийн мэдээлэл│
│ сурлагын мэдээлэл│ │ │
└─────────────────┘ └─────────────────┘
Сервис хуваах зарчим:
| Зарчим | Тайлбар |
|---|---|
| Single Responsibility | Сервис бүр НЭГ бизнес чиг үүрэг хариуцна |
| Loose Coupling | Сервисүүд бие биенээсээ ХАМААРАЛГҮЙ |
| High Cohesion | Хамааралтай функцүүд НЭГ сервист |
| Database per Service | Сервис бүр ӨӨРИЙН DB |
| Autonomous Teams | Баг бүр өөрийн сервисийг бүтнээр хариуцна |
1.5 Сервис хоорондын харилцаа (Inter-Service Communication)
1.5.1 Synchronous (Синхрон) — REST, gRPC
Student Service ──── REST/HTTP ────► Teacher Service
│ │
│ GET /api/teachers/5 │
│◄── {"id":5,"name":"Дорж"} ─────── │
│ │
│ Хүлээнэ... (blocking) │
REST (HTTP):
// Student Service → Teacher Service дуудах
@Service
public class TeacherClient {
private final RestClient restClient;
public TeacherClient(RestClient.Builder builder) {
this.restClient = builder.baseUrl("http://teacher-service:8082").build();
}
public TeacherResponse getTeacher(Long id) {
return restClient.get()
.uri("/api/teachers/{id}", id)
.retrieve()
.body(TeacherResponse.class);
}
}
gRPC (бинар протокол, хурдан):
| Шинж | REST | gRPC |
|---|---|---|
| Формат | JSON (текст) | Protocol Buffers (бинар) |
| Хурд | Дунд | Хурдан (10x) |
| Contract | OpenAPI (заавал биш) | .proto файл (ЗААВАЛ) |
| Streaming | Хязгаарлагдмал | Бүрэн (bi-directional) |
| Browser | ✅ Шууд | ❌ gRPC-Web хэрэгтэй |
| Хэрэглээ | Public API | Дотоод сервис хоорондын |
1.5.2 Asynchronous (Асинхрон) — Message Queue
Student Service ──── Message ────► [Message Broker] ────► Notification Service
│ (Kafka/RabbitMQ) │
│ "Student enrolled" Email илгээх│
│ │
│ Хүлээхгүй! (non-blocking) │
Message Queue ашиглах:
// Student Service → Event нийтлэх (Producer)
@Service
public class StudentService {
private final KafkaTemplate<String, StudentEvent> kafkaTemplate;
public StudentResponse enroll(EnrollRequest request) {
Student student = studentRepository.save(toEntity(request));
// Event нийтлэх — Хүлээхгүй!
kafkaTemplate.send("student-events",
new StudentEvent("ENROLLED", student.getId(), student.getName()));
return toResponse(student);
}
}
// Notification Service → Event хүлээн авах (Consumer)
@Service
public class NotificationConsumer {
@KafkaListener(topics = "student-events", groupId = "notification-group")
public void handleStudentEvent(StudentEvent event) {
if ("ENROLLED".equals(event.type())) {
emailService.sendWelcomeEmail(event.studentId());
}
}
}
Synchronous vs Asynchronous:
| Шинж | Synchronous (REST) | Asynchronous (Message) |
|---|---|---|
| Хүлээх | ✅ Хариу хүлээнэ | ❌ Хүлээхгүй |
| Coupling | Хүчтэй (сервис ажиллаж байх) | Сул (broker замдаа хадгална) |
| Хурд | Шууд хариу | Хожимдсон хариу |
| Найдвартай | Сервис унтарвал алдаа | Broker хадгалаж, дараа илгээнэ |
| Хэрэглээ | Query, CRUD | Event, notification, long task |
1.6 API Gateway
API Gateway гэж юу вэ?
Бүх client хүсэлт API Gateway-р дамжина. Gateway → Зөв сервис рүү чиглүүлнэ.
┌─────────────────┐
│ API Gateway │
Client ────────────►│ │
│ /students/* │──► Student Service
│ /teachers/* │──► Teacher Service
│ /courses/* │──► Course Service
│ │
│ + Auth check │
│ + Rate limit │
│ + Load balance │
│ + Logging │
└─────────────────┘
API Gateway-ийн үүрэг:
| Үүрэг | Тайлбар |
|---|---|
| Routing | URL-аар зөв сервис рүү чиглүүлэх |
| Authentication | JWT token шалгах (нэг газраас) |
| Rate Limiting | Хүсэлтийн тоо хязгаарлах |
| Load Balancing | Олон instance-д хуваарилах |
| Logging/Monitoring | Бүх хүсэлтийг лог бичих |
| Circuit Breaking | Унасан сервис рүү хүсэлт зогсоох |
# Spring Cloud Gateway — application.yml
spring:
cloud:
gateway:
routes:
- id: student-service
uri: lb://student-service # Load balanced
predicates:
- Path=/api/students/**
filters:
- StripPrefix=0
- id: teacher-service
uri: lb://teacher-service
predicates:
- Path=/api/teachers/**
1.7 Service Discovery (Сервис олох)
Service Discovery яагаад хэрэгтэй вэ?
Микросервис → Олон instance → IP хаяг ДИНАМИК → Хардкодлох БОЛОМЖГҮЙ.
Асуудал:
Student Service → Teacher Service (http://???.???.???.???:8082)
IP хаяг мэдэхгүй!
Шийдэл — Service Registry:
┌─────────────────────────────────────────┐
│ Service Registry (Eureka) │
│ │
│ student-service → 192.168.1.10:8081 │
│ → 192.168.1.11:8081 │
│ │
│ teacher-service → 192.168.1.20:8082 │
│ → 192.168.1.21:8082 │
│ │
│ course-service → 192.168.1.30:8083 │
└─────────────────────────────────────────┘
Student Service → Registry: "teacher-service хаана байна?"
→ Registry: "192.168.1.20:8082"
→ Teacher Service руу хүсэлт
// Eureka Server
@SpringBootApplication
@EnableEurekaServer
public class RegistryApplication {
public static void main(String[] args) {
SpringApplication.run(RegistryApplication.class, args);
}
}
// Student Service — Eureka Client
// application.yml
spring:
application:
name: student-service
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
1.8 Circuit Breaker Pattern
Circuit Breaker гэж юу вэ?
Сервис унтарсан бол → Дахин дахин дуудахгүй → Автомат таслах → Хэсэг хугацааны дараа дахин оролдох.
┌────────┐ ┌────────┐ ┌──────────┐
│ CLOSED │────►│ OPEN │────►│HALF-OPEN │
│ │ │ │ │ │
│ Normal │ │ Бүгдийг│ │ 1-2 хүсэлт│
│ ажиллана│ │ блоклох│ │ оролдох │
└───┬────┘ └────┬───┘ └────┬─────┘
│ │ │
Алдаа >50% Timeout Амжилттай?
→ OPEN болох хүлээх → CLOSED
Амжилтгүй?
→ OPEN
| Төлөв | Тайлбар |
|---|---|
| CLOSED | Хэвийн ажиллана. Алдааг тоолно |
| OPEN | Хүсэлт БЛОКЛОГДОНО. Fallback буцаана |
| HALF-OPEN | Цөөн хүсэлт оролдоно. OK бол → CLOSED |
// Resilience4j — Circuit Breaker
@Service
public class TeacherClient {
private final RestClient restClient;
@CircuitBreaker(name = "teacherService", fallbackMethod = "getTeacherFallback")
public TeacherResponse getTeacher(Long id) {
return restClient.get()
.uri("/api/teachers/{id}", id)
.retrieve()
.body(TeacherResponse.class);
}
// Teacher Service унтарсан бол → Fallback
private TeacherResponse getTeacherFallback(Long id, Throwable ex) {
return new TeacherResponse(id, "Unknown Teacher", "N/A");
}
}
# application.yml — Resilience4j тохиргоо
resilience4j:
circuitbreaker:
instances:
teacherService:
sliding-window-size: 10 # Сүүлийн 10 хүсэлт шалгана
failure-rate-threshold: 50 # 50% алдаа → OPEN
wait-duration-in-open-state: 10s # 10 сек хүлээж → HALF-OPEN
permitted-number-of-calls-in-half-open-state: 3
1.9 Saga Pattern (Distributed Transaction)
Асуудал: Distributed Transaction
Монолит:
@Transactional → Student INSERT + Payment INSERT + Notification
→ Аль нэг fail → БҮГД ROLLBACK ✅
Микросервис:
Student Service → OK
Payment Service → FAIL
Notification → ???
→ Student-г яаж буцаах?? 😱
Saga Pattern:
Сервис бүр ӨӨРИЙН transaction хийж, алдаа гарвал НӨХӨХ transaction (compensation) ажиллуулна.
Choreography Saga (Event-based):
Student Service Payment Service Notification
│ │ │
│── StudentCreated event ──────► │
│ │ │
│ PaymentProcessed event ──────────────►
│ │ │
│ │ NotificationSent event
│ │ │
│◄── PaymentFailed event ──── │ │
│ │ │
│ Compensation: │ │
│ StudentRollback() │ │
| Saga төрөл | Тайлбар | Давуу | Сул |
|---|---|---|---|
| Choreography | Сервис бүр event-ээр харилцана | Энгийн, сул холбоос | Tracking хэцүү |
| Orchestration | Нэг Orchestrator удирдана | Дараалал тодорхой | Orchestrator = Single point |
// Choreography Saga — Student Service
@Service
public class StudentService {
@Transactional
public StudentResponse enroll(EnrollRequest request) {
Student student = studentRepository.save(toEntity(request));
// Event → Payment Service хүлээн авна
kafkaTemplate.send("student-events",
new StudentEvent("STUDENT_CREATED", student.getId()));
return toResponse(student);
}
// Payment fail → Compensation
@KafkaListener(topics = "payment-events", groupId = "student-group")
public void handlePaymentEvent(PaymentEvent event) {
if ("PAYMENT_FAILED".equals(event.type())) {
studentRepository.deleteById(event.studentId()); // Rollback!
}
}
}
1.10 Event-Driven Architecture
Event-Driven гэж юу вэ?
Сервисүүд EVENT (үйл явдал)-аар харилцана. Сервис → Event нийтлэх → Сонирхсон сервисүүд → Event хүлээн авах.
┌──────────┐ Event ┌──────────────┐ Event ┌──────────────┐
│ Student │────────────►│ │────────────►│ Notification │
│ Service │ "enrolled" │ Kafka │ "enrolled" │ Service │
└──────────┘ │ Broker │ └──────────────┘
│ │
┌──────────┐ │ │ Event ┌──────────────┐
│ Payment │◄────────────│ │────────────►│ Analytics │
│ Service │ "enrolled" │ │ "enrolled" │ Service │
└──────────┘ └──────────────┘ └──────────────┘
Event Sourcing:
| Уламжлалт | Event Sourcing |
|---|---|
| Одоогийн STATE хадгална | Бүх EVENT хадгална |
| UPDATE students SET gpa=3.5 | Event: {type: GPA_UPDATED, gpa: 3.5} |
| Өмнөх утга алга болно | Бүх ТҮҮХ хадгалагдана |
| Хялбар | Replay → State сэргээх |
CQRS (Command Query Responsibility Segregation):
Command (бичих):
Client ──► Command Service ──► Write DB (PostgreSQL)
│
└──► Event ──► Read DB (Elasticsearch) шинэчлэх
Query (унших):
Client ──► Query Service ──► Read DB (Elasticsearch) ──► Хурдан хариу
| Шинж | CQRS | Уламжлалт |
|---|---|---|
| Бичих | Write DB (normalize) | Нэг DB |
| Унших | Read DB (denormalize, хурдан) | Нэг DB |
| Scale | Тус тусдаа scale | Хамтдаа scale |
| Хэрэглээ | Их traffic, нарийн query | Жижиг-дунд апп |
1.11 Config Server (Тохиргооны сервер)
Config Server яагаад хэрэгтэй вэ?
Олон сервис → Тохиргоо (DB URL, API key) → НЭГ ГАЗРААС удирдах.
┌──────────────┐ ┌──────────────┐
│ Config Server│◄──────│ Git Repo │
│ │ │ (config files)│
└──────┬───────┘ └──────────────┘
│
├──────► Student Service (DB URL, JWT secret)
├──────► Teacher Service (DB URL, Kafka URL)
└──────► Course Service (DB URL, Redis URL)
# Config Server — bootstrap.yml
spring:
cloud:
config:
server:
git:
uri: https://github.com/myorg/config-repo
default-label: main
# student-service.yml (Git repo дотор)
spring:
datasource:
url: jdbc:postgresql://db-host:5432/studentdb
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
jwt:
secret: ${JWT_SECRET}
teacher-service:
url: http://teacher-service:8082
1.12 Distributed Tracing (Хянах)
Олон сервис → Хүсэлт хаана удааширсан?
Client → Gateway → Student Service → Teacher Service → DB
│ │
100ms 3000ms ← УДААН!
Zipkin / Jaeger + Micrometer:
Trace ID: abc123 (нэг хүсэлтийн бүх алхам)
├── Span 1: Gateway (5ms)
├── Span 2: Student Service (100ms)
│ ├── Span 3: Teacher Service call (3000ms) ← BOTTLENECK!
│ └── Span 4: DB query (20ms)
└── Total: 3125ms
# application.yml — Micrometer Tracing
management:
tracing:
sampling:
probability: 1.0 # 100% хүсэлт trace хийх (production-д 0.1)
zipkin:
tracing:
endpoint: http://zipkin:9411/api/v2/spans
1.13 Database per Service
Сервис бүрт тусдаа DB:
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│Student Service│ │Teacher Service│ │Course Service │
│ │ │ │ │ │
│ PostgreSQL │ │ MongoDB │ │ PostgreSQL │
│ students DB │ │ teachers DB │ │ courses DB │
└───────────────┘ └───────────────┘ └───────────────┘
↑ ↑ ↑
Polyglot Persistence: Сервис бүр ӨӨРТ ТОХИРОХ DB сонгоно
| Зарчим | Тайлбар |
|---|---|
| Тусдаа DB | Сервис бүр ӨӨРИЙН DB → Бие даасан deploy, scale |
| Шууд хандахгүй | Student Service → Teacher DB руу ШУУД хандахгүй! |
| API-аар | Teacher мэдээлэл хэрэгтэй бол → Teacher Service API дуудах |
| Polyglot | Сервис бүр өөрт тохирох DB (SQL, NoSQL, Redis) |
1.14 Kubernetes дээр Микросервис deploy
Kubernetes ойлголт:
┌─────────────────── Kubernetes Cluster ───────────────────┐
│ │
│ ┌─── Node 1 ───────────┐ ┌─── Node 2 ───────────┐ │
│ │ │ │ │ │
│ │ ┌─── Pod ────────┐ │ │ ┌─── Pod ────────┐ │ │
│ │ │ Student Svc │ │ │ │ Student Svc │ │ │
│ │ │ (replica 1) │ │ │ │ (replica 2) │ │ │
│ │ └────────────────┘ │ │ └────────────────┘ │ │
│ │ │ │ │ │
│ │ ┌─── Pod ────────┐ │ │ ┌─── Pod ────────┐ │ │
│ │ │ Teacher Svc │ │ │ │ Course Svc │ │ │
│ │ │ (replica 1) │ │ │ │ (replica 1) │ │ │
│ │ └────────────────┘ │ │ └────────────────┘ │ │
│ │ │ │ │ │
│ └───────────────────────┘ └───────────────────────┘ │
│ │
│ Service (K8s) = Load Balancer + DNS │
│ student-service:8081 → Pod replica 1 эсвэл 2 │
└──────────────────────────────────────────────────────────┘
# student-service-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: student-service
spec:
replicas: 2
selector:
matchLabels:
app: student-service
template:
metadata:
labels:
app: student-service
spec:
containers:
- name: student-service
image: myregistry/student-service:1.0.0
ports:
- containerPort: 8081
env:
- name: DB_URL
valueFrom:
secretKeyRef:
name: student-db-secret
key: url
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /actuator/health
port: 8081
initialDelaySeconds: 30
periodSeconds: 10
---
apiVersion: v1
kind: Service
metadata:
name: student-service
spec:
selector:
app: student-service
ports:
- port: 8081
targetPort: 8081
type: ClusterIP
1.15 Микросервис шилдэг туршлагууд (Best Practices)
| # | Зарчим | Тайлбар |
|---|---|---|
| 1 | Database per Service | Сервис бүр өөрийн DB |
| 2 | API Gateway | Нэг entry point, auth, routing |
| 3 | Service Discovery | Динамик IP → Registry |
| 4 | Circuit Breaker | Унасан сервис → Автомат таслах |
| 5 | Event-Driven | Async харилцаа (Kafka, RabbitMQ) |
| 6 | Config Server | Тохиргоо нэг газраас |
| 7 | Distributed Tracing | Хүсэлтийг хянах (Zipkin) |
| 8 | Health Check | Сервис бүрт /actuator/health |
| 9 | Containerization | Docker → Kubernetes |
| 10 | CI/CD per Service | Сервис бүрт тусдаа pipeline |
| 11 | Backward Compatibility | API хувилбарлалт (v1, v2) |
| 12 | Centralized Logging | Бүх лог нэг газар (ELK Stack) |
| 13 | Idempotency | Давтагдсан хүсэлт → Ижил үр дүн |
| 14 | Correlation ID | Хүсэлт бүрт ID → Бүх сервисээр дагах |
| 15 | Graceful Shutdown | Сервис зогсоход ажиллаж буй хүсэлт дуусгах |
ХЭСЭГ 2: ТҮЛХҮҮР ҮГ БА МЭРГЭЖЛИЙН НЭР ТОМЬЁО (Keywords & Glossary)
| # | Англи нэр томьёо | Монгол утга | Дэлгэрэнгүй тайлбар |
|---|---|---|---|
| 1 | Monolith | Монолит | Бүх функц НЭГ апп дотор — 1 WAR/JAR, 1 DB. |
| 2 | Microservice | Микросервис | Бие даасан, жижиг сервисүүд — Тусдаа deploy, DB. |
| 3 | API Gateway | API гарц | Бүх хүсэлт дамжих НЭГ ЦЭГИЙГ удирдагч — Routing, Auth, Rate Limit. |
| 4 | Service Discovery | Сервис олох | Сервисүүдийн IP хаягийг динамикаар олох — Eureka, Consul. |
| 5 | Service Registry | Сервис бүртгэл | Сервисүүдийн хаяг хадгалах газар — Eureka Server. |
| 6 | Circuit Breaker | Хэлхээ таслагч | Унасан сервис рүү хүсэлт таслах — Resilience4j. |
| 7 | Saga Pattern | Сага загвар | Distributed transaction-г event/compensation-аар зохицуулах. |
| 8 | Choreography | Хореографи | Сервис бүр event-ээр бие даасан харилцах Saga. |
| 9 | Orchestration | Оркестрчилол | Нэг Orchestrator бүх алхмыг удирдах Saga. |
| 10 | Event-Driven | Үйл явдалд суурилсан | Сервисүүд EVENT-ээр харилцана — Kafka, RabbitMQ. |
| 11 | Event Sourcing | Үйл явдлын эх сурвалж | State биш EVENT бүрийг хадгалах — Түүх бүрэн. |
| 12 | CQRS | Команд-Асуулгын тусгаарлалт | Бичих (Command) ба Унших (Query) тусдаа DB/model. |
| 13 | Message Broker | Зурвас зуучлагч | Сервис хооронд мэдээ дамжуулагч — Kafka, RabbitMQ. |
| 14 | Kafka | Кафка | Distributed event streaming platform — LinkedIn. |
| 15 | RabbitMQ | RabbitMQ | AMQP message broker — Дараалал удирдах. |
| 16 | gRPC | gRPC | Google-ийн бинар RPC framework — REST-ээс хурдан. |
| 17 | Protocol Buffers | Protobuf | gRPC-ийн бинар серилизаци формат (.proto). |
| 18 | REST | REST | HTTP + JSON ашигласан синхрон API. |
| 19 | Bounded Context | Хязгаарлагдсан контекст | DDD — Сервисийн хариуцах домэйн хүрээ. |
| 20 | DDD | Домэйн хөтлөгдсөн дизайн | Domain-Driven Design — Бизнес домайнаар сервис хуваах. |
| 21 | Config Server | Тохиргооны сервер | Бүх сервисийн тохиргоог нэг газраас удирдах. |
| 22 | Distributed Tracing | Тархсан хянах | Хүсэлтийг олон сервисээр дагаж хянах — Zipkin, Jaeger. |
| 23 | Trace ID | Хянах ID | Нэг хүсэлтийн бүх алхмыг холбох ID. |
| 24 | Span | Хэрчим | Trace дотор нэг сервисийн ажлын нэгж. |
| 25 | Load Balancing | Ачаалал тэнцвэржүүлэх | Хүсэлтийг олон instance-д тэнцүү хуваарилах. |
| 26 | Health Check | Эрүүл мэнд шалгалт | Сервис ажиллаж буйг шалгах (/actuator/health). |
| 27 | Fallback | Нөөц хариу | Сервис алдаа гаргавал буцаах ЗАЙ хариу. |
| 28 | Idempotency | Давтагдах боломж | Ижил хүсэлт олон удаа → Ижил үр дүн (давхар үүсгэхгүй). |
| 29 | Polyglot Persistence | Олон хэлт хадгалалт | Сервис бүр өөр DB (PostgreSQL, MongoDB, Redis). |
| 30 | Sidecar Pattern | Хажуугийн загвар | Сервис хажууд нэмэлт container (logging, proxy). |
| 31 | Service Mesh | Сервис тор | Сервис хоорондын харилцааг удирдагч дэд бүтэц — Istio. |
| 32 | Kubernetes | Кубернетис | Container orchestration platform — Pod, Deployment, Service. |
| 33 | Helm | Хелм | Kubernetes-ийн package manager — Chart. |
| 34 | Docker Compose | Docker Compose | Олон container-г нэг файлаар удирдах. |
| 35 | Correlation ID | Хамааралын ID | Хүсэлт бүрт ID → Бүх сервисийн лог-д дагах. |
| 36 | ELK Stack | ELK Stack | Elasticsearch + Logstash + Kibana — Centralized logging. |
| 37 | Backward Compatibility | Буцаан нийцэмж | API өөрчлөхөд хуучин client-д нөлөөлөхгүй (v1, v2). |
| 38 | Graceful Shutdown | Зөөлөн зогсолт | Сервис зогсоход ажиллаж буй хүсэлтийг дуусгаад зогсох. |
| 39 | Spring Cloud | Spring Cloud | Микросервис framework — Gateway, Eureka, Config, Resilience4j. |
| 40 | Strangler Fig Pattern | Зүлгэлтийн загвар | Монолитоос микросервис рүү аажмаар шилжих стратеги. |