Eylül 19 2026

Legacy Sistemlerde Modernizasyon: ‘Strangler Fig’ Modeli ile Göç Stratejileri

Bir sabah uyandığınızda yönetimin “Artık bu monolit bizi taşımıyor, her şeyi sıfırdan yazıyoruz!” dediğini duyduysanız, soğuk terler dökmüşsünüzdür. Legacy bir altyapıyı bir gecede rafa kaldırmaya çalışmak (namıdiğer Big Bang rewrite), havacılıkta uçak havadayken motor değiştirmeye değil, uçağı havada patlatıp parçalarından jet yapmaya benzer. Başarılı bir modernizasyon süreci için ihtiyacımız olan şey cesur bir intihar girişimi değil, kontrollü bir yazılım mimarisi evrimidir. İşte tam bu noktada, monoliti boğarak öldüren mikroservis dönüşüm yaklaşımı: Strangler Fig (Boğucu İncir) paterni devreye giriyor.

Martin Fowler’ın Avustralya’daki asalak incir ağaçlarından esinlenerek adlandırdığı bu model, yeni sistemi eski sistemin etrafına adım adım sarıp, zamanla eskiyi işlevsiz bırakarak çürütme prensibine dayanır. Peki bu teoriyi prodüksiyonda 500k RPM trafik altında çalışan bir Kubernetes kümesinde nasıl hayata geçiririz? Gelin, lafı uzatmadan işin mutfağına inelim.

1. Keşif ve Sınırların Çizilmesi: Nereden Başlamalı?

Strangler Fig yaklaşımında yapılan en büyük hata, doğrudan sistemin kalbi sayılan domain’e (örneğin e-ticaretteki ödeme veya sipariş akışı) saldırmaktır. İlk adayınız şu üç kriteri sağlamalı:

  • Düşük Bağımlılık (Low Coupling): Monolitin veri tabanındaki 40 farklı tabloya JOIN atmayan bir context.
  • Yüksek Değer / Hızlı Kazanım: Hata yaptığınızda şirketi batırmayacak ama çalıştığında ekibe “bu iş oluyor” güvenini verecek bir modül (Örn: Bildirim servisi, PDF/Fatura oluşturucu, Statik içerik sunumu).
  • Net API Kontratı: Girdisi ve çıktısı belirgin olan işlevler.

Sınırları belirledikten sonra mimarinin en kritik bileşenini devreye alıyoruz: Interception (Yakalama) Katmanı.

2. Interception Katmanı: Akıllı Yönlendirme (Routing)

Strangler Fig modelinin kalbi API Gateway ya da Reverse Proxy katmanıdır. İstemciler (web, mobil, 3rd party API) asla monolitle mi yoksa yeni mikroservisle mi konuştuklarını bilmemelidir. Trafik önce bu katmana çarpar ve yönlendirme kurallarına göre hedefe dağıtılır.

Bu aşamada sadece path-based routing yetmez; feature flag’ler, canary dağıtımlar ve cookie/header bazlı yönlendirmeler gerekir. NGINX kullanarak bu katmanı nasıl kurabileceğimize bakalım:

# /etc/nginx/conf.d/strangler_router.conf

upstream legacy_monolith {
    server 10.0.1.10:8080 max_fails=3 fail_timeout=10s;
    keepalive 32;
}

upstream new_notification_service {
    server 10.0.2.20:3000 max_fails=2 fail_timeout=5s;
    keepalive 16;
}

# Feature flag kontrolü: Header veya Cookie bazlı canary
map $http_x_use_microservice $notification_backend {
    default legacy_monolith;
    "true"  new_notification_service;
}

server {
    listen 80;
    server_name api.sirket.internal;

    # Henüz dokunulmamış tüm trafik doğrudan monolite
    location / {
        proxy_pass http://legacy_monolith;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # Strangled endpoint: Kademeli göç edilen servis
    location /api/v1/notifications {
        proxy_pass http://$notification_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Request-ID $request_id;
        
        # Olası mikroservis çökmesinde monolite failover mekanizması
        proxy_next_upstream error timeout http_502 http_503;
        proxy_next_upstream_tries 2;
    }
}

Buradaki kritik detay proxy_next_upstream kullanımıdır. Yeni mikroservisiniz beklediğiniz yükü kaldıramaz veya 502/503 dönerse, istek anında monolite yönlendirilerek SLA ihlali önlenir. Tabii ki bu fallback state-mutating (POST/PUT/DELETE) isteklerde idempotentlik garantisi yoksa dikkatli kullanılmalıdır.

3. En Büyük Karın Ağrısı: Veri Bütünlüğü ve CDC (Change Data Capture)

İş mantığını ayırmak kolaydır; veri tabanını ayırmak ise tam bir mayın tarlasıdır. Legacy uygulamalarda genellikle tek bir devasa MySQL veya Oracle veri tabanı bulunur. Mikroservis mimarisinde ise her servisin kendi veri tabanı olmalıdır (Database-per-Service).

Bunu çözmek için kesinlikle monolit içinden “hem eski DB’ye yazayım hem yeni servisin DB’sine yazayım” (Dual Writing) gafletine düşmeyin. Ağ gecikmeleri, connection pool tükenmesi ve dağıtık transaction problemleri başınızı ağrıtır. Bunun yerine Change Data Capture (CDC) kullanarak veri akışını asenkron hale getirin.

Debezium ve Apache Kafka ikilisi, legacy veri tabanının transaction log’larını (binlog / redo log) dinleyerek olay bazlı (event-driven) veri aktarımı sağlar:

# Debezium MySQL Source Connector Konfigürasyonu (Kafka Connect REST API)
curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" \
  http://kafka-connect.infra:8083/connectors/ \
  -d '{
    "name": "legacy-mysql-cdc-connector",
    "config": {
      "connector.class": "io.debezium.connector.mysql.MySqlConnector",
      "tasks.max": "1",
      "database.hostname": "legacy-db-primary.internal",
      "database.port": "3306",
      "database.user": "debezium_cdc",
      "database.password": "VaultGuardedSecret123!",
      "database.server.id": "184054",
      "database.server.name": "legacy_core",
      "database.include.list": "core_production",
      "table.include.list": "core_production.notifications,core_production.user_preferences",
      "database.history.kafka.bootstrap.servers": "kafka-cluster:9092",
      "database.history.kafka.topic": "schema-changes.legacy.core",
      "decimal.handling.mode": "double",
      "time.precision.mode": "connect"
    }
  }'

Bu yapı sayesinde, monolit eski tabloya yazmaya devam ederken Debezium bu değişiklikleri anında Kafka’ya fırlatır. Yeni mikroservisiniz de bu event’leri tüketerek (consume) kendi izole PostgreSQL veya MongoDB veritabanını besler (Eventual Consistency).

4. Trafik Kademelendirme: Shadowing (Dark Launching)

Yeni yazdığınız mikroservisi prodüksiyon trafiğiyle ilk kez karşılaştırmak istemezsiniz. Yük testleri sentetiktir; gerçek kullanıcı davranışlarını simüle edemez. Bu yüzden Traffic Shadowing (Trafik Aynalama) tekniğini kullanmalısınız.

Trafik Gateway katmanına geldiğinde hem monolite hem de mikroservise gönderilir. Monolitin cevabı kullanıcıya dönülürken, mikroservisin cevabı arka planda loglanır veya karşılaştırılır (semantic diffing). İstemci mikroservisten haberdar bile olmaz.

Kubernetes üzerinde Envoy tabanlı bir Ingress (örneğin Emissary-ingress veya doğrudan Envoy proxy) kullanıyorsanız, shadowing tanımı şu kadar basittir:

apiVersion: getambassador.io/v3alpha1
kind: Mapping
metadata:
  name: notification-shadow-mapping
  namespace: production
spec:
  hostname: api.sirket.internal
  prefix: /api/v1/notifications/send
  service: legacy-monolith-service.production:8080
  shadow: true
  shadow_service: new-notification-microservice.modern-apps:3000
  timeout_ms: 2500

Shadowing devredeyken neyi izlemelisiniz?

  • HTTP Status Kodu Farkları: Monolit 200 dönerken mikroservis 500 mü veriyor? Neden?
  • p99 ve p95 Latency: Yeni servis gerçekten hedeflenen performansı sunuyor mu?
  • Payload Uyuşmazlığı: Yanıt gövdeleri arasındaki farklar neler?

5. Monoliti Boğmak: Eski Kodu Temizlemek

Mikroservisiniz shadowing aşamasını başarıyla geçti, veri senkronizasyonu stabil, canary deployment ile trafiğin %100’ünü yeni servise aktardınız. Tebrikler, servisi göç ettiniz!

Ama işiniz bitmedi. Strangler Fig paterninin son ve en çok ihmal edilen adımı: Eski kodun monolit içinden sökülüp atılmasıdır.

Geliştiriciler genelde “ne olur ne olmaz, kod kalsın” diyerek eski methodları ve endpoint’leri monolitte bırakır. Bu durum, monoliti zamanla yaşayan bir zombi kod yığınına çevirir. Bir sonraki göç adımında bu zombiler ayağınıza dolanır.

Yapılacaklar net:

  1. Monolitteki eski endpoint’e bir log alert’i koyun (artık 0 istek alıyor olmalı).
  2. Monolit kod tabanından ilgili controller, service ve data access katmanlarını silin.
  3. CDC konfigürasyonundan o tabloyu çıkartın ve monolit veri tabanındaki eski tabloyu READ-ONLY moda alıp birkaç hafta sonra arşivleyin.

Özet ve SRE Çıkarımları

Bir legacy mimariyi modernize etmek yazılım mühendisliğinden çok bir cerrahi operasyondur. Strangler Fig yaklaşımı bu operasyonu lokal anestezi altında, hasta yürümeye devam ederken yapmanızı sağlar.

Bu yolculukta aklınızdan çıkarmamanız gereken altın kurallar şunlar:

  • Önce Gateway katmanını güçlendirin; yönlendirme kabiliyetiniz yoksa göçü yönetemezsiniz.
  • Veritabanı senkronizasyonunu CDC gibi asenkron ve güvenilir araçlarla çözün.
  • Prodüksiyon trafiğini aynalayarak (traffic mirroring) riskinizi sıfırlayın.
  • Göçü tamamlanan her parçadan sonra monolitteki ölü kodu acımadan temizleyin.

Bir sonraki sprint planlamasında masaya “Her şeyi sıfırdan yazalım” fikri gelirse, bu makaleyi Slack kanalına usulca bırakın ve monoliti boğmaya odaklanın.

Category: Genel | LEAVE A COMMENT
Eylül 15 2026

HRV ile Veri Odaklı Dinlenme: Antrenman Yükünüzü Vücudunuza Göre Ayarlayın

Sabah saat 06.30. Alarm çaldı, gözlerinizi açtınız ve antrenman takviminizde kırmızı harflerle “10 km Tempo Koşusu” ya da “Ağır Bacak Günü” yazıyor. Fakat yataktan kazınarak kalkıyorsunuz. Kafanızda o klasik iç savaş başlar: “Sadece tembellik mi yapıyorum, yoksa vücudum gerçekten bitik mi?” Modern spor ve sağlık dünyasında bu ikilemi çözmenin artık tahminlere dayanmayan bir yolu var: Akıllı saatlerimizden gelen veri analizi ve bu analizlerin göz bebeği olan HRV (Heart Rate Variability / Kalp Atış Hızı Değişkenliği).

Gelin, vücudunuzun size fısıldadığı sinyalleri nasıl okuyacağınıza ve dinlenme günlerinizi nasıl bir süper güce dönüştüreceğinize yakından bakalım.

HRV Tam Olarak Nedir? (Hayır, Kalbiniz Bir Metronom Değildir)

Çoğumuz kalbimizin dakikada 60 kez atmasını, her vuruşun tam olarak saniyede bir gerçekleştiği muntazam bir saat tiktakı gibi hayal ederiz. Oysa gerçekte olan bu değildir; hatta kalbinizin bir metronom gibi kusursuz aralıklarla atması pek de iyiye işaret sayılmaz.

HRV, ardışık kalp atışları arasındaki mikroskobik zaman farklarını (milisaniye cinsinden) ölçer. Bir atış 0.95 saniye sonra geliyorsa, diğeri 1.05 saniye sonra gelebilir. Bu değişkenliği yöneten ise otonom sinir sistemimizdir:

  • Sempatik Sinir Sistemi (“Savaş ya da Kaç”): Kalp atışlarını hızlandırır ve vuruşlar arasındaki zaman aralığını daha tekdüze (düşük HRV) hale getirir. Vücut stres altındadır.
  • Parasempatik Sinir Sistemi (“Dinlen ve Sindir”): Vagus siniri aracılığıyla frene basar, kalbi yavaşlatır ve atımlar arasındaki değişkenliği artırır (yüksek HRV). Beden toparlanmıştır, adaptasyon yeteneği yüksektir.

Kısacası; genel olarak yüksek bir HRV, otonom sinir sisteminizin dengeli, dinlenmiş ve yeni stres faktörlerini (mesela sert bir antrenmanı) göğüslemeye hazır olduğunu gösterir.

Neden “No Pain, No Gain” Devri Kapandı?

Eski ekol fitness anlayışı, salona girip her gün kendinizi tüketmenizi öğütlüyordu. Ancak fizyoloji böyle çalışmaz. Gelişim, ağırlık kaldırırken ya da kilometreleri tüketirken değil; o antrenmandan sonra doğru şekilde dinlenip süperkompanzasyon evresine geçtiğinizde gerçekleşir.

Araştırmalar gösteriyor ki, katı ve sabit bir program yerine HRV verisine göre esnetilen antrenman blokları uygulayan sporcular; daha az efor harcayarak benzer hatta daha yüksek performans artışı elde ediyor. En önemlisi de aşırı sürantrenman (overtraining) sendromu ve sakatlık riskleri dramatik ölçüde düşüyor.

Önemli Bir Hatırlatma: HRV, tek başına bir tıbbi teşhis aracı değildir. Günlerce süren açıklanamayan düşük HRV değerlerine aşırı yorgunluk, göğüs ağrısı veya baş dönmesi eşlik ediyorsa, antrenmanı erteleyip mutlaka bir kardiyoloji uzmanına veya hekime danışmalısınız.

Kişisel Veri Analizi: Sayıları Nasıl Yorumlamalısınız?

Arkadaşınızın HRV değerinin 85 ms olması, sizin 45 ms olan değerinizin “kötü” olduğu anlamına gelmez. HRV; genetik, yaş, cinsiyet ve fizyolojik geçmişe göre inanılmaz değişkenlik gösterir. Başkalarıyla yarışmayı bırakın; burada önemli olan sizin kendi baz değerinizdir (baseline).

Akıllı saatiniz veya göğüs bandınızla en az iki hafta boyunca her sabah (veya gece uykusu boyunca) ölçüm yaparak kendi taban çizginizi belirleyin. Ardından sistemi trafik ışıkları mantığıyla çalıştırın:

1. Yeşil Işık (HRV Baz Değerinde veya Üzerinde)

Parasempatik sistem devrede, toparlanma eksiksiz. Ağır deadlift’ler, yüksek yoğunluklu interval koşuları (HIIT) veya kişisel rekor (PR) denemeleri için mükemmel bir gün. Gaza basın.

2. Sarı Işık (HRV Baz Değerin %10-15 Altında)

Sistem hafif yorgun. Kötü bir gece uykusu, işte yaşanan stres ya da dünkü antrenmanın kalıntısı olabilir. Bugün antrenmanı iptal etmek zorunda değilsiniz; fakat yoğunluğu Zone 2 kardiyo, mobilite veya hafif bir kuvvet çalışmasına çekmek akıllıca olacaktır.

3. Kırmızı Işık (HRV Belirgin Biçimde Düşük)

Bedeniniz açıkça “Beni rahat bırak” diyor. Bu günlerde ağır antrenman yapmak kas inşa etmez, sadece kortizolü fırlatıp sakatlığa davetiye çıkarır. Tam dinlenme, uzun bir yürüyüş, esneme veya kaliteli bir şekerleme yapılacak gündesiniz.

HRV Verinizi Yukarı Çekecek Eyleme Geçirilebilir Adımlar

HRV’nizin düşük olduğunu gördünüz, peki bunu toparlamak için ne yapabilirsiniz? Hayat tarzınızda küçük ama kritik ayarlar yapmanın tam zamanı:

  1. Akşam Yemeği ile Uyku Arasına Mesafe Koyun: Yatmadan hemen önce yenen ağır bir yemek, kalbinizin gece boyunca dinlenmek yerine sindirimle uğraşmasına neden olur ve HRV’yi dibe çeker. Uykudan 3 saat önce yemeyi kesin.
  2. Alkol İllüzyonunu Fark Edin: “Akşam içtiğim iki kadeh şarap beni rahatlatıyor” diyebilirsiniz, ancak HRV verileriniz yalan söylemez. Alkol, parasempatik sistemi baskılar ve uyku kalitenizi yerle bir eder. Deneyin; içtiğiniz gecelerin sabahında HRV grafiğinizdeki serbest düşüşü net şekilde göreceksiniz.
  3. Yavaş ve Bilinçli Nefes Alın: Günde sadece 10 dakika boyunca uygulayacağınız 4 saniye nefes al, 6 saniye ver (kutu nefesi veya rezonans nefesi) protokolü, vagus sinirini doğrudan uyararak toparlanma sürecinizi tetikler.
  4. Aktif Dinlenmeye Şans Verin: Dinlenmek demek bütün gün koltukta hareketsiz kalmak demek değildir. Düşük tempolu doğa yürüyüşleri kan dolaşımını hızlandırarak dokuların onarılmasına yardım eder.

Bedeninizle Savaşmayı Bırakın

Veriye dayalı dinlenme, tembelliğe mazeret bulmak değil; bilimi arkamıza alarak daha sürdürülebilir bir gelişim yakalamaktır. Akıllı saatinizdeki grafikleri birer pranga gibi görmek yerine, vücudunuzun o günkü kapasitesini fısıldayan bir pusula olarak kullanın. Ne zaman yükleneceğinizi bilmek kadar, ne zaman geri çekileceğinizi bilmek de gerçek bir sporcu disiplinidir.

Category: Genel | LEAVE A COMMENT
Eylül 13 2026

Dijital Göçebeler İçin Uydu İnterneti Testleri: Starlink ve Gerçek Dünya Performansı

Bir digital nomad olarak seyahat rotanızı belirlerken haritada ilk baktığınız şey deniz manzarası değil, o bölgenin connectivity kapasitesidir. Çünkü en romantik gün batımı bile teslim edilmesi gereken acil bir proje varken anlamsızlaşır. Son yıllarda altyapıdan uzak koylar, dağ köyleri ve sınır boyları bizi çağırırken, mobil şebekelerin bittiği yerde devreye giren satellite internet çözümleri birer lüksten ziyade hayatta kalma kitine dönüştü. Özellikle Starlink cephesinde yaşanan taşınabilirlik devrimi, çalışma masamızın sınırlarını yeniden çiziyor.

Karadağ Yaylalarından Ege Koylarına: Kapsama Alanı İllüzyonu

Kafanızda canlandırın: Karadağ’ın Durmitor eteklerinde, geceliği 25 Euro olan ahşap bir dağ kulübesindesiniz. Ev sahibi ilanda gururla “Hızlı Wi-Fi” yazmış ama vardığınızda modemin 3G hızında can çekiştiğini görüyorsunuz. Tam o anda başlayacak bir müşteri toplantısı, göçebe hayatın en soğuk terlerini döktürür. Benzer bir senaryoyu Likya Yolu üzerindeki izole koylarda ya da Fas’ın Atlas Dağları’nda yaşamak işten bile değil.

Mobil operatörlerin kapsama haritaları genellikle pazarlama departmanlarının hayal gücünü yansıtır. Vadi tabanları, yoğun çam ormanları veya sınır köyleri operatörlerin radarına girmez. İşte tam bu boşlukta gökyüzüne bakmak zorunda kalıyoruz. Ancak gökyüzü de her zaman kusursuz bir bağlantı vadetmiyor; uydu teknolojisinin gerçek dünyadaki performansı laboratuvar verilerinden epey farklı çalışıyor.

Bütçe tüyosu: Uydu donanımı satın almadan önce rotanızdaki yerel marketlerden edineceğiniz iki farklı operatöre ait fiziksel SIM kartı dual-SIM bir telefonda test edin. Çoğu zaman 15-20 Euro harcayarak 50 GB yerel veri almak, uydu yatırımı yapmaktan çok daha hesaplı bir geçici çözümdür.

Çantadaki Tabak: Starlink Mini ile Sahaya İnmek

Eski nesil standart Starlink antenlerini hatırlarsınız; devasa bir çanak, koca bir yönlendirici ve jeneratör gerektiren güç tüketimiyle sırt çantalı bir gezginden ziyade karavan kabilelerine hitap ediyordu. Starlink Mini’nin sahneye çıkışı bu denklemi kökten değiştirdi. Bir dizüstü bilgisayar boyutundaki bu cihaz yaklaşık 1.1 kilogram ağırlığında ve doğrudan sırt çantanızın laptop gözüne sığıyor.

Cihazı kurmak inanılmaz pratik; çantadan çıkarıp gökyüzünü net gören bir zemine koymanız ve telefon uygulamasından açıyı ayarlamanız yaklaşık üç dakika sürüyor. Enerji tüketimi ise ortalama 25-40 Watt civarında. Bu da demek oluyor ki, 100W PD çıkışlı iyi bir 20.000 mAh powerbank ile prizden uzakta kesintisiz üç ila dört saat çalışabilirsiniz. Donanım maliyeti bölgeye göre 300 ile 400 Dolar arasında değişiyor; aylık 50 GB kotalı bölgesel dolaşım paketi ise 50 Dolar civarında seyrediyor. Eğer limitsiz dolaşım isterseniz aylık fatura 100 Dolar bandına yaklaşıyor.

Performans tarafında ise Balkanlar ve Güney Avrupa kırsalında yaptığımız hız testlerinde 80 ile 130 Mbps arasında indirme, 15 ile 25 Mbps yükleme hızlarına ulaştık. Gecikme süresi (latency) ise 35-50 milisaniye bandında kaldı. Bu değerler, iki kişinin eşzamanlı video konferans yapması ve büyük Figma dosyalarıyla boğuşması için fazlasıyla yeterli.

Kritik saha notu: Starlink’in en büyük düşmanı binalar değil, ağaçlardır. Kamp alanında gölge arayan göçebe içgüdünüzle uyduyu ağaç altına kurarsanız, her 40 saniyede bir 2 saniyelik mikro kopmalar yaşarsınız. Video görüşmesi yapacaksanız gölgeden feragat edip açık gökyüzüne çıkmanız şart.

Alternatifler Ne Durumda: Iridium, OneWeb ve Hibrit Rotalar

Piyasada Starlink tek oyuncu gibi görünse de kurumsal tarafta OneWeb ve bireysel acil durum tarafında Iridium gibi devler var. Ancak bir dijital göçebe gözüyle baktığınızda işler değişiyor. Iridium GO! gibi cihazlar inanılmaz dayanıklı ve kutuplarda bile çalışıyor fakat sundukları hız sadece metin tabanlı mesajlaşmaya ve acil durum SOS sinyallerine izin veriyor; yani Zoom toplantısı açmak hayal. Cihaz bedeli 800 Dolar civarındayken dakikası ve verisi oldukça pahalı aboneliklerle geliyor.

OneWeb ise henüz bireysel taşınabilir terminaller sunmuyor; daha çok denizcilik ve havacılık sektörüne odaklı. Bu yüzden bugün sırt çantasına atıp kahvehaneden çalışır gibi vadiden çalışabileceğiniz tek gerçek genişbant uydu alternatifi Starlink ekosistemi. Eğer bütçeniz bu donanıma henüz elvermiyorsa, en mantıklı ara formül “bonding” teknolojileridir. İki farklı yerel mobil şebekeyi USB modemler ve Speedify gibi yazılımlarla birleştirmek, zayıf sinyalleri tek bir kararlı hatta dönüştürerek sizi çoğu fırtınadan kurtarabilir.

Gerçek Maliyet Hesabı: Kimler İçin Mantıklı?

Bütçe bilincine sahip bir gezgin olarak şu soruyu sormak zorundasınız: Yılda kaç gün gerçekten hücresel kapsamanın sıfır olduğu yerlerde çalışıyorum? Ayda bir kez şehirden uzaklaşıp doğaya kaçıyorsanız, 400 Dolarlık cihaz yatırımı ve her ay ödenecek abonelik ücreti dijital göçebe bütçenizi gereksiz yere hırpalar. Üstelik Starlink servis planını dilediğiniz zaman dondurabilseniz de fatura dönemleri arasındaki geçişlerde bazen esneklik kayıpları yaşanabiliyor.

Ancak vaktinizin çoğunu Gürcistan’ın izole köylerinde, Arnavutluk Alpleri’nde veya Türkiye’nin el değmemiş yaylalarında geçiriyorsanız, bu sistem birkaç gün içinde kendi amortismanını çıkarır. Çalışamadığınız için kaçırdığınız bir teslimat ya da iptal olan bir sözleşme, uydunun yıllık maliyetinden kat kat daha pahalıya mal olur. Özgürlük, nereye gidebileceğinizi bilmek kadar, oraya vardığınızda işinizi teslim edebileceğinizden emin olmaktır.

Category: Genel | LEAVE A COMMENT
Eylül 12 2026

Sürdürülebilir Seyahat Rehberi: Yavaşla, Tasarruf Et ve Dünyayı Koru

Havalimanındaki o plastik kokulu güvenlik sırasını bilirsiniz. Kemerler çıkarılır, bilgisayarlar kutulara fırlatılır ve sadece kırk beş dakikalık bir uçuş için en az üç saat heba edilir. İşte tam bu anlarda, gezegenle kurduğumuz ilişkiyi sorgulamamak elde değil. Son yıllarda adını sıkça duyduğumuz sürdürülebilir turizm, yalnızca lüks otellerin banyosuna “havlunuzu tekrar kullanın” kartı koymasından ibaret değil. Bu, dünyaya bıraktığımız izin bilincinde olarak hareket etmek, üstelik bunu cüzdanımızı delmeden başarmak anlamına geliyor.

Gerçek bir çevre dostu seyahat, fedakarlıklarla dolu çileli bir inziva olmak zorunda değil. Hatta tam aksine; acele etmeyi bıraktığınızda seyahatin kendisi bir varış noktasına dönüşüyor. Seyahat ederken dünyayı daha az tüketmenin ve bunu yaparken yerel deneyimleri katlamanın yollarını birlikte keşfedelim.

Uçakları Boş Verin: Rayların Üzerinde Yavaş Seyahat

Karbon ayak izimizin en büyük suçlusu neredeyse her zaman havacılık sektörü. Bir yolcunun trenle seyahat ettiğinde ürettiği karbon salınımı, aynı mesafeyi uçakla katetmesine kıyasla ortalama yüzde seksen daha azdır. İşte bu noktada yavaş seyahat felsefesi devreye giriyor. Bir şehirden diğerine ışınlanmak yerine, coğrafyanın yavaşça değiştiğini izlemek hem zihne hem de çevreye iyi geliyor.

Bunu somut bir örnekle ele alalım. Orta Avrupa’da Viyana’dan Venedik’e gitmek istediğinizi varsayın. Uçak bileti ucuz gibi görünse de havalimanı transferleri, bagaj ücretleri ve karbon yükü cabası. Oysa ÖBB Nightjet gibi gece trenleriyle akşam 21.30’da Viyana’dan binip sabah 08.30’da doğrudan Venedik Santa Lucia İstasyonu’nda uyanabilirsiniz. Yataklı kompartıman fiyatları erkenden rezerve edildiğinde 39 ile 69 Euro arasında değişiyor. Böylece hem bir gecelik konaklama masrafından tasarruf ediyor hem de sabahın ilk ışıklarında kanalların kıyısına ayak basıyorsunuz.

Gece treni biletlerini doğrudan devlet demiryollarının resmi sitelerinden (ÖBB, Deutsche Bahn, Trenitalia gibi) seyahatten en az altmış gün önce alın. Aracı sitelerin koyduğu komisyonlardan kurtulur, Sparschiene adı verilen indirimli biletleri kaparsınız.

Kendi coğrafyamıza baktığımızda Sofya Ekspresi harika bir alternatif sunuyor. İstanbul Halkalı’dan akşam binip sabah Sofya’da olmak, yaklaşık on bir saatlik bir nostalji yolculuğu demek. Kuşetli vagon biletleri kırk Euro civarında seyrediyor. Uçak stresini, transfer karmaşasını ve devasa karbon salınımını denklemden çıkardığınızda, trenin ritmik tıkırtısı paha biçilemez bir terapiye dönüşüyor.

Greenwashing Tuzağına Düşmeden Etik Konaklama

Sürdürülebilirlik modası başladığından beri her otel zinciri kendini “yeşil” ilan etti. Pazarlamacıların greenwashing dediği bu göz boyama taktiğine aldanmamak gerekiyor. Bir otelin lobisinde devasa yapay bitkiler olması veya pet şişe yerine cam şişe koyması onu çevre dostu yapmaz. Asıl mesele; o işletmenin yerel ekonomiye ne kadar katkı sağladığı, enerjisini nereden aldığı ve atık yönetimini nasıl kurguladığıdır.

Bütçe bilincine sahip gezginler için en etik ve sürdürülebilir konaklama yolu, yerel aile işletmeleri, eko-hosteller ve kırsal pansiyonlardır. Örneğin İtalya ve İspanya’da yaygın olan Agriturismo tipi çiftlik konaklamaları harika bir model sunar. Şehir merkezindeki standart bir otel odasına gecelik yüz Euro vermek yerine, zeytinlikler arasındaki bir aile çiftliğinde gecelik kırk-elli Euro’ya kalabilirsiniz. Bu işletmelerde yediğiniz domates birkaç metre ötedeki bahçeden toplanır, elektrik genellikle çatıdaki güneş panellerinden sağlanır ve bıraktığınız para doğrudan yerel halkın cebine gider.

Konaklama seçerken Booking veya Airbnb üzerindeki filtrelerden ziyade Green Key veya EU Ecolabel sertifikalarına bakın. Rezervasyon yapmadan önce işletmeye “kahvaltıdaki ürünler yerel üreticilerden mi alınıyor?” sorusunu içeren samimi bir mesaj atın; cevabın içtenliği size her şeyi anlatır.

Topluluk temelli eko-hosteller de yalnız seyahat edenler için biçilmiş kaftan. Bu yerler sadece bir yatak sunmaz; ortak mutfak kullanımıyla gıda israfını önler, ücretsiz şehir bisikletleri sağlar ve genellikle şehri yürüyerek keşfetmeniz için turlar düzenler. Yatakhane fiyatları Avrupa genelinde gecelik yirmi ile otuz beş Euro bandında değişirken, yerel kültüre saygılı bir gezgin komünitesinin parçası olmanızı sağlar.

Yerel Ritim: Yürümek, Mevsiminde Yemek ve Az Tüketmek

Çevre dostu bir seyahatin en büyük sırrı aslında sadelikte gizli. Bir şehri keşfetmenin en ucuz ve en temiz yolu tabanvay yöntemidir. Günlük on beş bin adım attığınızda, hiçbir tur otobüsünün geçmediği dar sokakları, köşe başındaki eski fırını ve yerel marangozu keşfedersiniz. Ulaşımda toplu taşımayı, tramvayları ve paylaşımlı bisikletleri tercih etmek hem günlük ulaşım bütçenizi beş-altı Euro civarında tutar hem de şehrin havasını kirletmenizi önler.

Yeme-içme tarafında ise kural basit: mevsimi ve coğrafyayı takip edin. Denizden kilometrelerce uzaktaki bir dağ köyünde ithal somon balığı yemek ekolojik bir saçmalıktır. Semt pazarlarını ziyaret edin. Sabahın erken saatlerinde kurulan pazarlardan alacağınız yerel peynir, taze ekmek ve meyvelerle parkta yapacağınız bir piknik, turist tuzaklarıyla dolu restoranlarda harcayacağınız otuz Euro’dan çok daha lezzetli ve anlamlı olacaktır.

Günün sonunda sürdürülebilir seyahat, gezdiğimiz yerleri sadece tüketilecek birer arka plan olarak görmeyi bırakmaktır. Yavaşladığınızda, tren pencerelerinden manzarayı izlediğinizde ve yerel insanlarla gerçekten göz teması kurduğunuzda seyahat ruhunuza dokunmaya başlar. Üstelik geride bıraktığınız tek şey ayak iziniz, yanınıza aldığınız tek şey ise gerçek anılar olur.

Category: Genel | LEAVE A COMMENT
Ağustos 31 2026

Sırt Çantalı Geliştiriciler İçin ‘Connectivity’ Rehberi: Global eSIM ve Uydu İnterneti Testleri

Bir dijital göçebe olarak sırt çantanızı toplayıp yola çıktığınızda, özgürlük hissi harikadır. Ta ki uzak bir sahil kasabasında ya da bir dağ yamacında kritik bir production bug’ı patlayana kadar. Günümüzde seyahat etmek sadece yeni yerler keşfetmek anlamına gelmiyor; doğru teknoloji ve güvenilir bir internet altyapısıyla çalışabilirliğinizi korumak anlamına da geliyor. Kahve dükkânlarının kaprisli Wi-Fi ağlarına ya da pansiyonun “üst katta az çekiyor” masallarına bel bağlamak istemiyorsanız, bağlantı stratejinizi baştan kurmanız şart.

Havalimanında Sıra Bekleme Devri Bitti: Global eSIM Çözümleri

Eskiden yeni bir ülkeye indiğimizde ilk işimiz pasaport kontrolünden sonra yerel bir SIM kart kuyruğuna girmek olurdu. Hem zaman kaybı hem de turist tarifeleri yüzünden gereksiz maliyet demekti bu. Bugün eSIM teknolojisi, sınırları aşarken bağlantıyı tereyağından kıl çeker gibi halletmemizi sağlıyor. Uçağınız piste teker koyduğu anda yerel operatöre bağlanan bir telefon, özellikle acil Slack mesajlarına dönmeniz gerektiğinde hayat kurtarıyor.

Airalo, Maya Mobile ve Roamless gibi servislerle yaptığım son Güneydoğu Asya ve Balkanlar testlerinde durum oldukça netleşti. Bölgesel paketler genellikle 5 GB ile 20 GB arasında değişiyor ve fiyatları 12 ila 35 Dolar bandında seyrediyor. Eğer sabit bir yerde kalmayıp sürekli ülke değiştirecekseniz, tekil ülke paketleri yerine Asya veya Avrupa bölgesel paketlerini seçmek çok daha ekonomik oluyor. Roamless gibi kullandığın kadar öde mantığıyla çalışan eSIM sağlayıcıları ise veri paketinizin süresi dolmadan, bakiyenizi sonraki seyahatlere aktarmanıza imkân tanıyor.

eSIM profilinizi mutlaka henüz evinizdeyken veya hızlı bir havaalanı Wi-Fi ağına bağlıyken kurun. Varış noktasında mobil veri bulamadığınızda profili yüklemeye çalışmak tam bir kısırdöngü yaratır. Ayrıca cihazınızın APN ayarlarını otomatik alıp almadığını kalkıştan önce kontrol etmekte fayda var.

Peki eSIM geliştiriciler için ne kadar stabil? Git push işlemleri, terminal üzerinden SSH bağlantıları ve günlük mesajlaşmalar için gecikme süreleri (latency) 60-120 ms arasında gayet kabul edilebilir düzeyde kalıyor. Ancak iş ekran paylaşımı yapacağınız bir Zoom toplantısına veya büyük bir Docker imajı indirmeye geldiğinde, hücresel verinin çekim gücüne doğrudan bağımlı kalıyorsunuz. Kırsala doğru uzaklaştıkça tek bir baz istasyonuna mahkûm olmak, bağlantınızın aniden 3G hızlarına düşmesine sebep olabiliyor.

Dağın Başında SSH Bağlantısı: Starlink Mini Gerçeği

Hücresel kapsamanın tamamen bittiği, doğayla baş başa kalıp kod yazmak istediğiniz anlarda sahneye Starlink Mini çıkıyor. Sırt çantasına rahatlıkla sığabilen bu yeni model, yaklaşık 1.1 kilogramlık ağırlığıyla taşınabilirliği tamamen yeni bir boyuta taşıdı. Standart çanaklara kıyasla çok daha az güç tüketen cihaz, USB-C Power Delivery desteği sayesinde 100W gücündeki kaliteli bir powerbank ile yaklaşık 3-4 saat boyunca kesintisiz çalışabiliyor.

Kafkaslar ve güney kıyılarımızın kör noktalarında gerçekleştirdiğim testlerde Starlink Mini, açık gökyüzü altında ortalama 80-130 Mbps indirme ve 15-25 Mbps yükleme hızlarına ulaştı. En önemlisi, gecikme süresinin 35-50 ms bandında kalması sayesinde terminal oturumları neredeyse ofis fiberindeymiş gibi akıcı hissettiriyor. Bölgesel dolaşım (Regional Roam) paketi için donanım maliyeti hariç aylık yaklaşık 50-70 Dolar gibi bir abonelik ücreti ödeniyor. Bütçe bilincine sahip bir gezgin için ilk başta yüksek görünebilir; fakat işinizi aksatmadan en izole koylarda bile çalışabilmenin getirdiği özgürlük bu maliyeti rahatlıkla amorti ediyor.

Starlink Mini’yi doğrudan güneşe maruz bırakacak şekilde araç tavanına veya çadır tepesine kurarken aşırı ısınmaya dikkat edin. 40 derecenin üzerindeki sıcaklıklarda cihaz hız düşürme moduna geçebilir. Gökyüzü görüş açısını engellemeyecek yarı gölge bir konum seçmek verimliliği ciddi oranda artırır.

İki Dünyanın En İyisi: Hibrit Bağlantı Stratejisi

Yollarda uzun süre çalışanlar için tek bir kaynağa güvenmek her zaman risk taşır. En ideal senaryo, şehirden şehre geçerken veya tren yolculuklarında eSIM’in düşük maliyetli ve anlık pratikliğinden faydalanmak; birkaç gün boyunca elektriğin bile kısıtlı olduğu doğa rotalarına çekildiğinizde ise Starlink Mini’yi devreye almaktır. Bu sayede hem veri kotalarınızı idareli kullanır hem de bağlantı kesintisi anksiyetesini hayatınızdan tamamen çıkarırsınız.

Sonuç olarak teknoloji, sırt çantamızın ağırlığını artırmadan dünyanın her köşesini potansiyel bir çalışma alanına dönüştürmüş durumda. Doğru araçları seçtiğinizde, bir pazartesi sabahı toplantısına deniz kenarındaki bir çadırın önünden katılmak artık bir fantezi değil, sadece iyi planlanmış bir çalışma rutini.

Category: Genel | LEAVE A COMMENT
Ağustos 24 2026

Model Context Protocol (MCP) ile Kendi Yerel AI Asistanınızı İnşa Edin

Hadi itiraf edelim: Bulut tabanlı yapay zeka modelleri harika iş çıkarıyor ama şirketinizin mali tablolarını, gizli kaynak kodlarını ya da kişisel notlarınızı OpenAI veya Anthropic sunucularına göndermek her zaman iyi bir fikir değil. Tam bu noktada devreye MCP (Model Context Protocol), local LLM çözümleri ve güçlü bir bare metal donanım giriyor. Bugün, verinizi dışarı sızdırmadan çalışan akıllı bir yerel asistanı nasıl kuracağımızı test edip sonuçları masaya yatırıyoruz.

Nedir Bu Model Context Protocol (MCP)?

Teknoloji dünyasında her model için ayrı bir entegrasyon yazmaktan yorulmuştuk. Context management dediğimiz olay, daha önce karmaşık RAG (Retrieval-Augmented Generation) boru hatları ve özel script’lerle çözülmeye çalışılıyordu. Anthropic tarafından açık standart olarak duyurulan MCP, yapay zekanın “USB-C portu” gibi çalışıyor.

Kısacası MCP; model ile yerel dosyalarınız, veritabanlarınız ve API’leriniz arasında standart bir köprü kuruyor. Siz bir MCP sunucusu yazıyorsunuz (veya hazır olanı kullanıyorsunuz), yerel modeliniz de bu standart protokol üzerinden gidip dosyalarınızı güvenle okuyor.

[Görsel: MCP mimarisini gösteren şema: LLM İstemcisi, MCP Protokolü ve Yerel Veri Kaynakları arasındaki veri akışı]

Neden Bulut Değil de Bare Metal?

VPS veya sanallaştırılmış sunucular genelde GPU kaynaklarını paylaşır veya kısıtlar. Bare metal (fiziksel donanım) tercih ettiğinizde GPU VRAM’inin ve işlemcinin tamamı sizin emrinize amade olur. Yerel bir LLM çalıştırırken milisaniyeler ve token hızları önemlidir; sanallaştırma katmanının getirdiği gecikmeyi kimse istemez.

Adım Adım Kurulum: Kendi Yerel Sisteminizi Kurun

Lafı uzatmadan test ortamımıza geçelim. Senaryomuzda Ubuntu çalışan bir bare metal sunucumuz, yerel model motorumuz ve yerel SQLite veritabanımıza bağlanan bir MCP sunucumuz var.

1. Yerel LLM Motorunu Başlatın (Ollama)

Hızlı ve sorunsuz bir başlangıç için Ollama’yı kullanıyoruz. Terminali açıp şu komutla motoru kuralım ve Llama 3.1 modelini indirelim:

curl -fsSL https://ollama.com/install.sh | sh
ollama run llama3.1:8b

2. Basit Bir Dosya Sistemi MCP Sunucusu Kurun

Modelimizin sadece bizim izin verdiğimiz klasördeki dosyaları okumasını istiyoruz. Node.js tabanlı resmi MCP dosya sistemi sunucusunu kuralım:

npx -y @modelcontextprotocol/server-filesystem /home/kerten/gizli-veriler

[Görsel: Terminal ekranında MCP sunucusunun ayağa kalktığı ve JSON-RPC isteklerini dinlediği anın çıktısı]

3. İstemci ile MCP Sunucusunu Bağlayın

MCP istemcisi olarak Claude Desktop veya açık kaynaklı LibreChat kullanabilirsiniz. Yapılandırma dosyanıza (mcp_config.json) sunucunuzu ekleyin:

{
  "mcpServers": {
    "yerel-dosyalar": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/kerten/gizli-veriler"]
    }
  }
}

Gerçek Kullanım Senaryosu: Test Ettik, Gördük

Sistemi kurduktan sonra gizli-veriler klasörüne 2024 yılına ait hayali sunucu loglarını ve fatura dökümlerini içeren bir CSV dosyası attık. Ardından modele şu soruyu sorduk:

“Geçtiğimiz ay en çok harcama yapılan ilk 3 sunucu kalemini bul ve maliyetlerini topla.”

Sonuç: Model, MCP arayüzü sayesinde CSV dosyasını okudu, verileri parse etti ve 3 saniye içinde doğru yanıtı verdi. Hiçbir veri internete çıkmadı, sıfır API maliyetiyle işlem bare metal üzerinde tamamlandı.

[Görsel: Yerel arayüzde modelin MCP aracı üzerinden dosyayı başarıyla sorgulayıp yanıtladığı sohbet ekranı]

Artılar ve Eksiler

Her sistem gibi bu yapının da harika yanları ve bazı zorlukları var:

Avantajlar (Artılar) Dezavantajlar (Eksiler)
%100 Veri Gizliliği (Zero Data Leakage) Yüksek ilk donanım maliyeti (Bare metal / GPU)
Sıfır Token / API Ücreti Model boyutu küçüldükçe akıl yürütme kalitesi düşebilir
Standart MCP protokolü sayesinde kolay araç entegrasyonu Kurulum ve context management optimizasyonu teknik bilgi gerektirir
İnternet bağlantısı kesilse bile çalışabilirlik Büyük dosyalarda context window dolma riski

Maliyetler ve Ücretsiz Alternatifler

Böyle bir sistemi ayağa kaldırmanın maliyeti tamamen seçtiğiniz donanıma bağlıdır:

  • Bare Metal Sunucu Kiralama: NVIDIA RTX 4090 veya A4000 GPU barındıran bir sunucu aylık yaklaşık 70$ – 150$ civarındadır.
  • Kendi Donanımınız: Evinizde en az 16 GB VRAM’e sahip bir ekran kartı (RTX 3060 12GB bile başlangıç için iş görür) varsa yazılım katmanı tamamen ücretsizdir.
  • Ücretsiz Alternatifler: Ollama, vLLM, LM Studio ve açık kaynaklı MCP SDK’ları tamamen ücretsizdir. Bulut API’larına (OpenAI, Claude API) her ay yüzlerce dolar ödemek yerine kendi donanımınızı amorti edebilirsiniz.

Sonuç: Yerel AI Asistanı Kurmaya Değer mi?

Eğer gizlilik takıntınız varsa, regülasyonlara tabi bir sektörde çalışıyorsanız veya sadece kendi sistemleriniz üzerinde tam denetim istiyorsanız: Kesinlikle evet.

MCP sayesinde yerel modeller artık sadece boş sohbet eden chatbot’lar olmaktan çıktı; bilgisayarınızdaki gerçek verilerle konuşabilen yetenekli birer asistan haline geldi. Bir terminal açın, Ollama’yı kurun ve kendi verinizi yönetmenin tadını çıkarın!

Category: Genel | LEAVE A COMMENT
Ağustos 22 2026

FinOps 2.0: AWS/Cloud Faturasını Otomatik Kısıtlayan Event-Driven Mimariler

Her ayın sonunda gelen o meşhur kabarık faturayı görüp Slack kanallarında “Bu p3.8xlarge instance’ı kim açık unuttu?” cadı avı başlatmaktan yorulduysanız, yalnız değilsiniz. Geleneksel bütçe uyarıları reaktiftir; fatura eşiği aşıldığında iş işten çoktan geçmiş olur. Modern FinOps yaklaşımı, cloud maliyet yönetimini sadece raporlama tablosu olmaktan çıkarıp, AWS altyapısında gerçek zamanlı çalışan bir otomasyon zincirine dönüştürmeyi gerektiriyor.

Bu yazıda; gecikmeli Cost and Usage Report (CUR) analizlerini bir kenara bırakıp, EventBridge, CloudWatch Metric Streams ve Lambda tabanlı event-driven bir maliyet kısıtlama (circuit breaker) mimarisini nasıl kuracağımızı adım adım ele alıyoruz.

Geleneksel Bütçe Uyarıları Neden İşe Yaramaz?

AWS Budgets veya CloudWatch Billing Alarms kurduğunuzda, arka planda çalışan telemetri verisi gerçek zamanlı değildir. CloudWatch billing metrikleri genellikle 8 ila 14 saatlik bir gecikmeyle (delay) güncellenir. Bir developer cuma akşamı yanlışlıkla 10 nodeluk bir GPU kümesini ayağa kaldırıp unuttuysa, pazartesi sabahı gelen e-posta sadece felaketin faturasını tebliğ eder.

Bize gereken şey: Anomaly Detection + Immediate Event Routing + Automated Remediation. Yani faturanın toplamını değil, kaynak oluşturma hızını (velocity), beklenmeyen metrik sıçramalarını ve yetim (orphaned) kaynakları anlık yakalayan bir mimari.

Event-Driven FinOps Mimarisi Nasıl Çalışır?

Kurgulayacağımız mimari üç ana ayaktan oluşuyor:

  1. Sinyal Katmanı: AWS Cost Anomaly Detection, AWS Health Events, CloudTrail Management Events ve Config Rule ihlalleri.
  2. Yönlendirme Katmanı (Routing): Amazon EventBridge default bus veya custom bus. Gelen payload’u filtreleyip uygun remediation hedefine yönlendirir.
  3. Aksiyon Katmanı (Execution): AWS Lambda veya Step Functions. Kaynağı durdurur, scale-in yapar, volume snapshot’ı alıp diski siler ya da doğrudan security group seviyesinde trafiği keser.

Adım 1: Cost Anomaly Detection için EventBridge Kuralı

AWS Cost Anomaly Detection, makine öğrenmesi modelleriyle harcama paternlerinizi analiz eder. Bir anomali tespit edildiğinde doğrudan EventBridge’e event fırlatabilir. Aşağıdaki CloudFormation / EventBridge Pattern tanımı, belirlenen eşik üzerindeki anomalileri dinler:

{
  "source": ["aws.cost-anomaly-detection"],
  "detail-type": ["Cost Anomaly Detected"],
  "detail": {
    "anomalyScore": [{ "numeric": [">=", 80] }],
    "impact": {
      "totalImpactPercentage": [{ "numeric": [">=", 50] }]
    }
  }
}

Bu pattern; anomali skoru 80’in üzerinde olan ve harcama etkisinin beklenen baseline’a göre en az %50 saptığı senaryoları yakalar. Anlamsız mikro dalgalanmalar için Lambda tetiklenmez.

Adım 2: Dev/Staging Ortamlarında Kaçak Kaynakları Kesen Lambda

Birçok şirkette faturayı patlatan şey prod ortamı değil, dev/stage hesaplarında “test edip sileceğim” denilerek unutulan yüksek profilli kaynaklardır. Aşağıdaki Python tabanlı Lambda fonksiyonu, tag eksikliği olan veya anomali üreten instance’ları hedef alarak devreye girer. Dry-run kontrolü ve güvenli tag filtresi içerir:

import boto3
import os
import json
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

ec2 = boto3.client('ec2')
TAG_IMMUNITY_KEY = "FinOpsImmunity"
ALLOWED_ENVIRONMENTS = ["development", "staging", "sandbox"]

def lambda_handler(event, context):
    logger.info(f"Received event: {json.dumps(event)}")
    
    # Hedef filtreleri: Sadece dev/stage hesaplar ve belirli instance tipleri
    filters = [
        {'Name': 'instance-state-name', 'Values': ['running']},
        {'Name': 'tag:Environment', 'Values': ALLOWED_ENVIRONMENTS}
    ]
    
    response = ec2.describe_instances(Filters=filters)
    instances_to_stop = []

    for reservation in response['Reservations']:
        for instance in reservation['Instances']:
            instance_id = instance['InstanceId']
            instance_type = instance['InstanceType']
            tags = {t['Key']: t['Value'] for t in instance.get('Tags', [])}
            
            # Bağışıklık tag'i var mı?
            if tags.get(TAG_IMMUNITY_KEY, "false").lower() == "true":
                logger.info(f"Instance {instance_id} has immunity tag. Skipping.")
                continue
                
            # Büyük/Pahalı aileleri hedef al (GPU, High Memory vb.)
            if instance_type.startswith(('p3', 'p4', 'g4', 'g5', 'r5b', 'x2gd')):
                logger.warning(f"High cost instance detected without immunity: {instance_id} ({instance_type})")
                instances_to_stop.append(instance_id)

    if instances_to_stop:
        logger.info(f"Stopping instances: {instances_to_stop}")
        ec2.stop_instances(InstanceIds=instances_to_stop)
        return {"status": "SUCCESS", "stopped_instances": instances_to_stop}

    return {"status": "NO_ACTION", "stopped_instances": []}

Burada kritik olan felsefe şudur: Fail-safe by default. Prod hesabına dokunmamak için ortam etiketlerini katı şekilde izole ediyoruz ve geliştiricilere acil durumlarda kullanmaları için FinOpsImmunity=true gibi bir bypass tag mekanizması tanıyoruz.

Adım 3: Yetim (Orphaned) EBS ve Unassociated EIP Temizliği

Terraform ile altyapıyı yıkan ama lifecycle { prevent_destroy = true } veya unattached volume’leri unutan mühendislerin faturaya hediyesidir yetim kaynaklar. CloudWatch Event yerine her gece EventBridge Schedule (Cron) ile tetiklenen hafif bir garbage collector kuralı tanımlayalım:

# AWS CLI ile Unattached (Available) EBS Volume'leri sorgulama
aws ec2 describe-volumes \
    --filters Name=status,Values=available \
    --query "Volumes[*].{ID:VolumeId,Size:Size,Created:CreateTime}" \
    --output table

Bunu otomatize ederken dikkat: Silmeden önce mutlaka snapshot alın. Event-driven mimarilerde en büyük risk, veri kaybına yol açabilecek agresif otomasyonlardır. Lambda’nın adımları şöyle olmalıdır:

  1. Volume state available mı?
  2. Tag’lerinde SnapshotBeforeDelete=true oluştur.
  3. Snapshot tetikle, snapshot tamamlandığında EventBridge’den gelen EC2 Snapshot Successful eventiyle eski volume’ü drop et.

Kubernetes / Karpenter için Runaway Cost Breaker

Eğer EKS üzerinde Karpenter veya Cluster Autoscaler kullanıyorsanız, container’ların crashloop’a girip sürekli yeni node istemesi sonucu dakikalar içinde onlarca nodeluk bir cluster anomalisi yaşayabilirsiniz.

Karpenter’ın NodePool limitleri bu işin ilk savunma hattıdır ama tek başına yetmez. Event-driven bir Lambda ile Karpenter NodePool CRD’sinin limitlerini dinamik olarak sıkılaştırabilirsiniz:

apiVersion: karpenter.sh/v1beta1
kind: NodePool
metadata:
  name: default
spec:
  limits:
    cpu: "100"
    memory: 400Gi
  template:
    spec:
      requirements:
        - key: "karpenter.sh/capacity-type"
          operator: In
          values: ["spot"]
        - key: "karpenter.k8s.aws/instance-category"
          operator: In
          values: ["c", "m", "r"]

Limit aşıldığında cluster’a yeni node eklenmesi engellenir. Bu aşamada Prometheus Alertmanager’dan EventBridge Webhook’una düşen bir alarm ile nöbetçi SRE’ye Slack üzerinden interactive button ile onay düşürmek en sağlıklı yaklaşımdır.

Least Privilege IAM İzni

FinOps otomasyon Lambda’nızın AdministratorAccess almasına gerek yoktur. Sadece durdurma ve tanımlama yetkilerini içeren sıkı bir IAM policy tanımlayın:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "FinOpsEC2Operations",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeVolumes",
                "ec2:StopInstances",
                "ec2:CreateSnapshot",
                "ec2:DeleteVolume"
            ],
            "Resource": "*"
        }
    ]
}

Özet: FinOps Kültür Değil, Kod Tabanıdır

Mühendisleri spreadsheet tablolarına bakarak eğitmek bir yere kadar çalışır. İnsan hata yapar, acil durumlarda makineler açık unutulur. FinOps 2.0; kuralları şirket wikisine yazmak yerine EventBridge kurallarına, Lambda fonksiyonlarına ve Kubernetes admission controller’larına yazmaktır.

Reaktif fatura şoklarından proaktif event-driven kısıtlamalara geçtiğinizde, hem CFO’nuz daha rahat uyur hem de nöbetçi SRE hafta sonu faturayı değil asıl işi olan sistem güvenilirliğini düşünür.

Category: Genel | LEAVE A COMMENT
Temmuz 6 2026

SaaS Maliyetlerinden Kurtulun: Uptime Kuma ve n8n ile Ücretsiz Monitoring Stack Kurulumu

Datadog, New Relic veya BetterStack faturalarının her ay sonunda FinOps ekiplerinin masasında yarattığı kalp çarpıntısını hepimiz biliyoruz. Özellikle yüzlerce microservice veya edge endpoint barındıran altyapılarda, basit bir synthetic check ve alerting mekanizması için ödenen lisans bedelleri katlanılamaz seviyelere ulaşabiliyor. Bu noktada self-hosted bir monitoring altyapısı kurmak, doğrudan bir maliyet optimizasyonu hamlesine dönüşüyor. Bu rehberde, Uptime Kuma ve n8n ikilisini bir araya getirerek kurumsal ölçekte, yüksek esnekliğe sahip ve tamamen ücretsiz bir observability & auto-remediation stack’ini nasıl ayağa kaldıracağımızı inceliyoruz.

Neden Bu Stack? Mimari Kararlar

Piyasada Prometheus + Alertmanager veya Zabbix gibi devasa çözümler varken neden Uptime Kuma ve n8n? Cevap: Bakım maliyeti (operational overhead) ve olay müdahale hızı (MTTR).

Prometheus Blackbox Exporter güçlüdür ancak konfigürasyonu hantaldır; dashboard ve status page için Grafana şarttır. Uptime Kuma ise tek bir container içerisinde HTTP(s), gRPC, TCP, DNS, Ping ve Docker container healthcheck kabiliyetlerini native bir Status Page ile sunar. n8n ise Alertmanager’ın kısıtlı webhook yapısının ötesine geçerek; alert deduplication, payload zenginleştirme (enrichment) ve hatta SSH/Kubernetes API üzerinden otomatik iyileştirme (self-healing) workflow’ları çalıştırmamıza olanak tanır.

Adım 1: Production-Ready Docker Compose Mimarisi

Stack’imizi tek bir node üzerinde izole bir Docker network’ü, persistent storage ve resource limitleri ile ayağa kaldıralım. Reverse proxy olarak Traefik veya Nginx arkasında SSL terminate ettiğinizi varsayıyoruz; bu yüzden internal network üzerinden güvenli bağlantı kuracağız.

version: '3.8'

networks:
  monitoring-net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.28.0.0/16

volumes:
  uptime-kuma-data:
    driver: local
  n8n-data:
    driver: local

services:
  uptime-kuma:
    image: louislam/uptime-kuma:1.23.13-debian
    container_name: uptime-kuma
    restart: unless-stopped
    volumes:
      - uptime-kuma-data:/app/data
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - monitoring-net
    ports:
      - "127.0.0.1:3001:3001"
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 1024M
        reservations:
          cpus: '0.2'
          memory: 256M
    healthcheck:
      test: ["CMD-SHELL", "node extra/healthcheck.js"]
      interval: 30s
      timeout: 10s
      retries: 3

  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n-automation
    restart: unless-stopped
    environment:
      - N8N_HOST=n8n.internal.local
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://n8n.yourdomain.com/
      - GENERIC_TIMEZONE=Europe/Istanbul
      - EXECUTIONS_DATA_PRUNE=true
      - EXECUTIONS_DATA_MAX_AGE=168
    volumes:
      - n8n-data:/home/node/.n8n
    networks:
      - monitoring-net
    ports:
      - "127.0.0.1:5678:5678"
    deploy:
      resources:
        limits:
          cpus: '1.5'
          memory: 2048M
        reservations:
          cpus: '0.2'
          memory: 512M

Burada kritik olan iki parametre var: Uptime Kuma’ya Docker socket’i ro (read-only) bağlayarak yerel container state’lerini doğrudan izleyebiliyoruz. n8n tarafında ise EXECUTIONS_DATA_PRUNE=true ile SQLite veritabanının kontrolsüz büyümesini engelleyerek disk I/O darboğazlarının önüne geçiyoruz.

Servisleri ayağa kaldıralım:

docker compose up -d
docker compose ps

Adım 2: Uptime Kuma Konfigürasyonu ve Probing Stratejisi

Uptime Kuma arayüzüne (http://localhost:3001) eriştikten sonra ilk işimiz probe stratejisini kurgulamak. Sadece HTTP 200 OK kontrolü yapmak production seviyesinde yetersizdir.

1. HTTP Keyword Check & Payload Validasyonu

Endpoint sadece 200 dönüyor olabilir ancak arka planda database connection pool tükenmiş ve boş bir JSON array render ediyor olabilir. Monitor tipini HTTP(s) – Keyword seçerek response body içinde beklenen bir string (örneğin "status":"healthy") aratmalısınız.

2. Dynamic Certificate Monitoring

TLS sertifikalarının bitişine 14 gün kala alert tetiklemek için TLS/SSL probe ayarlarını aktifleştirin. Bu, Let’s Encrypt botlarının cert-manager veya ACME renewal hatalarında hayat kurtarır.

3. Webhook Entegrasyonu (n8n Köprüsü)

Settings > Notifications > Setup Notification adımlarını izleyin:

  • Notification Type: Webhook
  • Post URL: https://n8n.yourdomain.com/webhook/uptime-kuma-alerts
  • Request Method: POST
  • Content-Type: application/json

Uptime Kuma olay anında n8n’e şu formata benzer zengin bir payload fırlatır:

{
  "heartbeat": {
    "monitorID": 4,
    "status": 0,
    "time": "2024-03-24 14:32:10.123",
    "msg": "HTTP 502 Bad Gateway",
    "ping": 142
  },
  "monitor": {
    "name": "Auth-Service-Prod",
    "url": "https://auth.internal.domain/healthz",
    "type": "http",
    "tags": [{"name": "tier-1"}, {"name": "team-core"}]
  },
  "msg": "[Auth-Service-Prod] is Down: HTTP 502 Bad Gateway"
}

Adım 3: n8n ile Event-Driven Remediation ve Alert Routing

Basit bir bildirim göndermek yerine n8n üzerinde incident management iş akışı kuralım. Senaryomuz: Servis düştüğünde alerti Slack/Telegram kanalına at, ardından servisin kurtarılması için SSH üzerinden staging/prod ortamına safe-restart komutu gönder.

1. Webhook Trigger ve Status Filtreleme

n8n üzerinde bir Webhook Node oluşturup path’i uptime-kuma-alerts yapın. Ardından gelen veriyi kontrol eden bir Switch Node ekleyin:

  • {{ $json.heartbeat.status }} === 0 -> Incident (DOWN)
  • {{ $json.heartbeat.status }} === 1 -> Recovery (UP)

2. Payload Enrichment (Code Node)

Alert metnini güzelleştirmek ve etiketlere göre on-call mühendisi etiketlemek için araya bir Code (JavaScript) node koyuyoruz:

const monitor = $input.first().json.monitor;
const heartbeat = $input.first().json.heartbeat;

const isTier1 = monitor.tags && monitor.tags.some(t => t.name === 'tier-1');
const severity = heartbeat.status === 0 ? (isTier1 ? 'CRITICAL' : 'WARNING') : 'INFO';
const mention = isTier1 ? '' : '@oncall-dev';

return {
  json: {
    serviceName: monitor.name,
    targetUrl: monitor.url,
    errorMessage: heartbeat.msg,
    timestamp: heartbeat.time,
    severity: severity,
    mentionTarget: mention,
    rawPayload: $input.first().json
  }
};

3. Auto-Remediation: Safe Container Restart

Eğer düşen servis stateless bir worker veya memory leak yaşayan bir microservice ise, gece 03:00’te nöbetçiyi uyandırmadan önce kontrollü bir restart denemek mantıklıdır.

n8n’deki SSH Node‘u kullanarak ilgili host üzerinde minimum yetkili bir service user ile remote command çalıştırıyoruz:

# n8n SSH Execution Node Komutu
docker restart {{ $json.serviceName.toLowerCase() }} || systemctl restart {{ $json.serviceName.toLowerCase() }}

Bu adımdan sonra n8n’e bir Wait Node (60 saniye) koyup Uptime Kuma API’sine veya doğrudan servise probe atarak sorunun çözülüp çözülmediğini teyit edebilirsiniz. Düzelmediyse escalasyon yaparak PagerDuty/Opsgenie veya Telegram sesli arama botunu tetikleyebilirsiniz.

Production Hardening: Monitoring Altyapısını Kim İzleyecek?

Monitoring sisteminin kendisi çökerse ne olur? Single point of failure (SPOF) riskini bertaraf etmek için iki kritik adımı atlamayın:

1. Dead Man’s Snitch (Heartbeat Monitoring)

Uptime Kuma içerisinde Push tipi bir monitor oluşturun. n8n üzerinden her 5 dakikada bir bu endpoint’e curl atan bir Cron Workflow tanımlayın. Eğer n8n veya network giderse Uptime Kuma alarm üretir. Aynı şekilde harici, tamamen ücretsiz bir dış servise (örn. Cronitor veya Healthchecks.io) Uptime Kuma’nın kendisinden periyodik ping atın.

# n8n cron node içinden dış heartbeat servisine ping
curl -m 10 --retry 3 https://hc-ping.com/your-uuid-token

2. SQLite WAL Modu ve Otomatik Backup

Uptime Kuma varsayılan olarak SQLite kullanır. Yoğun monitor sayısında (500+) database lock yaşamamak için SQLite WAL (Write-Ahead Logging) modunun aktif olduğundan emin olun:

# Uptime Kuma data dizininde
sqlite3 kuma.db "PRAGMA journal_mode=WAL;"

Veritabanı yedeğini her gece S3 uyumlu bir object storage’a rclone veya restic ile şifreli olarak senkronize edin:

docker exec uptime-kuma sqlite3 /app/data/kuma.db ".backup '/app/data/kuma-backup.db'"
rclone copy /var/lib/docker/volumes/uptime-kuma-data/_data/kuma-backup.db remote-s3:monitoring-backups/

Özet ve Maliyet Karşılaştırması

Bu mimariyi Hetzner veya DigitalOcean üzerindeki 4-5 USD’lik bir VPS üzerinde rahatlıkla çalıştırabilirsiniz. Ticari bir SaaS çözümünde 200 endpoint, multi-step healthcheck’ler ve custom webhook otomasyonları için ayda 150 – 400 USD arasında bir fatura ödemeniz gerekirken; bu stack ile hem tüm verinizi kendi altyapınızda tutuyor hem de n8n’in geniş ekosistemi sayesinde sınırsız auto-remediation senaryosu üretebiliyorsunuz.

Category: Genel | LEAVE A COMMENT
Haziran 26 2026

Dışı Çıtır İçi Yumuşacık: Evde Çikolata Soslu Geleneksel İspanyol Tatlısı Churros Yapımı

Sokak lezzetleri denince akan sular durur ama bazılarının yeri çok ayrıdır. İspanya sokaklarından kopup gelen, dışı altın sarısı ve çıtır çıtır, içi ise bulut gibi yumuşak bir lezzet düşünün. Evet, doğru tahmin ettiniz; bugün mutfakta İspanyol esintileri estiriyoruz! Bu yazıda, pastanelerdeki o mükemmel dokuyu kendi mutfağınızda nasıl yakalayacağınızı anlatan nefis bir churros tarifi hazırladık. Evde churros yapımı gözünüzü korkutmasın; çünkü doğru teknikleri bildiğinizde bu meşhur İspanyol tatlısı sandığınızdan çok daha pratik. İşte o çok merak edilen çıtır churros sırrı ve adım adım yapılışı!

Churros Tarifi Hakkında Detaylar

Bu tarif, mutfakta saatlerce zaman harcamak istemeyen ama kahvenin yanına gurme bir dokunuş arayan herkes için biçilmiş kaftan.

  • Porsiyon: 4 Kişilik
  • Hazırlık Süresi: 15 dakika
  • Pişirme Süresi: 15 dakika

Gerekli Malzemeler

Malzemelerimiz oldukça temel, muhtemelen şu an hepsi mutfağınızda var. Yoksa bile alternatifleri hemen yanlarında!

  • Su: 1 su bardağı (Daha zengin bir lezzet için yarım su bardağı su, yarım su bardağı süt karışımı da kullanabilirsiniz)
  • Tereyağı: 2 yemek kaşığı (Margarin veya Hindistan cevizi yağı da olur)
  • Toz şeker: 1 yemek kaşığı
  • Tuz: Bir çimdik
  • Un: 1 su bardağı (Glutensiz besleniyorsanız glütensiz un karışımları da iyi sonuç verir)
  • Yumurta: 2 adet (Mutlaka oda sıcaklığında olmalı)
  • Kızartmak için: Bol sıvı yağ
  • Bulamak için: Yarım su bardağı toz şeker ve 1 tatlı kaşığı tarçın

Çikolata Sosu İçin:

  • Krema: 100 ml (Yarım paket)
  • Çikolata: 80 gram (Bitter veya sütlü karışık)

Adım Adım Evde Churros Yapımı

Sırayı bozmadan, sakin adımlarla ilerliyoruz. Hamurun kıvamı bu işin anahtarıdır.

  1. Sıvı tabanı hazırlayın: Suyu, tereyağını, şekeri ve tuzu küçük bir tencereye alın. Tereyağı tamamen eriyene ve karışım kaynama noktasına gelene kadar ısıtın.
  2. Unu ekleyin: Kaynayan karışıma unu tek seferde dökün. Ocağın altını hemen kısın. Tahta bir kaşıkla hızlıca karıştırarak hamuru toparlayın. Hamur tencerenin kenarlarından ayrılıp pürüzsüz bir top haline gelene kadar (yaklaşık 2 dakika) pişirmeye devam edin.
  3. Ilımaya bırakın: Hamuru ocaktan alın ve başka bir kaba aktararak 5 dakika kadar ılınmasını bekleyin. Sıcak hamura yumurta eklerseniz yumurtalarınız pişer ve tatlı yerine tatlı kokulu bir omlet yersiniz; bunu kesinlikle istemeyiz!
  4. Yumurtaları yedirin: Ilınan hamura yumurtaları teker teker ekleyin. İlk yumurtayı ekleyin, mikserle ya da güçlü bir spatula ile hamur yumurtayı tamamen yutana kadar çırpın. Ardından ikinci yumurtayı ekleyip aynı işlemi tekrarlayın. Karşınızda yapışkan, parlak ve yoğun bir hamur olmalı.
  5. Sıkma torbasına alın: Hamuru, ucuna yıldız duy takılmış sağlam bir sıkma torbasına doldurun. Yıldız uç, churros’un o meşhur çizgili şeklini almasını ve daha iyi pişmesini sağlar.
  6. Kızartın: Geniş bir tavada sıvı yağı orta ateşte kızdırın. Sıkma torbasından hamuru yağın üzerine doğru sıkın ve istediğiniz boyuta (yaklaşık 8-10 cm) gelince temiz bir mutfak makası yardımıyla kesip yağa bırakın.
  7. Altın sarısı dokunuş: Churros’ları arkalı önlü altın sarısı renk alana kadar kızartın. Yağdan alır almaz önce havlu kağıt serili tabağa, ardından sıcakken hemen tarçınlı şeker karışımına bulayın.

Hızlı Çikolata Sosu Nasıl Yapılır?

Kremayı küçük bir sos tenceresinde ısıtın ancak kaynatmayın. Kenarlardan hafifçe kabarcıklar çıkınca ocaktan alın ve içine doğranmış çikolataları ekleyin. Çikolatalar tamamen eriyip pürüzsüz, parlak bir sos elde edene kadar karıştırın.

Püf Noktası: Çıtır Churros Sırrı Nedir?

Churros yaparken en sık karşılaşılan sorun dışının çıtır, içinin ise çiğ kalmasıdır. Bunun tek bir sebebi vardır: Yanlış yağ sıcaklığı. Yağınız çok kızgın olursa hamur dışarıdan hemen yanar ama içi pişmez. Yağ soğuk olursa da hamur yağı sünger gibi çeker ve çıtır özelliğini kaybeder.

Çözüm: Yağın ideal sıcaklığı 170-180 derece arasındadır. Eğer mutfak termometreniz yoksa, yağa küçük bir parça hamur atın. Hamur hemen dibe çökmeyip orta hızda köpürerek yüzeye çıkıyorsa doğru sıcaklıktasınız demektir. Ayrıca tavayı tek seferde çok fazla hamurla doldurmayın ki yağın sıcaklığı birden düşmesin.

Şimdi çıtır çıtır churros’ları sıcak çikolata sosuna batırıp keyfini çıkarma zamanı. Afiyet olsun!

Category: Genel | LEAVE A COMMENT
Haziran 24 2026

Yapay Zeka Şirket Sırlarını İfşa Etmeden Önce: Kurumsal LLM Güvenliği ve Yetkilendirme Rehberi

Şirket içine heyecanla kurulan o akıllı yapay zeka asistanları var ya… Hani “Tüm dökümanlarımızı yükleyelim, her şeyi saniyeler içinde analiz etsin” dediğimiz o dahi çocuk. İşte o çocuk, eğer doğru eğitilmez ve sınırlandırılmazsa, stajyer Ahmet’e şirketin tüm finansal dökümlerini veya CEO’nun maaşını tek bir prompt ile fısıldayabilir. Günümüz teknoloji dünyasında Kurumsal Yapay Zeka Güvenliği sadece bir lüks değil, şirket sırlarının ortalığa saçılmasını engelleyen hayati bir barikat haline geldi. Bu yazıda, LLM’lere kimlik kazandırmayı ve “sen bunu göremezsin” demeyi (yani RBAC LLM sistemlerini) fantezi dünyasından çıkarıp pratik bir teste tabi tutuyoruz.

Neden Normal Güvenlik Önlemleri LLM’lerde İşe Yaramıyor?

Klasik sistemlerde veri güvenliği nispeten kolaydır. Bir veritabanınız vardır, kullanıcı rollerini tanımlarsınız (örneğin HR, Satış, IT) ve her rolün hangi tablolara erişebileceğini belirlersiniz. Ancak işin içine LLM (Büyük Dil Modeli) ve RAG (Retrieval-Augmented Generation) girdiğinde işler karmaşıklaşıyor. Çünkü LLM’ler statik veritabanları gibi davranmaz. Doğal dili anlar, sentezler ve bazen de tahmin edilemez şekilde “halüsinasyon” görerek yetkisiz bilgileri dışarı sızdırabilir.

Buradaki en büyük risk, modelin çıkarım (inference) aşamasında yaşanır. Eğer kullanıcının kimliğini doğrulamadan ve rol tabanlı erişim kontrolü (RBAC) uygulamadan doğrudan LLM API’sine erişim verirseniz, prompt injection saldırılarına veya veri sızıntılarına kapıyı sonuna kadar açmış olursunuz. İşte bu yüzden modern mimarilerde AI Governance (Yapay Zeka Yönetişimi) ve LLM Identity kavramları hayati önem taşıyor.

[Görsel: Geleneksel güvenlik mimarisi ile LLM Gateway güvenlik mimarisinin karşılaştırmalı şeması]

Uygulamalı Test: LiteLLM ile Yetki Katmanı Kuruyoruz

Boş vaatleri ve teorik slaytları bir kenara bırakalım; biz pratikte ne yapabiliyoruz ona bakalım. Bu test senaryomuzda, şirket içi LLM güvenliğini sağlamak amacıyla açık kaynaklı popüler bir LLM Gateway olan LiteLLM aracını kullandık. LiteLLM, tüm yapay zeka sağlayıcılarının (OpenAI, Anthropic, yerel LLaMA modelleri vb.) önüne konumlanan akıllı bir proxy gibi çalışıyor.

Adım 1: Gateway Kurulumu

İlk olarak LiteLLM’i docker üzerinde hızlıca ayağa kaldırdık. Bu sayede tüm LLM isteklerini tek bir noktadan yönetebileceğiz. Terminalde şu komutla proxy’yi başlattık:

docker run -gp 4000:4000 ghcr.io/berriai/litellm:main-latest --config /app/config.yaml

Adım 2: Rol Tabanlı Erişim (RBAC LLM) Kuralları Tanımlama

Testimizde iki farklı kullanıcı profili (LLM Identity) oluşturduk:

  • Pazarlama Ekibi: Sadece daha ucuz olan GPT-3.5 modeline erişebilir ve aylık 10 dolar bütçe sınırı vardır. Hassas dökümanlara erişimi yoktur.
  • Veri Analitiği Ekibi: En gelişmiş GPT-4o modeline erişebilir, bütçe sınırı yüksektir ve şirketin veri ambarındaki RAG dökümanlarını sorgulayabilir.

[Görsel: LiteLLM admin paneli üzerinde kullanıcı tanımlama, API anahtarı üretme ve bütçe sınırlandırma ekranı]

Yaptığımız denemede, Pazarlama ekibinden aldığımız bir API anahtarı ile GPT-4o modeline istek atmayı denedik. Sistem, isteği daha ana OpenAI sunucularına göndermeden, çıkarım (inference) öncesi aşamada yakaladı ve bize şu hatayı döndürdü:

{
  "error": "AccessDenied: User 'marketing_user' does not have permission to access model 'gpt-4o'."
}

Bu test bize gösterdi ki, LLM entegrasyonlarında güvenliği sağlamanın en temiz yolu, istekleri doğrudan modele göndermek yerine, araya kimlik doğrulama yapabilen ve prompt’ları filtreleyebilen bir “AI Gateway” katmanı koymaktır.

Yöntemlerin Karşılaştırılması: Gateway vs. Doğrudan API Entegrasyonu

Şirket içi yapay zeka projelerinde hangi yöntemi seçeceğiniz konusunda kararsız olabilirsiniz. Sizin için hazırladığımız karşılaştırma tablosu karar vermenizi kolaylaştırabilir:

Özellik Doğrudan API Kullanımı Yapay Zeka Gateway (LiteLLM/Portkey)
Kimlik Doğrulama (LLM Identity) Yok (Herkes aynı anahtarı kullanır) Var (Kullanıcı veya departman bazlı benzersiz anahtarlar)
Rol Tabanlı Yetki (RBAC LLM) Zor (Kodla tek tek yazılması gerekir) Kolay (Arayüzden veya config dosyasından yönetilir)
Maliyet ve Bütçe Kontrolü Sadece global limit konabilir Kullanıcı ve model bazlı bütçe limitleri atanabilir
Prompt Güvenliği (Guardrails) Geliştiriciye bağlı Merkezi olarak yönetilebilir ve filtrelenebilir

Maliyetler ve Ücretsiz Alternatifler

Kurumsal LLM güvenliği sağlamak için illa ki binlerce dolar harcamanıza gerek yok. İşte kullanabileceğiniz seçenekler:

  • LiteLLM (Açık Kaynak): Tamamen ücretsiz ve kendi sunucunuzda barındırabilirsiniz. Bizim de testte kullandığımız bu versiyon çoğu KOBİ ve orta ölçekli şirket için fazlasıyla yeterli. Kurumsal destek ve gelişmiş dashboard isterseniz Enterprise planlarına geçiş yapabiliyorsunuz.
  • Portkey.ai: SaaS olarak hizmet veren, gelişmiş bir AI Gateway. Aylık 10.000 isteğe kadar ücretsiz bir planı var. Sonrasında ise kullandıkça öde (pay-as-you-go) modeline geçiyor.
  • Langfuse: Özellikle açık kaynak kodlu LLM takibi ve güvenliği odaklı harika bir alternatif. Kendi sunucunuzda (self-hosted) ücretsiz çalıştırabilirsiniz.

Son Söz: Yapay Zekaya Güvenin Ama Sınırlarını Çizin

Yapay zeka modelleri kendilerine verilen verileri işlemek konusunda harikalar yaratıyor, ancak etik veya kurumsal güvenlik sınırlarını kendi kendilerine çizemezler. Kurumsal Yapay Zeka Güvenliği, teknoloji ekiplerinin bugünden alması gereken en kritik aksiyonlardan biri. Şirket içi dökümanlarınızı bir LLM ile buluşturmadan önce, araya mutlaka bir kimlik doğrulama ve yetkilendirme katmanı koyun. Aksi takdirde, dahi asistanınızın bir gün en büyük bilgi sızdırıcınız haline gelmesi işten bile değil!

Category: Genel | LEAVE A COMMENT