Türk Bayrağı
Software Architecture

Milyonluk Trafikleri Yönetmek: .NET Core REST API ve AKS Gücü

Selamlar dostlar! Bugün sizi standart "sunucuya dosyaları attım, çalışıyor" mantığından alıp, modern yazılım mimarisinin en güçlü duraklarından biri olan Azure Kubernetes Service (AKS) dünyasına davet ediyorum. Eğer hedefiniz sadece kod yazmak değil, saniyede binlerce isteği (request) banamısın demeden karşılayan, sarsılmaz bir yapı kurmaksa doğru yerdesiniz.

Yüksek hitli projelerde hepimizin uykusunu kaçıran o anı bilirsiniz: Black Friday, kampanya dönemi veya ani bir trafik patlamasında sistemin darboğaza girmesi. İşte AKS, tam da bu kriz anlarında devreye giren usta bir orkestra şefi gibidir. Sizin yerinize trafiği koklar, kaynakları ayarlar ve sistemin nefes almasını sağlar.

Peki, Neden Herkes Bu Kubernetes'i Konuşuyor?

Pek çok kişi "Neden basit bir VM değil de bu kadar tantana?" diye soruyor. İşin aslı, sağladığı şu kolaylıklarda gizli:

  • Sınırsız Ölçeklenme: Saniyede 100 istek alırken bir anda 10.000 isteğe mi çıktınız? AKS saniyeler içinde yeni "Pod"lar ayağa kaldırarak yükü dağıtır. Siz kahvenizi yudumlarken o savaşı arka planda kazanır.
  • Verimli Kaynak Kullanımı: Klasik sunucularda işlemcinin çoğu boşta yatar ama parasını tam ödersiniz. AKS'de her bir çekirdek ve MB RAM milimetrik hesaplanır; sistem ihtiyacı kadar genişler, iş bitince daralır.
  • Her Koşulda Ayakta Kalma: Bir veri merkezi sorun mu yaşadı? AKS, uygulamanızı başka noktalarda ayakta tutarak sistemin "ulaşılamaz" olmasını engeller.

Lafı Uzatmayalım: Uygulamaya Geçelim

1. Projeyi Docker ile Paketleme

İlk adımımız, uygulamamızı hafif ve hızlı bir imaj haline getirmek. İmaj ne kadar küçükse, yayına çıkması o kadar hızlı olur:

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY . .
RUN dotnet restore
RUN dotnet publish -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "SizinApiProjeniz.dll"]

2. İmajları ACR Üzerinde Saklamak

Hazırladığınız paketleri Azure'un özel deposuna (ACR) gönderiyoruz. AKS kümesinin bu depoya doğrudan erişebilmesi için "attach" komutuyla ikisini birbirine bağlıyoruz:

az aks create -g MyResourceGroup -n MyCluster --attach-acr MyRegistry

3. Kubernetes'e Emirleri Verme: Manifest Yazımı

İşte o meşhur .yaml dosyası. Burada Kubernetes'e "Benim API'mden her zaman en az 3 kopya ayakta kalsın, biri hata verirse hemen yenisini yarat" diyoruz:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dotnet-api-high-load
spec:
  replicas: 3
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  selector:
    matchLabels:
      app: prod-api
  template:
    metadata:
      labels:
        app: prod-api
    spec:
      containers:
      - name: api
        image: myregistry.azurecr.io/api:v1
        resources:
          requests:
            cpu: "250m"
          limits:
            cpu: "500m"

Ufak Bir Not: AKS harika bir araç ama onu yöneten sizin mimariniz. Yüksek hitli bir projede mutlaka HPA (Horizontal Pod Autoscaler) kurun ki CPU %70'i geçince sistem otomatik olarak vites artırsın.

Güvenlik: Blogumda her zaman söylediğim gibi; bağlantı cümlelerinizi, şifrelerinizi asla kodun içinde bırakmayın. Azure Key Vault kullanarak bu işi profesyonelce çözün.

Özetle AKS; profesyonel ligde oynamak isteyen her .NET geliştiricisinin elindeki en keskin araçlardan biridir. Eğer "sitem her zaman hızlı, her zaman ayakta olmalı" diyorsanız, bu dünyaya adım atma vaktiniz gelmiş demektir.