Giriş: Sunucusuz Hesaplamadaki Dayanıklılık Meydanlığı
Serverless Computing, geliştiricilerin altyapı yönetimi tarafından nasıl inşa ettikleri ve dağıtıldığı ve otomatik ölçeklendirme sunarak uygulamaları yeniden şekillendirmiştir. AWS Lambda, Azure Functions ve Google Cloud Functions gibi platformlar, yalnızca gerçek kullanım için ödeme yaparken iş mantığına odaklanmalarını sağlar. Ancak, bu model, benzersiz esneklik zorlukları sunar.
Bir Devre Breaker uygulamanız için bir güvenlik valfi olarak hareket eder. Bu makalede, size bir eşiği aşmayı zorlayan ve sistemden uzaklaştırma süresini korur, kullanıcıların geri alma süresini sağlar.Bu makalede, size ayrıntılı açıklamalar, platforma özgü düşünceler dahil olmak için kapsamlı, eylemli bir kılavuz sunmak için orijinal içeriğe genişletiyoruz.
Derinlikteki Devre Taşını Anlayın
Devre Breaker modeli Michael Nygard tarafından kitabında popülerleştirildi:0)Release It!) ve daha sonra bulut-natif desenlerde resmileştirilmiş: Bir devre bir hata algılandığında (örneğin, kısa), o, şu anki akış akışını açıyor.In software, devre eyaletler:
- [FONT:0) Closed:[Dönetici:[Dönetici:0) Talepler normal olarak aşağı doğru servise doğru ilerler.[Dördüncü sınıflar, HTTP 5xx hataları, zaman kesintiler). Başarısızlar belirli bir süre içinde yapısal bir eşiği aşıyorsa (örneğin, 30 saniye içinde 10 başarısızlık), devre gezileri ).
- [FONT:0)Açık:[Dönetici:0) İstekler hemen reddedilir (veya geri çekilme mantığı çağrılmadan) Bu boşa harcanmış kaynakları önler ve bir süre sonra geri dönüş hizmeti verir (örneğin, 30 saniye), devre geçişleri derhal reddedilir.
- [FONT=0)Half-Open:[Dönetici:[Dönetici:0)[Dönetici:0))) Sınırlı sayıda deneme isteğine izin verilir.Eğer bu başarılı olursa ( tanımlanmış başarı kriteri ile), devreler sıfırlanırsa, devreler kapanır.[Döneticiler.
Bu devlet makinesi kritiktir.Bunun olmadan, kısa bir kesintiye uğramak, tüm müşterilerin aynı anda yeniden denemelerine neden olabilir, dışlamayı genişleten bir fırtına oluşturmak. Devre Breaker patterni ayrıca müşterilere erken başarısızlık geri bildirim sağlar, örneğin önbellekli veriler veya bir süre boyunca arkadaşça mesaj verebilir.
[FONT=0)Martin Fowler'in Devre Lanetinde Kaminal Maddesi[Dönem: 1) temel referans olarak kalır.
Tuning için Anahtar Para Para Para Para Paraları
Her devre kesici uygulama, uygulamanızın davranışınıza ayarlanmalıdır:
- [FONT:0)Failure eşi:[Dönetici:[Dönetici: 1 ) Devreyi açmak için bir pencereden fazla) dışlama.
- [0]Zaman süresi:[Dönem:[Dönem: 0,4;) Devre yarı açıklığa geçişten önce ne kadar süre açık kalır.
- [FONT:0)Half-open deneme sayısı: Devreyi kapatmak için gerekli olan başarılı istek sayısı.
- [FONT:0)Error sınıflandırması:[Dönetici:[Dönetici:0) Hangi cevaplar başarısızlık olarak sayılır? Sadece 5xx? Zamanlar? 4xx? (Usuly only server-side errors).
- [FONT:0)Recovery timeout:[[Dönetici: 1) Seçmeli olarak artacaktır (hedef arkadan) togglingling önlemek için.
Serverless uygulamalar karmaşıklaşır: çünkü fonksiyonlar ephemeral, devre için in-memory durumuna güvenemezsiniz.Eğer bir Lambda örneği başarısız olursa, devre devleti kaybedilebilir.
Serversız Ortamlarda Devre Taşlarını Uygulamayın
Bir sunucusuz mimaride devre kesiciyi uygulamak, platform kısıtlamalarına uygun şekilde adapte etmek gerektirir.Üç birincil yaklaşımları ele alacağız: yönetilen API özelliklerini kullanarak, işlev kodunuzda üçüncü taraf kütüphanelerini kullanarak ve AWS Step Functions gibi orkestration hizmetlerini kullanmak.
Yaklaşım 1: API Gateway-Level Throttling ve Devre
AWS API Gateway, geri dönüş yapan bir Lambda işlevine talep eden bir devre kırıcısı olarak hareket edebilir.Ancak, işlev çok fazla 5xx hatası döndürür veya yetersizlik limitleri aşabilir, API Gateway bir geri dönüş cevabı geri dönmek için yapılandırılabilir (örneğin, özel bir yazar veya entegrasyon yanıtı ile statik bir mesaj).
Örnek: Bir API Gateway kullanımı planı patlama sınırı ve oranı limiti ile ayarlayın, geri dönüş kapasitenizi yansıtan bir limit. Lambda işlevi boğululduğunda API Gateway, 03.02.2012 ile yanıt verir.
Yaklaşım 2: Kütüphaneler ile In-Function Circuit Breakers with Library
En esnek yaklaşım, Lambda işlevleriniz içinde bir devre kesici kütüphanesine sahip olmaktır. Çünkü Lambda işlevleri devletsiz ve yatay olarak ölçeklenmiş, devre kesici devlet, mevcut durumu kontrol edebilir. ortak bir model kullanır.)
Node.js için, [[Dint:0)Opossum[[[Dönetici: 1) Kütüphane yaygın olarak kullanılan bir devre kesicidir.Respback functions, timeout, and volume eşi. İşte AWS Lambda için uygun basitleştirilmiş bir uygulama:
const CircuitBreaker = require('opossum');
const AWS = require('aws-sdk');
const dynamo = new AWS.DynamoDB.DocumentClient();
const circuitBreakerState = {
state: 'CLOSED',
failureCount: 0,
lastFailureTime: null
};
// Persist state in DynamoDB after each transition
async function persistState(newState) {
await dynamo.put({
TableName: 'CircuitBreakerState',
Item: { serviceId: 'payment-service', ...newState }
}).promise();
}
async function loadState() {
const data = await dynamo.get({
TableName: 'CircuitBreakerState',
Key: { serviceId: 'payment-service' }
}).promise();
return data.Item || circuitBreakerState;
}
// The actual downstream call
async function callPaymentService(payload) {
const http = require('axios');
const response = await http.post('https://payment.example.com/charge', payload);
return response.data;
}
// Circuit breaker options
const options = {
errorThresholdPercentage: 50,
resetTimeout: 30000,
volumeThreshold: 10
};
// Create breaker with external state integration (simplified)
const breaker = new CircuitBreaker(callPaymentService, options);
breaker.fallback(() => ({ error: 'Payment service unavailable, order processed in offline mode' }));
exports.handler = async (event) => {
// Load state from DynamoDB and update breaker
const savedState = await loadState();
// Opossum doesn't natively restore state; you'd need to implement a wrapper.
// For brevity, assume the breaker is fresh per function invocation but uses external checks.
// In production, use a shared cache with TTL instead of per-invocation state load.
return breaker.fire(event.body);
};
Bu örnek, açıklık için tam entegrasyon. Uygulamada, ElastiCache Serverless kullanarak devre kesici durumunu senkronize etmeniz gerekir.
Yaklaşım 3: AWS Step Fonksiyonlları – Orkeasyon-Level Devre
Çok adımlı iş akışları için (örneğin, e-ticaret kontrolleri), AWS Step Functions bir devre kesiciyi devlet makinesi olarak modelleyebilir.TheETHFLT:2) Devlet bir karşı veya bayrak bir DynamoDB masasında depolanabilir. Başarısızlık sayarsa, iş akış yönlendirmesi bir geri dönüş yolundan geçebilir (örneğin, bir yönetici, manuel işleme için kuyruk).
Örnek: İki alttaban hizmeti çağıran bir Adım fonksiyonu. Başarısızlıktan sonra, bir DynamoDB sayacını arttırır.Bir sonraki her bir davetten önce, Adım Fonksiyonu karşı okur.Eğer 5'i aştıysa, iş akışı hemen geri çekilme yolunda bir devre kırılır.
Serverless-Specific Challenges and Solutions
- [FONT:0)Cold başlar:[Dönetici] Devre kırıcı devletin, hiçbir aktiviteden sonra devreyi otomatik olarak kapatabilmesi için kısa bir TTL ile dış durumu kullanması gerekir.
- [FONT:0)Koncurrency:[[DFLT:1] Birçok işlev örneği aynı anda kontrol ve güncelleme durumunu kontrol edebilir. iyimser kilitleme (DynamoDB durum ifadelerini) veya atomik art / aşağılama kalıpları kullanın.
- [FONT:0)Cost: [DÜDÜT:1] Her devlet kontrolü, DynamoDB'yi azaltmak için kısa bir expiry (e.g., 1 saniye) ile birlikte, aynı işlev örneği içinde, DinamoDB okur, ancak olaysal tutarlılığı kabul eder.
- [FONT:0)Timeout granularity: Lambda işlevleri en fazla 15 dakika boyunca iptal süresine sahip olmalıdır. Devre molası zamanları çok daha kısa olmalıdır (saniyeler) işlevi tutmaktan kaçınmak için.
Devre Breakers Kullanımının Faydaları
Avantajları temellerin ötesine uzanır. Sunucusuz bir bağlamda her faydayı keşfedin:
Geliştirilmiş Resilience - Cascading Başarısızlığı Önleme
Serverless zincirler kırılgandır.Eğer bir B çağrısı yaparsanız ve B C çağrıları başarısız olur, başarısızlık propagandası yapar. B'nin C çağrısına bir kaç başarısızlıktan sonra devresini açmanız için B'ye neden olur.
Hızlı Kurtarma – Kendi kendini kınayan El Kitabı
Bir devre açık olduğunda, başarısız hizmet geri dönüş süresi alır. Hiçbir istek gönderilir, geri dönme izin verir (örneğin, yeniden başlatılır, bir bellek sızdırır veya yeniden yapılandırılır). yarı açık devlet periyodik olarak hizmete girer.Bir kez otomatik olarak yanıt verir, devre kapanır.
Gelişmiş Kullanıcı Deneyimi - Grace Degradation
Bir genel “Server Hata” sayfasını veya dönüş yükleyicisini göstermek yerine, özelliğin basit bir versiyonunu veya arkadaşça mesajlarını geri döndürebilirsiniz. Örneğin, bir ürün tavsiye hizmeti bir devre kesici kullanabilir: Açık olduğunda, ürün sayfası tamamen başarısız olmaktan ziyade “Terkansızlar” gösterir.
Maliyet Tasarrufları - Gereksiz Invos
Serverless fiyatlandırma taleplere ve zamana dayanmaktadır. Bir alt uç hizmet başarısız olduğunda, bu çağrıları hemen başarısız olan her işleve (veya bu sonuçları bir süre içinde beklemede olan) geri yüklemeyi durdurur.
İşbirlikçi Devre Breakers için En İyi Uygulamalar
Bir devre kesiciyi uygulamak tek boyutlu bir etkinlik değildir. Bu uygulamaları sunucusuz bir ortamda en iyi şekilde kullanabilmek için kullanın.
Appropriate Başarısız Thresholds ve Timeouts
Örneğin, düşük çözünürlük hizmetiniz %99.9 oranında daha fazla performans gösterirse, her dakikadaki 5 başarısızlık eşi çok hassas olabilir (daha küçük blips sırasında açıklanabilir).Daha yüksek bir eşiğe başlayın (örneğin, 1 dakikadan fazla hata oranı) ve izleme verilerinin kullanımını ayarlamak için ayarlamanız gerekir. Zamanouts tipik yanıt süresinden biraz daha uzun olabilir, ancak fonksiyonunuzun genel zaman aralığından daha kısa olabilir.
Implement Fallback Mechanisms
Her açık-circuit isteğinin bir geri çekilmesi gerekir. Seçenekler şunları içerir:
- Erişim önbellekli veriler (ElastiCache, CloudFront veya bir veritabanı).
- Daha sonra işleme isteği (örneğin, SQS DLQ).
- Varsayılan bir değer veya statik yanıt geri dön.
- Özelliğin bozulan bir versiyonuna yeniden yollayın (örneğin, kişiselleşmeyi devre dışı bırak).
Sonbahar gerisi, özellikle de yazı için mümkün olan idempotent olmalıdır.
İzleme ve Giriş
Devre kesicinizi her devlet değişikliği ve başarısızlığı ölçümlemek için ayırın. CloudWatch Metriks (örneğin, devre açık sayma için özel ölçümler, yarı açık denemeler, geri yükleme kullanımı). Set alarmlar: Eğer bir devre uzun bir süre için açık kalırsa, bildirim işlemleri. Ayrıca hata kodu, vb. – to help debugging.
Diğer Resilience Desenlerle Birlikte Birleşin
- [FONT:0)Retry:[Dönetici:[Dönetici:0)[Dönetici:0)))[Dönetici:[Dönetici:0)))) Devre kesicisi, ancak üst üste ve jitter ile devre kırılmalıdır; bunun yerine, müşteri çağrısı yeniden bir yeniden deneme politikası ile kapatılır (örneğin, AWS SDK’lar inşa edilir).
- [FONT:0)Bulkhead:[Dönetici:[Dönetici:0)) Bulkhead:[Dönetici:[Dönetici: 0))) Cihazın diğer kısımlarını etkileyen bir işlemden kaynaklayın.
- [FONT:0) Zaman:[Dönetici:[Dönder:) Sürekli olarak, her zaman alt çağrılarda bir süre ayarlandığında – bu, molanın başarısızlığı penceresinden daha kısa.
- [FONT:0)Sağlık kontrol uç noktaları:[Dönetici:[Dönetici: 0) Bir arka plan süreci kullanın (örneğin, bir BulutWatch planlanan olay) periyodik olarak sağlık kontrolü uç noktası için.Eğer sağlık kontrolü başarısız olursa, önceden kesin olarak devreyi açın.
Devre Lanetinizin Başarısızlığı Test Et
Kaos mühendisliği arkadaşınızdır. AWS Fault Enjeksiyon Simulator (FIS) gibi araçları kullanarak alt uç hizmetlerinize başarısızlıklar enjekte etmek ve devre kesici davranışı gözlemleyebilmek için kullanın.
- Devre beklenen zaman çerçevesi içinde açılır.
- Sonbaharlar doğru şekilde çalışır.
- Devre, hatanın çözülmesinden sonra geri döner (yarısı kapalıdır).
- Sahte pozitifler normal yük aksakları altında meydana gelmez.
Aynaların üretiminin önemli olduğunu gösteren bir ortamda test etmek önemlidir. Beklenilen davranışı belgeleyin ve düzenli olarak tatbikatları çalıştırın.
TTL ile Dış Devlet Mağazasını Kullanın
Sunucusuz olarak, uzun bir süre boyunca yerel hafızaya güvenemezsiniz.Dörtücük, ElastiCache for Redis, or made service like Eureka. Set a Time-to-Live (TTL) on the state record so that if your function is inactive for a long period, the circuit automatically resets to closed. Bu, bir hizmet geri alındıktan sonra trafikten uzak bir yere kapanmasını önler.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Sunucusuz modern uygulamaların arka kemiği haline gelirken, Devre Breaker gibi direnç modelleri artık isteğe bağlı değildir - maliyet kontrolü, zaman ve kullanıcı memnuniyeti için gereklidir.Mantık makinesi, sunucusuz platformunuzun kısıtlamaları içinde doğru bir şekilde uygulayın (API Gateway, fonksiyon kodu veya Step Functions), ve izleme ve test için en iyi uygulamaları takip edebilirsiniz, başarısızlık altında ve manuel müdahale olmadan mükemmel bir şekilde iyi şekilde iyi şekilde iyi uygulamaları inşa edebilirsiniz.
Devre kesici modeli sadece dayanıklılık bulmacasının bir parçasıdır. Yeniden aşıklar, toplu kilitler, sağlık kontrolleri ve gerçekten sağlam sunucusuz mimariler oluşturmak için kapsamlı gözlemlenebilir.Küçük, yakından izleyin.