Backend servislerinde veri akışı, kuyruklar, hata yönetimi, gözlemlenebilirlik, performans ve operasyon kararlarına yönelik teknik içerikler.
Bir backend sisteminin değeri yalnızca doğru yanıt üretmesiyle ölçülmez. Trafik arttığında, bağımlı servis yavaşladığında, aynı mesaj tekrar geldiğinde veya bir dağıtım beklenmeyen davranış ürettiğinde de sistemin anlaşılabilir ve kontrol edilebilir kalması gerekir. Bu sayfa, ilgili teknik yazıları ve projeleri backend mühendisliğinin temel kararları etrafında bir araya getiriyor.
Servis sınırları ve veri akışı
İyi bir servis sınırı, yalnızca kodu farklı klasörlere ayırmaz. Verinin hangi bileşende sahiplenildiğini, hangi olayın başka bir sistemi harekete geçirdiğini ve bir hata durumunda sorumluluğun nerede kaldığını netleştirir. Gereğinden erken parçalanmış servisler ağ ve operasyon maliyeti yaratır; gereğinden fazla sorumluluk taşıyan servisler ise değişiklikleri riskli hâle getirir.
Bu nedenle yeni bir servis veya iş akışı tasarlarken önce senkron ve asenkron adımları, veri sahipliğini ve başarısızlık senaryolarını çıkarmak gerekir. Mimari şema ancak bu akış anlaşıldıktan sonra anlam kazanır.
Kuyruklar ve dayanıklılık
Mesaj kuyrukları, uzun süren veya bağımsız ilerleyebilen işleri istek-cevap akışından ayırmak için kullanılır. Fakat bir kuyruğun sisteme eklenmesi tek başına dayanıklılık sağlamaz. Retry aralıkları, dead-letter akışı, mesaj sıralaması, tekrar gelen mesajlar ve tüketicinin idempotent davranışı birlikte tasarlanmalıdır.
RabbitMQ üzerinden iletişim kuran bir sistemde en önemli sorulardan biri, mesajın en az bir kez teslim edilmesinin iş kuralında ne anlama geldiğidir. Aynı e-posta iki kez mi gider, aynı sipariş iki kez mi işlenir, yoksa işlem kimliği tekrarı güvenle engeller mi? Dayanıklılık, bu soruya açık bir cevap verebildiğimiz noktada başlar.
Performans ve gözlemlenebilirlik
Performans problemi yalnızca yavaş bir sorgudan kaynaklanmayabilir. Bağlantı havuzu, gereksiz seri işlemler, büyük yanıtlar, yeniden deneme fırtınaları veya harici servis gecikmesi aynı belirtiyi üretebilir. Bu yüzden optimizasyondan önce ölçüm gerekir.
Loglar olayın bağlamını, metrikler sistemin genel davranışını, trace kayıtları ise bir isteğin servisler arasındaki yolculuğunu gösterir. Bu üç sinyal aynı correlation veya trace kimliği etrafında birleştiğinde, hata ayıklama tahmine dayalı bir iş olmaktan çıkar.
İlgili içerikler
Aşağıdaki teknik yazılar kuyruk iletişimi, Linux servisleri, zamanlanmış görevler, gerçek zamanlı veri akışı ve veri katmanı problemlerini ele alıyor. İlgili projeler bu kararların araç ve ürün düzeyindeki uygulamalarını gösteriyor.
Server-Sent Events (SSE) ile sunucudan tarayıcıya tek yönlü akış: olay biçimi, yeniden bağlanma, Last-Event-ID, proxy tamponlama ve WebSocket karşılaştırması.
Daemon, Linux'ta terminalden bağımsız çalışan arka plan sürecidir. Klasik çift fork adımları, nedenleri ve systemd ile servis yazmanın güncel yolu anlatılır.
fsck ile Linux dosya sistemini güvenle denetleme ve onarma: salt okunur denetim, ext4, XFS ve Btrfs için doğru araç, kök dosya sistemi ve çıkış kodları.
Hash table ve hash function'ın çalışma biçimi: ortalama O(1) erişim, çarpışma çözümü, load factor, yeniden boyutlandırma ve veritabanı indeksleriyle farkı.
Linux kill komutuyla PID'yi doğrulama, SIGTERM ve SIGKILL'i doğru sırayla gönderme, süreç gruplarını hedefleme ve takılan süreçleri güvenle sonlandırma.
MySQL ONLY_FULL_GROUP_BY hatasının nedeni ve sorguyu düzeltme yolları: sütunu kaldırmak, GROUP BY'a eklemek, toplama fonksiyonu, ANY_VALUE ve geçici sql_mode.
PHP exec() ve proc_open() ile komut çalıştırırken enjeksiyonu önleme: argüman dizisi, escapeshellarg ve --, zaman aşımı, stderr okuma ve kök dizin sınırı.
RabbitMQ'da kuyruk ve exchange kurulumu, publisher confirms, dead-letter kuyruğu, sınırlı yeniden deneme ve idempotent tüketici; Python pika örnekleriyle.
SCP komutuyla SSH üzerinden dosya ve dizin kopyalama: OpenSSH 8.7 ve 9.0 değişiklikleri, port ve URI biçimi, anahtar kullanımı, rsync ve sftp ile farkları.
Server-Side Rendering (SSR) ne zaman değer üretir, ne zaman gereksiz yüktür: Express, Next.js App Router, Pages Router, streaming ve hydration örnekleri.
systemd ile Linux'ta servis birimi oluşturma: unit bölümleri, bağımlılık ile sıralama farkı, örnek .service dosyası, durum ve günlük inceleme adımları.
UFW ile Linux güvenlik duvarı kurallarını SSH erişimini kaybetmeden yönetin: kural sırası, Docker port sorunu, IPv6, günlük izleme ve kuralları yedekleme.