Bu harita "Kubernetes var, bütçe sınırsız, yine de çöküyor" videosunun devamı. Mimariyi tek bir şemadan ezberlemek yerine, yükün yolunu izleyip her katmanın hangi sorunu çözdüğünü gösteriyor.
Sıra bilerek şöyle: önce sorunu koy, sonra kapıda koru, okumayı hafiflet, yazmayı sıraya al, en sonda dayanıklı ve görünür kıl. Her adımda bir öncekinin yetmediği yer var.
Bir konuya tıkla: ne bilmen gerektiği ve kaynaklar açılır.
Sunucuyu çoğaltmak yetmiyor: asıl darboğaz hep ortak olan yerde. Önce sorunu doğru koy.
Yükün veritabanına ulaşmadan önce kesilmesi, ona yetişmeye çalışmaktan ucuzdur.
Trafiğin çoğu okuma. Aynı veriyi tekrar tekrar veritabanından çekmeyi bırak.
Ağır işi doğrudan veritabanına yazma; kuyruğa al, sindire sindire işle.
Bir şey kesinlikle bozulacak. Önemli olan, bozulduğunda hepsinin birden düşmemesi ve neyin bozulduğunu görebilmen.
Haritadaki her konunun açıklaması, bilmen gerekenler ve kaynaklar — tek listede.
Dikey ölçekleme makineyi büyütür, yatay ölçekleme sayısını artırır. Uygulama sunucuları yatay ölçeklenir; veritabanı ise çoğu zaman ilk tıkanan yer.
Oturum ve dosya gibi durumu sunucunun belleğinden çıkarıp dışarı al; böylece her sunucu birbirinin yerine geçebilir.
Her sunucunun gittiği tek bir veritabanı, ağın ortasında tek bir bileşen: biri düşünce hepsi düşer.
Bağlantı sayısı, disk ve kilitler sınırlı. Yirmi sunucu aynı anda binlerce yazma gönderince bağlantı limiti dolar ve istekler birbirini bekler.
Her istek için yeni bağlantı açmak yerine sınırlı sayıda bağlantıyı paylaşmak; veritabanını bağlantı fırtınasından korur.
Gelen trafiği sağlıklı sunucular arasında dağıtır, düşen sunucuyu devreden çıkarır. Tek bir giriş noktası olmasa yatay ölçeklemenin anlamı kalmaz.
Yük dengeleyici sağlıksız sunucuya trafik göndermesin diye uygulamanın kendini raporlaması.
Bir istemcinin ya da herkesin saniyede yapabileceği istek sayısını sınırlar; aşırı yük içeri girmeden reddedilir, sistem ayakta kalır.
Bilet satışı gibi ani patlamalarda kullanıcıları sıraya alıp sistemi boğmadan içeri sırayla alma.
Görsel, script ve değişmeyen sayfalar kullanıcıya yakın uçlardan sunulur; kaynak sunucuya hiç uğramaz.
Sık okunan veriyi bellekte tutan hızlı bir katman. Veritabanına giden okumanın büyük kısmını keser; ama yanlış kurulursa kendi sorununu yaratır.
Önce önbelleğe bak; yoksa veritabanından oku, önbelleğe yaz, öyle dön. En yaygın ve en basit desen.
Veri değişince eski kopyayı ne zaman ve nasıl atacağın: bilgisayar biliminin zor sorularından biri.
Popüler bir anahtarın süresi dolduğu anda yüz binlerce istek önbelleği ıskalayıp aynı anda veritabanına iner. Videonun asıl uyarısı bu.
Aynı anda yazılan anahtarlar aynı anda sona ermesin diye süreye küçük rastgele bir fark eklemek.
Aynı anahtar için yalnızca bir istek veritabanına gider; diğerleri sonucu bekler ya da eski veriyi alır.
Yazma tek ana veritabanına, okuma bir ya da birkaç kopyaya gider. Okuma yükü kopyalar arasında bölünür.
Bilet satışı, sipariş gibi ağır işlemler önce kuyruğa girer, işçiler (worker) kuyruğu kendi hızlarında tüketir. Ani patlama kuyrukta emilir, veritabanı sakin kalır.
RabbitMQ görev dağıtımı için, Kafka büyük hacimli olay akışı ve tekrar oynatma için. İlk kuyruğun için ikisi de yeterli.
Tüketici yetişemediğinde üreticiyi yavaşlatmak ya da reddetmek; kuyruğun sonsuza kadar şişmesini engeller.
Kuyrukta aynı mesaj iki kez işlenebilir; ödemenin iki kez çekilmemesi için işlemin tekrar çalıştırılabilir olması gerekir.
Yazma modelini ve okuma modelini ayırmak; her biri kendi ihtiyacına göre ölçeklenir ve depolanır.
Yanıt vermeyen bir bağımlılığa istek göndermeyi bir süre durdurur; sistemin geri kalanı onunla birlikte çökmez.
Kubernetes gibi araçlar yüke göre uygulama sunucusu sayısını artırır; ama veritabanı bunu otomatik yapamaz, bu yüzden önceki katmanlar şart.
Neyin yavaşladığını görmeden ölçeklenemezsin. Büyük günden önce sistemi kasıtlı olarak yükle ve nerede kırıldığını öğren.