English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

konuk
1 / ?
derslere geri dön

Bilmeniz Gereken Üç Bozukluk Kavramı

Hoşgeldin

Dağıtılmış sistemler, modellerle başarısız olur. Modelleri öğrendiğinizde, her postmortem bir gizem değil, bir tanınırlık egzersizine dönüşür.

Üç kavram, üretim başarısızlık analiziinde önemli olanı kapsar:

Tek nokta başarısızlığı (SPOF): Bir sistemin çöküşüne yol açan bileşen. Sıklıkla gizli: herkesin üzerine bağımlı olduğu DNS sunucusu; her şeyin yenilendiği sertifika; tek veri deposı master.

Yansıtan başarısızlık: Bir bileşenin başarısızlığı, başka birinin başarısızlığına yol açar, ardından diğerinin başarısızlığına. Bir hızı yavru veritabanı, API katmanındaki zaman aşımalarını neden olur, ardından tekrar denemeler, veritabanını daha da yüklü hale getirir, ardından daha fazla zaman aşımı. Patlama yayılır.

Patlama yarıçapı: Bir parçanın başarısız olduğu zaman, ne kadarlık bir sistem devre dışı kalır. Mimari seçimler, yarıçapı sınırlar veya sınırsız hale getirir. Bir SPOF'e sınırsız patlama yarıçapı vardır. Bir hizmetli bölümlü sistemde yarıçapı sınırlıdır.

Bu dersin sonunda öğreneceksiniz:

- Bir mimaride SPOF'leri tahlil yaparak tanımlayın

- Yansıtıcı başarısızlık modellerini tanılayın: sağanak ordusu, deneme fırtınası, ölüm kuyruğu

- Gerçek bir zaman çizelgesini okuyun ve tetiği, tetiklediği latent eksikliği ayırt edin

- Sistemler yerine insanları hedef alan masum işler oluşturun: önleme / algılama / kurtarma

- Bulkhead'lar ve devre kesicileri patlama yarıçapı sınırlama araçları olarak düşünün

Tek Nokta Başarısızlığını Tanımla

Katmanlı Mimari Tahlili

Bir küçük web mimarisi düşünün:

- DNS: api.example.com -> tek isim sunucusu IP 203.0.113.10 bir DNS sağlayıcısı tarafından barındırılır

- CDN: api.example.com önündeki tek CDN sağlayıcısı

- Giriş: Yük dengleyici arkasında iki geri yansıtan proxy makinesi

- Arka uç: İki kullanılabilirlik bölgesinde (her bölge üçü) altı API kopyası

- Veritabanı: Aynı kullanılabilirlik bölgesinde bir ana + bir okuma kopyası

- Önbellek: Üç düğümle dağıtılmış Redis kümesi, aynı iki kullanılabilirlik bölgesinde yayılmış

Soru: Hangi bileşenler SPOF'lerdir? İpucu: SPOF'ler, 'tek makine' türünden her zaman açık değildir. Üç makineli de aynı kullanılabilirlik bölgesinde olan bir küme, o bölge için başarısızlık için bir SPOF'dir.

Bu mimaride en az üç SPOF'yi tanımlayın. Her birini, başarısız olduğunda neyin başarısız olduğunu adlandırın ve SPOF'yi (uygulamayı yeniden yazmadan) kaldırmak için somut bir değişiklik önerin.

Üç Klasik Kaskade Deseni

Başarısızlıklar Bağımlılıklar Aracılığıyla Geçer

Desen 1: Gökten Düşen Kuş Yüklü. Bir ortak kaynak (cache, kilit, veri tabanı) başarısız olur veya yeniden başlatılır. Ona bağlı her müşteri aynı anda yeniden dener. Tekrarlar kaldırmayı aşıp, geri yüklenme onları absorbe edemez; geri yüklenme asla tamamlanmaz.

Desen 2: Tekrar Fırtınası. Bir alt hizmet yavaşlar. Üstteki çağrıcılar başarısız olmayacak şekilde tekrar dener. Tekrarlar yükü katlar. Hızlı hizmet daha yavaş, daha fazla tekrar tetikler. Sonunda, hizmetin sağlıklı bir sürümü bile kaldıramayacak kadar yük artar.

Desen 3: Ölüm Kuyruğu. Bir işleme kuyruğu için geri basınç yoktur ve daha hızlı işler than kuyruğun büyümesine neden olur. Bellek tükenir; tüketici çöker; yeniden başlatılır; daha büyük bir kuyruğa rastlar; tekrar çöker.

Genel bağ: küçük bir başlangıç istilası, pozitif geri besleme döngüsü tetikler. Sistem kendi cevabı ile başarısızlığı büyüterek, dindirmez.

Dindirme Mekanizmaları

Eksponansiyel geri çekilme ile dalgalı. Tekrar eden istemcilerin her seferinde daha uzun bekleme süresi vardır, rastgele bir ekleme vardır. Sentezli geri çağrı dalgalarını önler.

Devre açıcı. Bir çağrıcı, alt hizmet başarısızlık oranını izler. Bir eşiği aştığında, bir soğutma süresi boyunca çağrıya son verir ve hemen kendi taleplerini başarısız eder. Boş işleme önler, alt hizmetin iyileşmesine izin verir.

Kumanya. Bağımlılıklar için ayrı kaynaklar izole et. Veritabanı A için bağlantı havuzu B için cache bağlantı havuzu. Yavaş bir veri tabanı diğer tüm bağlantıları starve edemez; cache çağrıları devam eder.

Yükten Azaltma. Yüklü olduğunda, kenarda istekleri reddetmek yerine yavaş bir şekilde başarısız olur. 1 milisaniyede 429 daha iyidır, 30 saniyede 500.

Geri basınç. Tüketiciler kaldıramadığında yavaş üreticiler. Kuyruklar sınırlı hale gelir; gönderenler bloke edilir; orijinal çalışma kaynağı gerilimi hisseder.

Kaskade başarısızlığı: tetikleyici -> büyütme -> çöküş, dindirme mekanizmaları ile

Bir Kaskade Tanımla

Bir ekip olan API katmanının, rutin bir veri tabanı failover sırasında çöktüğü görülüyor. Süreç:

- 14:00:00 — operatör, yedek veri tabanını öne çıkarıyor. Beklenen süreklilik: ~10 saniye.

- 14:00:08 — ana veri tabanı kullanılamıyor. API katmanı, veri tabanı bağlantısı hatası ile başarısız olan istekleri başlıyor.

- 14:00:08 — API katmanı, yeniden deneme (varsayılan yapılandırma: 5 deneme, geri çekilme yok, 100ms aralıklarla).

- 14:00:11 — yedek, yeni bağlantıları kabul etmeye başlıyor.

- 14:00:11 — API katmanı, her kopya × her eşzamanlı istek × her yeniden deneme için, binlerce yeni veri tabanı bağlantısı aynı anda açıyor.

- 14:00:13 — yeni ana veri tabanı'nın bağlantı havuzu tükeniyor; yeni bağlantılar reddediliyor.

- 14:00:13-14:05:00 — API katmanı kopyaları, bağlantı havuzlarını tüketiyor, hatalar fırlatıyor, yeniden başlatıyor, tekrarlıyor.

- 14:05:00 — operatör, API katmanı trafiğini manuel olarak durduruyor; veri tabanı stabilize oluyor.

- 14:10:00 — yavaşça trafiğin geri kazanımı tamamlanıyor. Toplam kesinti: ~10 dakika (beklenen ~10 saniye yerine).

Kaskad düzenini tanımla, önleyebileceği en az iki sürgü mekanizmasını adlandır ve neden failover'ın (ilk olarak 10 saniye aralığında planlandığı) yerine 10 dakikalık bir kesintiye yol açtığına dair açıklama yap.

DNS SERVFAIL: İki Katlanmış Güçlüğü Anlayın

Gerçek Şekil Postmortem

Aşağıda, gerçek bir olayın temizlenmiş bir sürümü bulunmaktadır. Satıcı adları değiştirildi, IP'ler anonimleştirildi; şekil, zamanlama ve dersler gerçekdir.

Özeti

Örnek.com sitesi, yaklaşık 3-4 saat boyunca tüm genel DNS çözücülerden SERVFAIL geri döndü. Aynı DNS ana bilgisayarındaki diğer 46 bölgede etkilenmedi. Neden: iki katlanmış güçlük.

1. Satıcı A (bir ikincil DNS sağlayıcısı), ana bilgisayarın allow-axfr-ips izni dışında olan yeni bir iç eşitleme IP'si ekledi.

2. Örnek.com bölgesinde, yıllar öncesine dayanan RFC'ye aykırı bir CNAME çakışması vardı (demo.example.com, aynı etikette hem CNAME hem de MX/TXT kayıtları vardı) ve bu, Satıcı A'nın yeni AXFR'yi reddetmesine neden oldu.

Zamanlamalar (UTC)

- ~15:00 — Satıcı A, altyapılarına yeni eşitleme IP'si 198.51.100.42 ekledi

- 15:02 — first AXFR-out denied for 198.51.100.42 appears in primary DNS logs (no alerting on this signal)

- ~18:00 — SOA expire window reached; Vendor A drops example.com zone from cache

- ~18:30 — SERVFAIL detected externally

- ~19:45 — root cause identified

- 20:00 — 198.51.100.42 added to allow-axfr-ips; primary restarted

- 20:05 — NOTIFY sent; AXFR initiated; zone STILL SERVFAIL (CNAME conflict)

- 20:07 — check-zone reveals 1 error: CNAME conflict on demo.example.com

- 20:09 — CNAME replaced with A record; zone check clean (0 errors)

- 20:10 — NOTIFY sent; AXFR completes; Vendor A begins serving zone

- 20:11 — dig @8.8.8.8 example.com A returns correct IP — RESOLVED

Why Only example.com?

All 47 zones share the same DNS primary. The AXFR IP block affected all zones. But only example.com had the CNAME conflict, & only example.com needed a fresh AXFR at the moment the deny was enforced. Other zones had already refreshed before the deny or did not yet need to.

Latent defect

The CNAME conflict at demo.example.com had existed for years. It worked because the primary served the zone from its database (lenient about RFC violations) & Vendor A was serving from stale cached data from before the violation was introduced. When Vendor A dropped its cache & needed fresh data, the violation surfaced.

Trigger

Vendor A silently added a new sync IP. The primary's allowlist did not include it. AXFR denied. Three hours later (SOA expire), Vendor A dropped the zone. The latent defect surfaced when the system tried to recover.

Blameless Eylem Maddeleri Yazın

Blameless: Sistemleri, Kişiler Değil

Blameless eylem maddesi, bir kişinin farklı bir şey yapması gerektiğini belirtmez, sistem farklı bir şekilde neler yapması gerektiğini belirtir. 'Operatörü eğit' suçlayıcıdır. 'Bu hatayı önceden dağıtmadan önce otomatik bir denetleyici ekleyin' suçsuzdur.

İyi blameless eylem maddeleri, üç boyut'a ayrılır:

- Önleme: Kötü şeyin zor veya imkansız olmasına yardımcı olmak

- Tespit: Olay gerçekleşirse daha erken fark etmesine yardımcı olmak

- Kurtarma: Olay gerçekleştiğinde hasarı sınırlamak

Her madde, (1) özel sistem değişikliği, (2) sahibi olan bir ekip ve (3) karşıladığı boyutu belirtmelidir.

DNS-SERVFAIL postmortem'ü yukarıda belirttiği gibi üç blameless eylem maddesi yazın. Bu maddeleri önleme / tespit / kurtarma (her biri boyut için) üzerinde dağıtın. Her madde, belirli bir sistem değişikliği ve sahibi olan bir ekibin adı belirtmelidir. Hiçbirini, bir insan neden farklı bir şey yapmalıdır, hedeflemeyin.

Gemi Nasıl Sönmez

Deniz Mühendisliğinden Ödünç Alınan

Geminin içinde su geçirmez bölme duvarları bulunur: dikey duvarlar, gövdeyi bölümlere ayırır. Bir bölüm sızdırsa gemiyi batırmaz; başka biri de başarısız olursa geri kalanı etkilemez.

Dağıtılmış sistemler aynı kelimeyi ve aynı fikri kullanır.

Bölme Duvarı Şablonu: bağımlıya göre kaynakları izole et. Üç downstream API'ye çağrı yapan bir hizmet, üç ayrı bağlantı havuzu, üç ayrı işlev havuzu, üç ayrı tekrar bütçe kullanır. Aşırıya götürülen bir downstream, diğer ikisini de etkileyemez.

Bölme Duvarı Yok: bir yavaş bağımlı, paylaşımlı işlev havuzunu tüketir; diğer bağımlılıklara yönelik çağrılar bekleyen işlevler için havuzları tüketir; tüm hizmet yanıt vermez hale gelir.

Bölme Duvarı Var: bir yavaş bağımlı, kendi havuzunu tüketir; buna yönelik çağrılar hızlı bir şekilde başarısız olur; diğer bağımlılıklara yönelik çağrılar normal olarak devam eder; başarısız bağımlıya sınırlı kalır.

Devre Kesici

Devre Kesici Şablonu: bir downstream bağımlılığı sarmalayan, başarısızlık oranını takip eden bir durumlu kaporta. Üç durum vardır:

- Kapalı (normal): çağrılar geçer. Başarısızlıklar sayılır.

- Açık (çalışma): 30 saniyede başarısızlık oranı %50'yi geçirse, devre kesici açılır. Çağrılar, bağımlı sağlıksız olduğu sürece işe yaramaz; bağımlıdan gelen yükü almadan, bağımlı iyileşene kadar bekler.

- Yarı Açık (test): bir soğutma süresi sonra, devre kesici küçük bir kısmını geçirmeye izin verir. Eğer başarılı olursa, normal olarak kapanır. Eğer başarısız olursa, başka bir soğutma süresi için yeniden açılır.

Ana Fikir: devre kesici, bilinmeyen sağlıksız dönemlerde çaba harcamayı engeller ve downstream'a iyileşme şansı verir.

Bölme Duvarları patlama sınırlarını sınırlar. Devre kesiciler patlamayı sürdürülmesini engeller.

Patlama Sınırlarını Sınırla

API hizmetiniz, kullanıcı hizmeti, öneri hizmeti, bildirim hizmeti ve üçüncü taraf ödeme API'sine bağımlı dört downstream hizmeti çağırır. Takım, 'Öneri Hizmeti biraz dalgalı olduğunu duydu' ve hizmetin başarısız olduğunda sistemin geri kalanının sağlıklı kalmasını sağlamak istiyor.

Bugün hizmet, 200 thread ve tek bir paylaşımlı HTTP bağlantı havuzu kullanarak çalışır. Dört downstream da bu kaynakları paylaşır. Devre kesiciler yoktur.

Bu API hizmeti için bölme duvarı + devre kesici tasarımı önerin. Özelliksiz: dört bağımlılık arasında işlev / bağlantı havuzlarını nasıl böleriz, tavsiyeler için nerede flakiness için devre kesici eşiği ne kadar uygun ve kullanıcı dostu API'nin, Tavsiye Servisi açık devre kesildiğinde ne yapması gerektiğini belirtin?

Bir Hata Modu İncelemesi Tasarımı

Sendeleme

Hata modlarını inceleyerek SPOF'ları belirleyebilir, kaskadya başarısızlık desenlerini tanımlayabilirsiniz, bir postmortem okurken tetikleyiciyi sönmemiş hasardan ayırabilirsiniz, suçlamasız eylem maddeleri oluşturabilirsiniz ve önleme / algılama / geri dönüşümsüzlük arasında ayrım yapabilirsiniz ve kemerler + devre kesiciler + zarif gerileme ile patlayıcının etki alanını sınırlayabilirsiniz.

Beşini uygula.

Takım, yeni bir hizmet search.example.com başlatıyor ve bu hizmetin üç downstream hizmeti üzerine bağlıdır: birincil arama dizini (index.example.com), analiz hizmeti (analytics.example.com) ve öneri hizmeti (recs.example.com). Takım, hizmetin başlatılmasından önce bir 'hata modu incelemesi' düzenlemesini istiyor.

Hata modu incelemesini yöneteceğiniz şekilde bir özet hazırlayın. İçerik: SPOF'ları (bir teknik) nasıl ortaya çıkaracağınız, arama hizmetinin üç downstream'unun (iki desen) arasında kaskadya başarısızlık nasıl önleyeceğiniz ve öneri hizmetine (takım en az güvenilir olanı işaretledi) yönelik somut bir eylem maddesi (hazırlanacak) ve hizmetin başlatılmasından önce gerekli olan izlemeyi belirleyeceğiniz.

Bu Kursun Sonraki Adımı

Bu Kursun Sonraki Adımı

Şimdi SPOF'ları belirleyebilir, kaskadları tanımlayabilirsiniz, bir postmortem okurken verimli bir şekilde tetikleyiciyi sönmemiş hasardan ayırabilirsiniz, suçlamasız eylem maddeleri oluşturabilirsiniz ve tasarımı ile patlayıcının etki alanını sınırlayabilirsiniz.

Bu kursun (cs_distsys_observability_and_capacity) son dersinde, kullanıcıların sorunu öğrenmeden önce neyin ölçülmesi gerektiğini öğretir. Sağlık kontrolleri, sürüm uçları, proxy katmanında dört altın sinyal ve gözlemlenen verilere dayalı olarak patlama kapasitesi kararlarının nasıl bağlantılı olduğu.

Etkin ders: geometry_of_failure_modes_and_blast_radius başarısızlık modlarındaki arasında ve patlama yarıçapının sınırını belirleyen merkezi olmayanlik (graf düğümünün boğucu olduğu) ve min-cut (patlama yarıçapının sınırı) arasındaki ilişkiyi çıkarır.

Mükemmel iş çıkarmışsın. İlerle.