mikroservis mimarisi microservices api gateway service mesh distributed systems

Mikroservis Mimarisi ve Cloud-Native Uygulama Geliştirme

Monolitik uygulamanızı mikroservislere dönüştürün! Ölçeklenebilir, esnek, bağımsız deploy edilebilen mikroservis mimarisi ile modern yazılım geliştirme. API Gateway, Service Mesh, Event-Driven Architecture ve Container Orchestration.

Mikroservis Mimarisi Nedir?

Mikroservis mimarisi, büyük bir uygulamayı birbirinden bağımsız, küçük servislere bölerek geliştirme yaklaşımıdır. Her servis kendi veritabanına sahip, bağımsız deploy edilebilir ve farklı teknolojilerle yazılabilir.

🎯 Monolitik vs Mikroservis

Monolitik Mimari:

┌─────────────────────────────────────────┐
│                                         │
│         TEK BÜYÜK UYGULAMA              │
│                                         │
│  ┌────────┬────────┬────────┬────────┐ │
│  │ User   │Product │ Order  │Payment │ │
│  │Service │Service │Service │Service │ │
│  └────────┴────────┴────────┴────────┘ │
│                                         │
│          Tek Veritabanı                 │
│         ┌─────────────┐                 │
│         │  Database   │                 │
│         └─────────────┘                 │
└─────────────────────────────────────────┘

Sorunlar:
❌ Tek bir hata tüm sistemi düşürür
❌ Scaling zor (tümünü scale etmek gerek)
❌ Deploy riski yüksek (tümü birlikte)
❌ Teknoloji stack değişimi zor
❌ Ekip iş birliği zorlaşır (aynı kod)

Mikroservis Mimarisi:

┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐
│  User    │  │ Product  │  │  Order   │  │ Payment  │
│ Service  │  │ Service  │  │ Service  │  │ Service  │
│          │  │          │  │          │  │          │
│ Node.js  │  │  Python  │  │   Java   │  │    Go    │
│          │  │          │  │          │  │          │
│ ┌──────┐ │  │ ┌──────┐ │  │ ┌──────┐ │  │ ┌──────┐ │
│ │UserDB│ │  │ │ProdDB│ │  │ │OrdDB │ │  │ │PayDB │ │
│ └──────┘ │  │ └──────┘ │  │ └──────┘ │  │ └──────┘ │
└──────────┘  └──────────┘  └──────────┘  └──────────┘
      ↓             ↓             ↓             ↓
    ┌───────────────────────────────────────────────┐
    │          API Gateway / Service Mesh           │
    └───────────────────────────────────────────────┘

Avantajlar:
✅ Bağımsız deploy (User servis güncellenirken diğerleri etkilenmez)
✅ Teknoloji özgürlüğü (Her servis farklı dil)
✅ Kolay scaling (Sadece Order servisini 10x scale et)
✅ Fault isolation (Payment çökse diğerleri çalışır)
✅ Ekip otonomisi (Her ekip kendi servisi)

💡 Mikroservis Ne Zaman?

Mikroservise Geçiş İçin:

  • 📈 Büyük Ekip: 20+ developer
  • 🚀 Hızlı Büyüme: Sık özellik ekleniyor
  • 📊 Farklı Scaling: Bazı modüller çok yük alıyor
  • 🔄 Sık Deploy: Günde 10+ deployment
  • 👥 Çoklu Ekip: Bağımsız çalışan ekipler

Monolitik Devam İçin:

  • 👶 Startup/MVP: Hızlı geliştirme öncelik
  • 👤 Küçük Ekip: < 10 developer
  • 📉 Stabil Yük: Değişken trafik yok
  • 🐌 Nadir Deploy: Ayda 1-2 deployment

Mikroservis Bileşenleri

🚪 API Gateway

Tek Giriş Noktası

API Gateway Görevleri

Client Request

┌───────────────────────────────────────┐
│         API GATEWAY                   │
│                                       │
│  🔐 Authentication                    │
│  🎫 Authorization                     │
│  ⚖️  Load Balancing                   │
│  🔄 Request Routing                   │
│  🚦 Rate Limiting                     │
│  📊 Logging & Monitoring              │
│  🔀 Request/Response Transformation   │
│  🔌 Circuit Breaker                   │
└───────────────────────────────────────┘
    ↓         ↓         ↓         ↓
[User Svc] [Prod Svc] [Order] [Payment]

Popüler API Gateway’ler:

  • 🦍 Kong: Open source, plugin sistemi
  • 🌐 AWS API Gateway: Serverless
  • 🔷 Azure API Management
  • 🟠 Nginx: Reverse proxy + API gateway
  • Traefik: Cloud-native, Kubernetes friendly

Kong Örneği:

# Kong route config
services:
  - name: user-service
    url: http://user-service:3000
    routes:
      - name: user-route
        paths:
          - /api/users
    plugins:
      - name: rate-limiting
        config:
          minute: 100
      - name: jwt

🕸️ Service Mesh

Servisler Arası İletişim Yönetimi

Service Mesh Nedir?

Without Service Mesh:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Service A → Service B
Her serviste:
• Retry logic
• Circuit breaker
• Load balancing
• Security
→ Kod karmaşası, tekrar eden mantık

With Service Mesh (Istio):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Service A → [Sidecar Proxy] → [Sidecar Proxy] → Service B

Sidecar Proxy (Envoy):
• Otomatik retry
• Circuit breaking
• mTLS encryption
• Observability
→ Servis kodu temiz, logic dışarıda

Popüler Service Mesh:

  • Istio: En popüler, feature-rich
  • 🔗 Linkerd: Hafif, Kubernetes native
  • 🌐 Consul Connect: HashiCorp

📨 Event-Driven Architecture

Asenkron İletişim

Message Queue ile İletişim

Synchronous (REST API):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Order Service → (HTTP) → Payment Service → (HTTP) → Notification
                ⏱️ Bekle   ⏱️ Bekle             ⏱️ Bekle

Sorun: Payment servis çökerse Order takılır


Asynchronous (Event-Driven):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Order Service → [Event: OrderCreated] → Message Queue

                                        [Payment Service]
                                        [Notification Service]
                                        [Inventory Service]

Avantaj: Order servis event'i gönderip devam eder
         Payment çökse bile event kuyrukta bekler

Message Queue Teknolojileri:

  • 🐰 RabbitMQ: AMQP protokol, güvenilir
  • 🔴 Redis Pub/Sub: Hızlı, hafif
  • Apache Kafka: High-throughput, big data
  • ☁️ AWS SQS/SNS: Managed queue
  • 🔵 Azure Service Bus

Kafka Örneği:

// Producer (Order Service)
const kafka = require('kafkajs');

async function createOrder(orderData) {
  // Order oluştur
  const order = await db.orders.create(orderData);

  // Event gönder
  await producer.send({
    topic: 'order-created',
    messages: [{
      key: order.id,
      value: JSON.stringify({
        orderId: order.id,
        userId: order.userId,
        amount: order.amount
      })
    }]
  });

  return order;
}

// Consumer (Payment Service)
await consumer.subscribe({ topic: 'order-created' });

await consumer.run({
  eachMessage: async ({ message }) => {
    const order = JSON.parse(message.value);
    await processPayment(order);
  }
});

🔄 Saga Pattern

Distributed Transaction Yönetimi

Saga Pattern Nedir?

Problem: Mikroservislerde transaction yönetimi
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
E-Ticaret Sipariş:
1. Order Service: Sipariş oluştur
2. Payment Service: Ödeme al
3. Inventory Service: Stoktan düş
4. Shipping Service: Kargo oluştur

Sorun: Payment başarısız olursa?
       Order'ı nasıl geri alacağız?

Çözüm: Saga Pattern
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Choreography Saga:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. Order Service: OrderCreated event

2. Payment Service: PaymentProcessed event
   ↓ (HATA!)
   PaymentFailed event

3. Order Service: CancelOrder (compensate)

📦 Service Discovery

Servis Keşfi

Service Registry

Problem: Payment Service nerede?
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Kubernetes ortamında:
• Pod'lar dinamik IP alır
• Scale edilince yeni pod'lar
• Fail olan pod silinir

Çözüm: Service Discovery
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Service Registry (Consul, Eureka, K8s Service):

┌────────────────┐
│ Service        │
│ Registry       │
│                │
│ payment-svc:   │
│ - 10.0.1.5:8080│
│ - 10.0.1.8:8080│
└────────────────┘
      ↑    ↓
   Register Query
      ↓    ↑
┌──────────┐  ┌──────────┐
│ Payment  │  │  Order   │
│ Service  │  │ Service  │
└──────────┘  └──────────┘

Mikroservis Teknolojileri

🐳 Docker ve Kubernetes

Container Orchestration

Kubernetes ile Mikroservis

# User Service Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: user-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: user-service
  template:
    metadata:
      labels:
        app: user-service
    spec:
      containers:
      - name: user-service
        image: myapp/user-service:v1.2.0
        ports:
        - containerPort: 3000
        env:
        - name: DB_HOST
          valueFrom:
            configMapKeyRef:
              name: user-config
              key: db-host
        resources:
          requests:
            memory: "256Mi"
            cpu: "250m"
          limits:
            memory: "512Mi"
            cpu: "500m"
        livenessProbe:
          httpGet:
            path: /health
            port: 3000
          initialDelaySeconds: 30
          periodSeconds: 10
---
apiVersion: v1
kind: Service
metadata:
  name: user-service
spec:
  selector:
    app: user-service
  ports:
  - port: 80
    targetPort: 3000
  type: ClusterIP

🔍 Observability (Gözlemlenebilirlik)

3 Pillars of Observability

1. Logs

Centralized Logging (ELK Stack):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Microservices → Fluentd/Logstash → Elasticsearch → Kibana

Örnek Log:
{
  "timestamp": "2025-01-14T10:30:45Z",
  "service": "order-service",
  "level": "ERROR",
  "message": "Payment failed",
  "orderId": "ORD-12345",
  "userId": "USR-789",
  "errorCode": "INSUFFICIENT_FUNDS"
}

2. Metrics

Prometheus + Grafana:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Metrics:
• Request rate (requests/sec)
• Error rate (errors/sec)
• Duration (p50, p95, p99)
• Saturation (CPU, Memory)

Örnek Query (PromQL):
rate(http_requests_total[5m])  # Son 5 dk request rate
histogram_quantile(0.95, http_request_duration_seconds)  # p95 latency

3. Tracing

Distributed Tracing (Jaeger):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Request Flow:
API Gateway → User Service → Order Service → Payment Service
   [10ms]        [50ms]         [120ms]         [300ms]

Trace ID: 1234-5678-9abc
Total: 480ms

Her serviste span:
• Span ID
• Parent span ID
• Service name
• Duration
• Tags, logs

Mikroservis Best Practices

✅ Design Principles

1. Single Responsibility

❌ Kötü: User-Order-Payment Service (çok görev)
✅ İyi:  User Service
        Order Service
        Payment Service

2. Database per Service

❌ Kötü: Tüm servisler aynı DB
✅ İyi:  Her servisin kendi DB'si

3. API Versioning

❌ Kötü: /api/users (değişirse eski clientlar bozulur)
✅ İyi:  /api/v1/users
        /api/v2/users

4. Circuit Breaker

// Payment servis çöktüğünde
const circuitBreaker = require('opossum');

const options = {
  timeout: 3000, // 3sn timeout
  errorThresholdPercentage: 50, // %50 fail olursa aç
  resetTimeout: 30000 // 30sn sonra tekrar dene
};

const breaker = circuitBreaker(callPaymentService, options);

breaker.fire(orderId)
  .then(result => console.log(result))
  .catch(err => {
    // Fallback: Ödemeyi kuyrukta beklet
    console.log('Circuit open, queueing payment');
    queuePayment(orderId);
  });

5. Retry with Exponential Backoff

async function retryWithBackoff(fn, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await fn();
    } catch (err) {
      if (i === maxRetries - 1) throw err;
      const delay = Math.pow(2, i) * 1000; // 1s, 2s, 4s
      await sleep(delay);
    }
  }
}

Başarı Hikayesi

🚀 E-Ticaret Platformu

Durum (Monolitik):

  • 50+ developer, tek codebase
  • Deploy: Haftada 1 (riskli)
  • Downtime: Ayda 2-3 kez
  • Scaling: Tüm uygulamayı scale etmek gerek

Çözüm (Mikroservis):

  • 15 mikroservis
  • Kubernetes (AWS EKS)
  • API Gateway (Kong)
  • Event-driven (Kafka)
  • Service Mesh (Istio)

Sonuçlar (1 Yıl):

  • Deploy: Günde 20+ (bağımsız)
  • Downtime: %99.99 uptime
  • Scaling: Product servis 10x, Order 3x (bağımsız)
  • Geliştirme Hızı: %300 artış
  • Ekip Memnuniyeti: Yüksek (otonom ekipler)

Hemen Başlayın

Monolitik uygulamanızı mikroservislere dönüştürün. Ölçeklenebilir, esnek, cloud-native mimari ile modern yazılım geliştirin.

Mikroservis Hizmetlerimiz:

  • ✅ Mikroservis mimari tasarımı
  • ✅ Monolitten mikroservise migration
  • ✅ API Gateway implementasyonu
  • ✅ Service Mesh (Istio, Linkerd)
  • ✅ Event-driven architecture
  • ✅ Kubernetes deployment
  • ✅ CI/CD pipeline
  • ✅ Observability (Logs, Metrics, Tracing)
  • ✅ DevOps ve SRE

Ücretsiz Mikroservis Analizi | Mimari Danışmanlığı


İlgili Çözümler:

Popüler Aramalar: mikroservis mimarisi, microservices, api gateway, service mesh, kubernetes microservices, event driven architecture, distributed systems, cloud native

Bu çözüm işletmeniz için uygun mu?

Uzman ekibimizle görüşün, size özel bir teklif hazırlayalım.