# sade.dev > Backend ve sistem mühendisliği üzerine bir not defteri. Üretim dersleri, mimari kararlar ve pratik geliştirici araçları. Backend, sistem tasarımı, PostgreSQL, Redis, Laravel ve AI-destekli mühendislik üzerine Türkçe notlar ve geliştirici araçları. Backend ve sistem mühendisliği üzerine yazıyorum. 2008'den beri kod yazıyorum, 15+ yıldır üretimdeyim. Muhammet Şafak — https://www.muhammetsafak.com.tr. İçerik dili Türkçe. Alıntı yaparken lütfen ilgili sayfaya bağlantı ile atıf verin. Atıf biçimi: Muhammet Şafak, "", sade.dev, . ## Notes - [İndeks Yönetimi: Eksik Yavaşlatır, Fazlası Yazmayı Öldürür](https://sade.dev/tr/notes/indeks-yonetimi/): Eksik indeks sorguyu yavaşlatır, gereğinden fazla indeks her yazma işlemini pahalılaştırır. Doğru dengeyi tahminle değil ölçümle kurmak. (2026-09-05) - [Canlıda Sıfır Kesintiyle Şema Değiştirmek](https://sade.dev/tr/notes/zero-downtime-veritabani-gocleri/): Production'da kesinti yaratmadan migration almak: geri uyumlu adımlar, çok aşamalı kolon değişiklikleri ve tablo kilitlenmesini önleme. (2026-08-30) - [Read/Write Splitting: Okuma ve Yazma Yükünü Ayırmak](https://sade.dev/tr/notes/read-write-splitting/): Veritabanını büyütmeden önce: okuma trafiğini replica'lara taşımak, replication lag'in yarattığı tuzaklar ve ne zaman gerçekten gerektiği. (2026-08-30) - [Redis Koymadan Önce: Doğru Cache Stratejisi](https://sade.dev/tr/notes/dogru-cache-stratejisi/): Cache eklemeden önce sorulması gereken sorular, cache invalidation'ın neden zor olduğu ve TTL ile tutarlılık arasındaki seçim. (2026-08-30) - [Dış Servis Entegrasyonlarında Circuit Breaker](https://sade.dev/tr/notes/circuit-breaker-dis-servis-entegrasyonu/): Kritik bir sistemi dış API'lere bağlarken: timeout, retry ve circuit breaker ile bir servisin çöküşünün tüm sistemi düşürmesini engellemek. (2026-08-30) - [Serverless'a Geçiş Kararı: Cold-Start ve Vendor Lock-in](https://sade.dev/tr/notes/serverless-gecis-karari/): FaaS'a geçmeden önce: cold-start gecikmesinin gerçek maliyeti, vendor lock-in riski ve serverless'ın hangi iş yüklerinde kazandırdığı. (2026-08-30) - [BFF Pattern: Mobil ve Web İçin Ayrı API Katmanı](https://sade.dev/tr/notes/bff-backend-for-frontend/): Mobil ve web için ayrı API katmanları: tek API'yi her istemciye uydurmanın gizli maliyeti ve BFF'in ne zaman gerçekten gerektiği. (2026-08-30) - [Senkron mu, Asenkron mu? HTTP ile Kuyruk Arasındaki Sınır](https://sade.dev/tr/notes/senkron-mu-asenkron-mu/): Bir işi HTTP isteğiyle anında mı yapmalı, kuyruğa mı atmalı? Yanıt süresi ve hata toleransı üzerinden karar çizgisi. (2026-08-30) - [Event-Driven Mimari: Ne Zaman Kurtarır, Ne Zaman Karmaşıklaştırır?](https://sade.dev/tr/notes/event-driven-mimari-ne-zaman/): Event'lerle gevşek bağ kurmanın bedeli: kazandırdığı esneklik ile sistem akışını takip edilemez hale getirme riski arasındaki denge. (2026-08-30) - [Dead-Letter Kuyruğunu Daha Kötü Yapmadan Replay Etmek](https://sade.dev/tr/notes/dead-letter-kuyrugunu-guvenle-replay-etmek/): Kesinti sırasında DLQ doldu, geri istiyorsun. Naif replay kuyruğu yeniden zehirler ya da yan etkileri ikinci kez tetikler. Güvenli şekil: reset, dry-run, önce sandbox, select. (2026-08-30) - [Şemayı Kuyruğun Kenarında Doğrulamak](https://sade.dev/tr/notes/semayi-kuyrugun-kenarinda-dogrulamak/): Bir mesajın data'sı, kuyruğun kontrol etmeyeceği tipsiz bir sözleşmedir. Onu kenarda doğrula — üretici tarafında yayınlamadan önce, tüketici tarafında güvenlik ağı olarak. (2026-08-30) - [Idempotency: Aynı Mesaj İki Kez Geldiğinde](https://sade.dev/tr/notes/idempotency-ayni-mesaj-iki-kez/): At-least-once teslimat, bir handler'ın aynı mesajı iki kez göreceği anlamına gelir. Idempotency anahtarı, nereden geldiği ve çökmeden sağ çıkan dedupe. (2026-09-02) - [Shared Redis Kullanırken Namespace İzolasyonu](https://sade.dev/tr/notes/shared-redis-namespace-izolasyonu/): Tek bir Redis instance birden çok proje arasında paylaşılırken key collision ve yanlışlıkla silme kazalarından korunmak için kullandığım örüntü. (2026-08-30) - [pgBackRest ile PostgreSQL Backup Stratejisi](https://sade.dev/tr/notes/pgbackrest-postgresql-backup-stratejisi/): pg_dump tek başına yedek değil. pgBackRest ile PITR destekli, sıkıştırılmış, doğrulanabilir yedek mimarisi. (2026-08-30) - [Laravel Queue Production'da Neden Yavaşlar?](https://sade.dev/tr/notes/laravel-queue-production-yavaslama/): Laravel queue worker'ları yerelde mükemmel, production'da yavaş. Geliştiricilerin gözden kaçırdığı en yaygın beş neden. (2026-08-30) - [Nginx + PHP-FPM Pool Ayrımı](https://sade.dev/tr/notes/nginx-php-fpm-pool-ayrimi/): Aynı VPS üzerinde birden fazla PHP uygulaması çalıştırırken, tek bir PHP-FPM pool yerine uygulama başına ayrı pool tanımlamanın somut faydaları. (2026-08-30) - [pgBouncer auth_query ile Çoklu DB Kullanıcısı](https://sade.dev/tr/notes/pgbouncer-auth-query/): pgBouncer kullanırken `userlist.txt` yerine `auth_query` ile dinamik kullanıcı doğrulamasının pratik yapılandırması. (2026-08-30) ## Systems - [Transactional Outbox: Dual-Write, At-Least-Once ve İdempotent Tüketim](https://sade.dev/tr/systems/transactional-outbox-dual-write-ve-idempotent-tuketim/): Veritabanına yazıp event'i kuyruğa düşürememe: dual-write'ı outbox'la kapatmak, doğan at-least-once tekrarını idempotent tüketimle bastırmak ve alanı şifrelemek. (2026-08-30) - [Çok Kümeli GitOps’ta Sıfır Statik Yetki](https://sade.dev/tr/systems/cok-kumeli-gitops-sifir-statik-yetki/): Uzun ömürlü kubeconfig ya da token olmadan çok kümeli GitOps. SPIFFE ID’ler, SPIRE’ın bastığı kısa ömürlü SVID’ler, trust-domain federasyonu — kurma sırası ve her adımın maliyeti. (2026-08-30) - [eBPF ile GPU FinOps](https://sade.dev/tr/systems/ebpf-ile-gpu-finops/): GPU harcaması neden cgroup ve cAdvisor metriklerine görünmez ve eBPF chargeback için GPU zamanını ve belleğini ekiplere nasıl atfeder — ve CUDA sınırındaki, DCGM’in kapatması gereken dürüst limit. (2026-08-30) - [Polyglot Bir Kuyrukta Dağıtık İzleme](https://sade.dev/tr/systems/polyglot-kuyrukta-dagitik-izleme/): Bir mesaj PHP, Go ve Python arasında donmuş bir envelope üzerinden geçiyor. Yolculuğunu tek bir OpenTelemetry trace’ine çevirmek — yeni alan ve çekirdek bağımlılığı olmadan — ve dürüst sınırı. (2026-08-30) - [Ardışık Numara Üretiminde Race Condition ve Gap: JIT Rezervasyon](https://sade.dev/tr/systems/ardisik-numara-uretiminde-race-condition-ve-gap/): Yasal olarak ardışık ve boşluksuz numaraları paralel worker'larla üretmek: race condition ile gap'i birlikte çözen JIT rezervasyon kalıbı. (2026-08-30) - [Veri Yoğunluklu Sistemlerde Ölçek Kırılma Noktaları](https://sade.dev/tr/systems/veri-yogunluklu-sistemler-kirilma-noktalari/): Veri yükü arttıkça boring mimari nerede kırılır? Working set, read replica, partitioning, yazma yükü ve ayrı veri katmanı — sıralı kırılma noktaları ve her birinin maliyeti. (2026-08-30) - [Tek VPS Üzerinde Çoklu Proje Mimarisi](https://sade.dev/tr/systems/tek-vps-coklu-proje-mimarisi/): Bir VPS, birden fazla bağımsız uygulama. Kubernetes yerine bilinçli minimalizm: kullanıcı izolasyonu, ayrı PHP-FPM pool, paylaşılan PostgreSQL/Redis, sade deploy. (2026-08-30) - [Laravel Production Stack](https://sade.dev/tr/systems/laravel-production-stack/): Nginx + PHP-FPM + Redis + PostgreSQL + Supervisor + Horizon ile production-grade bir Laravel kurulumu. Her bileşenin işi ve değiştirildiğinde ne kaybedileceği. (2026-08-30) ## Journal - [NoSQL Tuzağı: "Şeması Yok" Diye Başlamak](https://sade.dev/tr/journal/nosql-tuzagi/): Şemasız başlamanın verdiği rahatlıkla NoSQL'e geçen projelerin er geç çarptığı tutarlılık ve veri bütünlüğü krizleri. (2026-08-30) - [PostgreSQL Her Şeye Yeter mi?](https://sade.dev/tr/journal/postgresql-her-seye-yeter-mi/): Ayrı arama motoru, kuyruk veya doküman DB'si eklemeden önce: PostgreSQL'in tek başına nereye kadar yettiği ve sınırının nerede başladığı. (2026-08-30) - [Bir Sistemin "Gereğinden Karmaşık" Olduğunu Gösteren Sinyaller](https://sade.dev/tr/journal/gereginden-karmasik-sistem-sinyalleri/): Kodun veya mimarinin gereksiz karmaşıklaştığını ele veren somut kırmızı çizgiler — ve sadeleştirmeye nereden başlanacağı. (2026-08-30) - [Mimari Kararların Çürüyor Çünkü Onları Hiçbir Şey Çalıştırmıyor](https://sade.dev/tr/journal/mimari-kararlar-curur/): Bir wiki'ye yazılmış mimari karar bir dilektir. Zorlayamadığın sınırlar sessizce aşınır — diyagram kodla örtüşmeyi bırakana dek. Kuralı çalıştırılabilir yap. (2026-08-30) - [AI Darboğazı Kaldırmadı, Yerini Değiştirdi](https://sade.dev/tr/journal/ai-darbogazi-kaldirmadi/): Ucuz kod üretimi, review/entegrasyon/doğrulama yetişemiyorsa çıktıyı artırmaz. Darboğaz yalnızca aşağı kayar — ve asıl iş artık orada (2026-08-30) - [Kararsız Testler: Retry Çözüm Değil](https://sade.dev/tr/journal/kararsiz-testler-ve-determinizm/): AI test yazmayı neredeyse bedava yaptı, kararsız süitler patladı. Retry ve quarantine neden bir koşu bandı ve kararsızlığı deterministik olarak ne yakalar (2026-08-30) - [Şema Evrimi: Sözleşmeyi Kırmadan Değiştirmek](https://sade.dev/tr/journal/sema-evrimi-sozlesmeyi-kirmadan/): Bir mesajın data şekli, servisler arası bir sözleşmedir ve onu atomik değiştiremezsin. Kural: additive güvenli, kırıcı değişiklik yeni bir kimlik ister — ve önce tüketiciler yükseltir (2026-08-30) - [Katmanlı Mimari mi, Clean Architecture mı?](https://sade.dev/tr/journal/katmanli-mimari-mi-clean-architecture-mi/): Klasik katmanlı yapı çoğu projeye yeterken neden soyutlama katmanlarında boğuluyoruz; Clean Architecture gerçekten ne zaman değer katar? (2026-08-30) - [Vibe Coding ile Production'a Çıkılır mı?](https://sade.dev/tr/journal/vibe-coding-ile-production/): Vibe coding bir ilk sürümün maliyetini düşürür, yanlış olmanın maliyetini değil. O fatura build'de değil, production'da çıkar — ve onu kimin elinde çıkardığına bağlıdır. (2026-08-30) - ["İleride Lazım Olur" Kodunun Production Faturası](https://sade.dev/tr/journal/ileride-lazim-olur-kodunun-faturasi/): YAGNI'yi pratikte uygulamak: bugün gerekmeyen esnekliği eklemenin bakım, okunabilirlik ve hata yüzeyi olarak geri ödenen bedeli. (2026-08-30) - [Mikroservise Ne Zaman Geçerim?](https://sade.dev/tr/journal/mikroservise-ne-zaman-gecerim/): Monolitten dağıtık mimariye geçişi haklı çıkaran ölçülmüş sinyaller — ve geçiş için henüz erken olduğunu söyleyen yaygın yanlış gerekçeler. (2026-08-30) - [Gitflow mu, GitHub Flow mu? Neye Göre Seçiyorum?](https://sade.dev/tr/journal/gitflow-mu-github-flow-mu/): Branch stratejisi seçimini ürün modeli, sürüm sayısı ve deploy ritmine göre yapmanın pratik kriterleri — ve iki modelin yanlış yerde nasıl kırıldığı. (2026-08-30) - [Projelere Neden Modüler Monolit ile Başlıyorum?](https://sade.dev/tr/journal/projelere-neden-moduler-monolit-ile-basliyorum/): Mikroservislere atlamadan önce tek deploy edilebilir bir uygulamada net modül sınırları kurmanın gerekçesi — ve bu kararı ne zaman bıraktığım. (2026-08-30) - [Trunk-Based Development'a Ne Zaman Geçiyorum?](https://sade.dev/tr/journal/trunk-based-ne-zaman-geciyorum/): Yüksek frekanslı deploy yapan ekiplerde release branch'lerinin neden kırıldığı ve trunk-based'in ne kadarının disiplin olduğu — geçtiğim ve geçmediğim eşikler. (2026-08-30) - [Neden Boring Architecture'ı Tercih Ediyorum](https://sade.dev/tr/journal/neden-boring-architecture/): Yeni teknoloji peşinde koşmak yerine kanıtlanmış araçları seçmenin pragmatik gerekçesi. Bu bir korkaklık değil, bir bütçe kararı. (2026-08-30) - [AI-Assisted Engineering Workflow'um](https://sade.dev/tr/journal/ai-assisted-engineering-workflow/): Claude Code ve benzeri ajanları üretim kodunda güvenle kullanmak için takip ettiğim yedi kural — alaycı bir yazı değil, bir disiplin manifestosu. (2026-08-30) ## Optional - [.env Parser](https://sade.dev/tr/tools/env-parser/): dotenv formatındaki içeriği anahtar/değer tablosuna ayırır. Hassas alanları maskeler. - [Backoff & Jitter Hesaplayıcı](https://sade.dev/tr/tools/backoff-calculator/): Exponential backoff zamanlamasını hesapla ve full, equal, decorrelated jitter retry’leri nasıl dağıttığını gör. Tarayıcıda çalışır, hiçbir şey yeniden denenmez. - [Base64 Encoder / Decoder](https://sade.dev/tr/tools/base64/): Base64 ile metin encode ve decode. URL-safe varyantı destekler. Unicode farkındalı. - [HTTP Status Codes Reference](https://sade.dev/tr/tools/http-status/): En sık kullanılan HTTP durum kodları ve anlamları. Aranabilir. - [JSON Formatter](https://sade.dev/tr/tools/json-formatter/): JSON içeriklerini biçimlendir ve sıkıştır. Tarayıcıda çalışır, veri dışarı çıkmaz. - [JSON Schema Geriye Dönük Uyumluluk Diff'i](https://sade.dev/tr/tools/schema-compat/): Bir mesajın data'sı için iki JSON Schema'yı diff'le; değişiklik backward-compatible mi, yoksa yeni bir mesaj sürümü gerektiren kırıcı bir değişiklik mi? Tarayıcıda çalışır. - [JWT Decoder](https://sade.dev/tr/tools/jwt-decoder/): JSON Web Token header ve payload kısımlarını çözer. İmza doğrulamaz. - [Password Generator](https://sade.dev/tr/tools/password-generator/): Kriptografik olarak güvenli, ayarlanabilir uzunluk ve karakter sınıflarıyla şifre üretici. Tarayıcıda çalışır. - [Unix Timestamp Converter](https://sade.dev/tr/tools/timestamp/): Unix timestamp ile ISO 8601 arası dönüştürme. Saniye ve milisaniye otomatik algılanır. - [URL Parser](https://sade.dev/tr/tools/url-parser/): URL bileşenlerini ve query parametrelerini ayrıştırır. - [UUID Generator (v4 & v7)](https://sade.dev/tr/tools/uuid/): UUID v4 (rastgele) ve v7 (zaman sıralı) üretici. Tek tek veya toplu. - [Hakkında](https://sade.dev/tr/about/): Muhammet Şafak ve sade.dev hakkında — neden var, nereye gidiyor, ne yazılır, ne yazılmaz. - [Çerez Politikası](https://sade.dev/tr/cookies/): sade.dev kendi adına çerez yerleştirmez. Tema tercihi localStorage içinde tutulur; çerez yalnızca Cloudflare ve yorum bileşeni kaynaklı olabilir. - [Gizlilik Politikası](https://sade.dev/tr/privacy/): sade.dev hangi verileri işler, hangilerini işlemez: analitik yok, hesap yok, sunucu tarafında uygulama yok. Barındırma ve yorumlar için geçerli istisnalar. - [Kullandığım araçlar](https://sade.dev/tr/stack/): Günlük üretimde kullandığım editörler, diller, kütüphaneler, sunucu yazılımları ve VPS yapılandırması. - [Kullanım Şartları](https://sade.dev/tr/terms/): sade.dev içeriğinin kullanımı, kod örneklerinin lisansı, araçların ve üretim tavsiyelerinin garanti kapsamı, yorum kuralları. - [Sözlük](https://sade.dev/tr/glossary/): Sitede geçen backend ve sistem mühendisliği terimlerinin tanımları; her terim kendi çapasında (#terim). - [llms-full.txt](https://sade.dev/tr/llms-full.txt): Tüm Türkçe yazıların tam metni, tek dosyada. - [RSS](https://sade.dev/tr/rss.xml): Tüm yazıların makine-okunur akışı.