Monolitik SAAS Projesini Dockerize Edip Kubernetes, Redis Cache ve Azure ile Ölçeklendirme Deneyimlerim

Başlangıçta, SAAS mimarisinde geliştirilmiş ve 10 bin müşterisi olan bir projeyi IIS üzerinde tek bir sunucu ile çalıştırıyordum. Ancak müşteri tabanı genişledikçe performans sorunları yaşamaya başladık. Uygulamayı Dockerize ederek Kubernetes üzerinde 5 kopya ile ölçeklendirdim, Redis Cache kullanarak veritabanı yükünü hafiflettim, ayrıca CDN ve Azure Blob Storage ile projeyi daha verimli hale getirdim. Bu yazıda tüm bu süreçte yaşadığım deneyimleri paylaşmak istiyorum.

1. IIS Üzerinde Tek Sunucuda Çalışan Uygulama

Başlangıçta, uygulama IIS üzerinde tek bir sunucuda koşuyordu. 10 bin müşteriye hizmet sunarken, tek sunucu yapılandırması performans sorunlarına yol açtı. Artan trafikle birlikte:

  • Sunucu kaynakları hızla tükeniyordu.
  • Yüksek yanıt süreleri oluşmaya başladı.
  • Uygulamanın ölçeklendirme kapasitesi sınırlıydı.

Bu durum, projeyi daha ölçeklenebilir ve verimli hale getirmek için Docker, Kubernetes ve Redis gibi teknolojilere yönelmemi sağladı.

2. Dockerize Etme Süreci

Uygulamayı Docker konteynerlerine taşıyarak, bağımlılıklarıyla birlikte daha izole ve taşınabilir bir hale getirdim. Docker ile sağlanan avantajlar:

  • Platform bağımsızlığı: Uygulama her ortamda tutarlı bir şekilde çalıştırılabilir.
  • İzolasyon: Uygulama ve bağımlılıkları kendi konteynerinde izole edilerek çalıştırılır.
  • Kolay taşınabilirlik: Uygulamanın her ortamda aynı şekilde çalışmasını sağladım.

Dockerize edilmiş uygulama ile performansı artırmaya yönelik ilk adımı attım.

3. Kubernetes (K8s) ile 5 Kopya Üzerinden Ölçeklendirme

Docker ile konteynerize edilen uygulamayı Kubernetes üzerinde dağıtarak daha büyük bir ölçeklendirme elde ettim. Uygulamayı 5 kopya (replica) ile çalıştırarak, 10 bin müşterinin taleplerini daha iyi karşılamayı başardım. Kubernetes’in sunduğu faydalar:

  • Otomatik yük dengeleme: Kubernetes her kopya arasında gelen istekleri dengeler.
  • Yatay ölçeklendirme: İhtiyaca göre kopya sayısını artırarak veya azaltarak performansı optimize eder.
  • Kesintisiz dağıtım: Kubernetes ile uygulama güncellemeleri sırasında sıfır kesinti sağladım.

4. Redis Cache ile Veritabanı Performansının Artırılması

Veritabanı sorgularının uygulamanın performansını etkilemeye başladığını fark ettim ve Redis Cache kullanarak veritabanı yükünü hafiflettim. Redis Cache’in sağladığı avantajlar:

  • Düşük gecikmeli bellek içi veri saklama: Sıkça kullanılan verileri veritabanı yerine Redis’te saklayarak, sorgu performansını artırdım.
  • Yüksek hızlı okuma ve yazma: Redis, veritabanı sorgularını hızlandırdı ve sunucu yükünü azalttı.
  • Daha az veritabanı etkileşimi: Redis ile sık tekrarlanan sorguların sonucu önbelleğe alınarak veritabanına yapılan istekler minimize edildi.

Redis Cache kullanarak sadece sunucuların yükünü hafifletmekle kalmadım, aynı zamanda uygulamanın yanıt sürelerini de düşürdüm.

5. CDN ile Performans İyileştirme

Uygulamanın statik varlıklarını (CSS, JS, görseller) CDN ile dağıttım. Bu, uygulamanın yanıt süresini önemli ölçüde iyileştirdi. CDN sayesinde:

  • Statik içerikler dünya genelinde dağıtılmış sunuculardan sağlandı.
  • Uygulamanın sunucu yükü azaldı ve performans arttı.
  • Kullanıcı deneyimi genel olarak iyileşti.

Bu özellikle yoğun trafik altında uygulamanın performansını stabilize etmede kritik bir rol oynadı.

6. Azure Blob Storage ile Veritabanı Yönetimi

Projenin büyük veri setlerini Azure Blob Storage ile yöneterek, veri saklama ve erişim süreçlerini optimize ettim. Blob Storage’ın sağladığı avantajlar:

  • Veri büyüklüğüne göre ölçeklenebilirlik: Veri setleri büyüdükçe performans kaybı yaşamadan yönetilebilir.
  • Maliyet etkin veri saklama.
  • Hızlı ve güvenilir erişim: Verilere erişim hızlandı ve güvenli bir yapı sağlandı.

Azure Blob Storage, projedeki büyük dosyaların saklanması ve yönetimi için uygun bir çözüm sundu.

7. Sonuç ve Deneyimler

Sonuç olarak, başlangıçta IIS üzerinde tek sunucuda çalışan ve performans sorunları yaşayan bir SAAS projesini Dockerize ederek Kubernetes üzerinde 5 kopya halinde ölçeklendirdim. Redis Cache kullanarak veritabanı yükünü hafiflettim ve CDN ile statik içeriklerin performansını artırdım. Azure Blob Storage ile veri yönetimini optimize ettim. Bu süreçte elde ettiğim deneyimler, monolitik yapıdaki projelerin dahi modern teknolojilerle nasıl daha esnek, hızlı ve ölçeklenebilir hale getirilebileceğini gösteriyor.

Eğer siz de yüksek kullanıcı sayısına sahip bir projenin performans sorunlarıyla karşılaşıyorsanız, Docker, Kubernetes ve Redis gibi teknolojiler bu süreci çok daha verimli hale getirmenize yardımcı olabilir.