Her şeye alarm kurmanın bedeli: ekip alarmlara güvenmeyi bırakır ve gerçek olanı da görmez. Bir alarm, gecenin üçünde birini uyandırmayı hak edecek kadar aksiyon gerektirmiyorsa alarm değil, gürültüdür.
Glossary
Sözlük
30Yazılarda geçen terimlerin kısa tanımları. Her tanım, terimi asıl işleyen yazılara bağlı.
- Alarm yorgunluğu
- At-least-once
Bir mesajın en az bir kez teslim edileceği, ama bazen birden çok kez geleceği garantisi. Kayıp yoktur, tekrar vardır. Kuyruklu sistemlerin pratikteki varsayılanı budur; çözüm tekrarı engellemek değil, tüketiciyi tekrara dayanıklı kılmaktır.
- BFF (Backend for Frontend)
Her istemci tipi için — mobil, web — ayrı bir API katmanı. Tek bir genel amaçlı API'yi her istemcinin ihtiyacına göre şişirmek yerine, her istemcinin kendi şekline uygun ince bir katman koyar.
- Blue-green deployment
İki özdeş üretim ortamı; bir an için yalnızca biri canlı. Yeni sürüm boştakine kurulur, sağlık kontrolünden geçirilir, sonra trafik tek hamlede ona çevrilir. Eski ortam yok edilmez — geri dönüş hedefi olarak sıcak bekler.
- Boring architecture
Yeni ve ilginç olanı değil, kanıtlanmış ve anlaşılır olanı seçme tercihi. Amaç heyecan değil, gece üçte kimsenin sürprizle karşılaşmaması; karmaşıklık ancak somut bir problem onu zorunlu kıldığında eklenir.
- Canary release
Yeni sürüme önce trafiğin küçük bir dilimini vermek, hata oranı ve gecikmeyi izlemek, sorun yoksa dilimi büyütmek. Risk tüm kullanıcıya değil küçük bir gruba taşınır; blue-green'in kademeli kardeşi.
- Circuit breaker
Bir dış servis sürekli hata vermeye başladığında ona gitmeyi geçici olarak kesen, belirli aralıklarla tekrar deneyen kalıp. Düşen bir bağımlılığın çağıran sistemi de aşağı çekmesini engeller.
- Connection pooling
Veritabanı bağlantılarını her istekte açıp kapatmak yerine havuzda tutup yeniden kullanmak. PHP-FPM gibi per-request modellerde bağlantı kurulum maliyeti kümülatifte ciddidir; pgBouncer'ın `transaction` modu bunu önde absorbe eder.
- CQRS
Okuma ve yazma modellerini ayırmak (Command Query Responsibility Segregation). Okuma ile yazmanın gerçekten farklı şekiller istediği yerde kazandırır; tek bir modelin yettiği yerde iki model ve aralarındaki senkronizasyon yükü kalır.
- Dağıtık trace
Bir isteğin ya da mesajın servisler boyunca yolculuğunun, her adımın zamanlamasıyla birlikte tek bir bağlı resim hâline getirilmesi. Log'lardaki korelasyon kimliği bir iğnedir; trace samanlığın kendisini haritalar.
- Dead-letter queue (DLQ)
Retry bütçesini tüketip başarısız olan mesajların düştüğü kuyruk. Bir mezarlık değil bekleme alanıdır — ama oradan çıkarmak yüklü bir operasyondur: naif bir replay kuyruğu yeniden zehirler ya da yan etkileri ikinci kez tetikler.
- Dual-write
Bir işlemde iki ayrı sisteme yazmak — örneğin veritabanına `INSERT` ve broker'a `publish`. Yerel transaction broker'ı kapsamadığı için aralarında hiçbir atomiklik garantisi yoktur: ya kayıp event ya hayalet event üretir.
- Event-driven mimari
Bileşenlerin birbirini doğrudan çağırmak yerine olay yayınlayıp dinlemesi. Gevşek bağ ve bağımsız ölçeklenme kazandırır; karşılığında sıra, tekrar ve nihai tutarlılık problemlerini üstlenirsiniz.
- Exactly-once effect
Teslimin değil, etkinin tam bir kez olması. Dağıtık bir sistemde exactly-once teslim uçtan uca garanti edilemez — "işledim" ile "işlediğimi bildirdim" iki ayrı adımdır ve aralarına çökme girebilir. Hedef, tekrarı zararsız kılmaktır.
- Expand–contract
Tehlikeli bir şema değişikliğini, her biri tek başına güvenli ve geri uyumlu üç adıma bölmek: genişlet (yeniyi ekle), geçiş (veriyi taşı, okumayı çevir), daralt (eskiyi sil). Hiçbir ara adımda çalışan kod şema ile uyumsuz kalmaz.
- Feature flag
Kodu canlıya almakla özelliği açmayı birbirinden ayıran anahtar. Deploy ile yayın aynı an olmaktan çıkar: özellik kapalı çıkar, kademeli açılır, sorun çıkarsa deploy geri alınmadan kapatılır.
- Golden signals
Bir servisin sağlığını dört ölçüyle anlatan set: gecikme, trafik, hata ve doygunluk. Yüzlerce metrik toplamak yerine bu dördünü doğru kurmak, çoğu üretim probleminin ilk sinyalini verir.
- Graceful shutdown
Bir process'in kapanma sinyalini alınca yeni iş almayı bırakıp elindekini bitirmesi. Olmadığında deploy ya da ölçek değişimi, yarım kalmış istekler ve yarım işlenmiş mesajlar bırakır.
- Idempotency
Aynı işlemin iki kez çalıştırılmasının bir kez çalıştırılmasıyla aynı sonucu vermesi. Kuyruk tarafında bunu, işlenen her mesajın kimliğini bir dedupe kaydına yazıp asıl işi aynı transaction içinde yaparak alırsınız.
- Kararsız test
Aynı kod üzerinde bazen geçen bazen kalan test. Retry ile bastırmak belirtiyi gizler: kararsızlık neredeyse her zaman gerçek bir determinizm eksikliğini — zaman, sıra ya da paylaşılan durum bağımlılığını — işaret eder.
- Modüler monolit
Tek bir deploy birimi içinde net modül sınırları olan mimari. Mikroservisin sınır disiplinini, dağıtık sistem maliyetini ödemeden verir; sınırlar gerçekten gerektiğinde ayrıştırma noktası zaten hazırdır.
- PITR (point-in-time recovery)
WAL arşivi sayesinde veritabanını geçmişteki herhangi bir ana geri döndürebilme yeteneği. Tek başına gecelik bir dump, veri kaybı penceresini bir güne kadar açar; PITR o pencereyi saniyelere indirir.
- Rate limiting
Bir istemcinin belirli bir pencerede yapabileceği istek sayısını sınırlamak. Kötü niyetli trafiğe karşı olduğu kadar — çoğu zaman daha çok — retry döngüsüne girmiş hatalı bir istemciye karşı da korumadır.
- Read replica
Primary'nin yazmalarını akış hâlinde tekrar oynayan, okumaya açık kopya. Okuma yükü problemini çözer, yazma yükü problemini **çözmez** — aynı yazmalar replica'da da tekrarlanır. Bedeli, her sorgunun "bu bayat veri okuyabilir mi" sorusuna cevap vermek zorunda kalmasıdır.
- Readiness / liveness
İki ayrı sağlık sorusu: liveness "process ayakta mı", readiness "process trafik almaya hazır mı". Trafiği readiness belirler ve gerçek bir readiness kontrolü bağımlılıkları sınar — veritabanına bağlanabiliyor mu, cache erişilebilir mi. "Port açık mı" yeterli değildir.
- Sharding
Veriyi bir anahtara göre birden çok veritabanına bölmek. Tek primary'nin yazma kapasitesini aşan yükün gerçek çözümü — ve ölçek merdiveninin geri dönüşü en zor, en pahalı adımı. Ondan önceki her adım denenmiş olmalı.
- SKIP LOCKED
Bir `SELECT ... FOR UPDATE`'in, başka bir transaction'ın kilitlediği satırları beklemek yerine atlamasını sağlayan SQL yan tümcesi. Birden çok relay ya da worker'ın aynı tablodan çakışmadan disjoint kümeler çekmesini sağlar; onsuz paralellik fiilen seri yürür.
- Teknik borç
Bugünkü hızı yarınki değişim maliyetiyle takas eden bilinçli ya da bilinçsiz kararlar. Hepsi ödenmez — bazılarıyla yaşamak doğru karardır. Ayrım, borcun faizini kimin ve ne sıklıkta ödediğine bakılarak yapılır.
- Transactional outbox
Mesajı doğrudan broker'a basmak yerine, iş satırıyla aynı transaction içinde bir `outbox` tablosuna yazma kalıbı. Ayrı bir relay onu kuyruğa taşır. Dual-write'ı tek write'a indirir — ama karşılığında exactly-once değil, at-least-once verir.
- Working set
Veritabanının fiilen sık eriştiği veri kümesi — toplam veri değil, sıcak olan kısım. RAM'e sığdığı sürece okumalar bellekten karşılanır; taştığı an disk okumaları ve gecikme birlikte tırmanır.