Yoshi

Uzman
Katılım
21 Ağustos 2025
Mesajlar
12
Beğeniler
2
Merhaba dostlar, şimdi benim kurye çağırma tarzı bir mobil uygulamam var. Biraz büyük çaplı olduğu için kendi dedicated sunucumuzu aldık ve bizim ilk kurumsal projemiz olduğu için server tarafında kaldık. Sorun şu: 2 tane API'ler için VM'ler oluşturduk, API01, API02 mantığıyla ama sorun bunları nasıl yöneteceğimiz. Projede SignalR var, WebSocket var; haliyle de kuryenin konumu 5 saniyede bir güncelleniyor. Seçenekler şunlar:

a — Ters vekil (HAProxy/nginx) web01 üzerinde

Trafik web01'e gelir, o da sağlıklı API'lere dağıtır. /health uç noktasına düzenli istek atar, cevap vermeyeni havuzdan çıkarır, düzelince geri alır.
  • İkisi de aktif çalışır, yük paylaşılır.
  • Sağlık kontrolü gerçek — "makine açık" değil, "uygulama cevap veriyor" bakar.
  • Zaten TLS sonlandırma ve web sitesi için bir vekile ihtiyacımız var.
  • Web01 tek nokta ama zaten host da tek nokta, yani pratikte bir şey kaybetmiyoruz.
b — Keepalived + sanal IP

İki API bir IP'yi paylaşır, biri düşünce IP diğerine geçer. Ek VM yok, geçiş 1-3 saniye. Ama aktif-pasif — API02 boşta bekler. Ayrıca VRRP'yi öğrenmem gerekiyor.

c — Cloudflare tunnel, iki bağlayıcı

Cloudflared'ı iki API'de de çalıştırırız, ikisi de aynı tunnel ile bağlanır. Cloudflare sağlıksız olanı kendisi çıkarır.

Hangisini yapmamız daha sağlıklı olur?
 
Son düzenleyen: Moderatör:
Küçük olmayan bir proje varsa monitor ediyor olabilmeniz gerek, ortalama istek sayısı ne düzeylerde?

VM özellikleri ne?
 
A'yı seçmelisin, istediğin reverse-proxy'i karşılıyor. Ayrıca bütün potansiyeli elde etmiş oluyorsun.

Hocam ama o zaman da cache'lemeyi Redis'e taşımam gerekiyor çünkü API01 düşerse bazı background servisler ortak cache'de olmadığından bazı olaylar API02'ye ulaşmıyor. Hâl böyle olunca Web01 de düşebileceğinden Web02 VM'ini de kurmam gerekiyor; iş üstüne iş. 🙃

Küçük olmayan bir proje varsa monitor ediyor olabilmeniz gerek, ortalama istek sayısı ne düzeylerde?

VM özellikleri ne?

Şu an lansmana çıkmadı, proje kapalı betada ama özetlemem gerekirse her başarılı işlem sunucuya 3 istek atıyor. İlki HTTP/POST işlemi, 2. istekte WebSocket açılıyor ve durumlar otomatik güncelleniyor. 3. isteği de zaten WebSocket otomatik atıyor, sadece geri dönüşü kullanıcıya yapıyor.

VM özellikleri 8 vCPU, 16 GB RAM x2. Birçok işlemi PostgreSQL üzerinden cache'de hallediyorum, sadece son hâli DB'ye yazılıyor. O yüzden DB VM'leri 12 vCPU, 48 GB RAM.
 
Son düzenleme:
Hocam ama o zamanda cachlemeyi Redis'e taşımam gerekiyor çünkü API01 düşerse bazı background servisler ortak Cache'de olmadığından bazı olaylar API02'ye ulaşmıyor hal böyle olunca da web01'de düşebileceğinden web02 Vm'ni de kurmam gerekiyor iş üstüne iş 🙃

O zaman şöyle yap, Redis kurulumu yap, backplane + cache. Background process'leri worker'a taşı. Web01 üzerinden devam et; eğer ki trafiğin yoğunlaşırsa o zaman Web02'ya geçiş yap.
 
O zaman şöyle yap, Redis kurulumu yap, backplane + cache. Background process'leri worker'a taşı. Web01 üzerinden devam et; eğer ki trafiğin yoğunlaşırsa o zaman Web02'ya geçiş yap.
Çok mantıklı geldi hocam, eyvallah. Peki, worker'ı API'lerden bağımsız yönetmem mi iyi olur? Worker 01 VM kurup yoksa hiç ayrı VM işine girmeyeyim mi?