Düzenle

Aracılığıyla paylaş


Devre Kesici düzeni

Azure

Uzak hizmete veya kaynağa bağlanırken, düzeltmek için gereken sürenin değişiklik gösterebileceği hataları işleyin. Bu düzen, bir uygulamanın kararlılığını ve dayanıklılığını artırabilir.

Bağlam ve sorun

Dağıtılmış bir ortamda, uzak kaynaklara ve hizmetlere yapılan çağrılar yavaş ağ bağlantıları, zaman aşımları veya kaynakların fazla iletilmesi veya geçici olarak kullanılamaması gibi geçici hatalar nedeniyle başarısız olabilir. Bu hatalar normalde kısa sürede kendilerini düzeltirler ve sağlam bir bulut uygulaması, Yeniden Deneme düzeni gibi bir strateji kullanarak hataları işlemeye hazırlıklı olmalıdır.

Ancak bazı durumlarda hatalar beklenmedik olaylardan kaynaklanır ve bu hataları düzeltmek çok daha fazla zaman alabilir. Bu hataların önem derecesi kısmi bağlantı kaybıyla bir hizmetin tamamen çökmesi arasında değişebilir. Bu gibi durumlarda, bir uygulamanın başarılı olma olasılığı düşük bir işlemi sürekli olarak yeniden denemesi anlamsız olabilir ve bunun yerine uygulamanın işlemin başarısız olduğunu hızla kabul etmesi ve bu hatayı uygun şekilde işlemesi gerekir.

Buna ek olarak, hizmet çok meşgulse sistemin bir bölümündeki hata zincirleme hatalara neden olabilir. Örneğin, bir hizmeti çağıran bir işlem zaman aşımı uygulayacak ve hizmet bu süre içinde yanıt veremediğinde hata iletisiyle yanıt verecek şekilde yapılandırılabilir. Ancak bu strateji, zaman aşımı süresi dolana kadar aynı işleme yönelik birçok eşzamanlı isteğin engellenmesine neden olabilir. Bu engellenen isteklerde bellek, iş parçacıkları, veritabanı bağlantıları ve benzeri önemli sistem kaynakları bulunabilir. Bu nedenle, bu kaynaklar tükenebilir ve sistemin aynı kaynakları kullanması gereken diğer büyük olasılıkla ilişkisiz kısımlarının başarısız olmasına neden olabilir. Böyle durumlarda, işlemin hemen başarısız olması ve hizmeti ancak başarılı olma olasılığı olduğunda çağırma girişiminde bulunması tercih edilebilir. Daha kısa bir zaman aşımının ayarlanması bu sorunun çözülmesine yardımcı olabilir, ancak hizmet isteği sonunda başarılı olsa bile zaman aşımı işlemi çoğu zaman başarısız olacak kadar kısa olmamalıdır.

Çözüm

Devre Kesici düzeni, uygulamanın başarısız olma olasılığı olan bir işlemi tekrar tekrar yürütmeye çalışmasını engelleyebilir. Hatanın düzeltilmesi beklenmeden devam etmesine izin verilir veya hatanın uzun süreceği saptanırken CPU döngüleri harcanır. Devre Kesici düzeni uygulamanın hatanın düzeltilip düzeltilmediğini saptamasını da sağlar. Sorun düzeltilmiş gibi görünüyorsa, uygulama işlemi çağırmayı deneyebilir.

Devre Kesici düzeninin amacı Yeniden Deneme düzeninden farklıdır. Yeniden Deneme düzeni uygulamanın başarılı olacağı beklentisiyle işlemi yeniden denemesini sağlar. Devre Kesici düzeni, uygulamanın büyük olasılıkla başarısız olacak olan bir işlemi gerçekleştirmesini engeller. Uygulama bu iki düzeni birleştirip bir devre kesici üzerinden işlemi çağırmak için Yeniden Deneme düzenini kullanabilir. Öte yandan, yeniden deneme mantığının devre kesici tarafından döndürülen özel durumlara duyarlı olması ve devre kesici hatanın geçici olmadığını gösteriyorsa yeniden denemeyi bırakması gerekir.

Devre kesici, başarısız olabilecek işlemler için ara sunucu gibi çalışır. Ara sunucu, gerçekleşen son hataların sayısını izlemeli ve işlemin devam etmesi için izin verme veya hemen bir özel durum döndürme kararını vermek için bu bilgileri kullanmalıdır.

Ara sunucu, elektrik devre kesicisinin işlevlerini taklit eden aşağıdaki durum değerleriyle bir durum makinesi olarak çalıştırılabilir:

  • Kapalı: Uygulamadan gelen istek işleme yönlendirilir. Ara sunucu son başarısızlıkların sayısını tutar ve işleme yönelik çağrı başarısız olursa ara sunucuda bu sayı bir artırılır. Son başarısızlıkların sayısı belirli bir süre içinde belirtilen eşiği aşarsa, ara sunucu Açık duruma getirilir. Bu noktada ara sunucu bir zaman aşımı süreölçeri başlatır ve bu süreölçerin süresi dolduğunda ara sunucu Yarı Açık durumuna yerleştirilir.

    Zaman aşımı zamanlayıcısının amacı, uygulamanın işlemi yeniden gerçekleştirmesine izin vermeden önce sisteme hataya neden olan sorunu düzeltmesi için zaman vermektir.

  • Açık: Uygulamadan gelen istek hemen başarısız olur ve uygulamaya bir özel durum döndürülür.

  • Yarı Açık: Uygulamadan gelen sınırlı sayıda isteğin geçmesine ve işlemi çağırmasına izin verilir. Bu istekler başarılı olursa, daha önce başarısızlığa neden olan hatanın düzeltildiği varsayılır ve devre kesici Kapalı duruma geçer (başarısızlık sayacı sıfırlanır). Herhangi bir istek başarısız olursa, devre kesici hatanın hala mevcut olduğunu varsayar, bu nedenle durumuna geri döner ve sisteme hatadan kurtulması için daha fazla süre tanımak için zaman aşımı zamanlayıcısını yeniden başlatır.

    Yarı Açık durum, kurtarılmakta olan bir hizmete aniden yoğun bir istek akışı olmasını önlemeye yarar. Hizmet kurtarılırken, kurtarma işlemi tamamlanana kadar sınırlı miktarda isteği destekleyebilir, ama kurtarma işlemi devam ederken yoğun bir iş akışı hizmetin zaman aşımına uğramasına veya yeniden başarısız olmasına neden olabilir.

Devre Kesici durumları

Şekilde, Kapalı durumu tarafından kullanılan başarısızlık sayacı zamana dayalıdır. Düzenli aralıklarla otomatik olarak sıfırlanır. Bu tasarım, devre kesicinin ara sıra hatalarla karşılaşırsa durumuna girmesini önlemeye yardımcı olur. Devre kesiciyi Açık duruma geçiren başarısızlık eşiğine ulaşılması için, belirtilen süre içinde belirtilen sayıda başarısızlık olması gerekir. Yarı Açık durumu tarafından kullanılan sayaç, işlemi çağırmaya yönelik başarılı girişimlerin sayısını kaydeder. Arka arkaya belirtilen sayıda işlem çağrısı başarılı olduktan sonra devre kesici Kapalı duruma geri döner. Çağrılardan herhangi biri başarısız olursa, devre kesici hemen Açık duruma geçer ve bir sonraki Yarı Açık duruma geçişinde başarı sayacı sıfırlanır.

Sistemin kurtarılması harici olarak işlenir; büyük olasılıkla başarısız bileşen geri yüklenir veya yeniden başlatılır ya da ağ bağlantısı onarılır.

Devre Kesici düzeni sistem bir hatadan kurtarılırken tutarlılık sağlar ve performans üzerindeki etkiyi en aza indirir. Başarısız olma olasılığı yüksek bir işleme yönelik isteği, işlemin zaman aşımına uğramasını veya asla geri dönmemesini beklemek yerine hızla reddederek sistemin yanıt süresini korumaya yardımcı olabilir. Devre kesici durumu her değiştiğinde bir olay oluşturuyorsa, bu bilgiler sistemin devre kesici tarafından korunan parçasının durumunu izlemek veya devre kesici Açık duruma geçtiğinde yöneticiyi uyarmak için kullanılabilir.

Düzen özelleştirilebilir ve olası başarısızlık türüne uyarlanabilir. Örneğin, bir devre kesiciye artan bir zaman aşımı zamanlayıcısı uygulayabilirsiniz. Devre kesiciyi başlangıçta birkaç saniye boyunca durumuna yerleştirebilirsiniz ve hata çözülmezse zaman aşımını birkaç dakikaya kadar artırın ve bu şekilde devam edin. Bazı durumlarda, Açık durumun hata döndürmesi veya özel durum oluşturması yerine, uygulama için anlamlı bir varsayılan değer döndürmek daha yaralı olabilir.

Not

Geleneksel olarak, devre kesiciler hata sayısı ve zaman aşımı süresi gibi önceden yapılandırılmış eşiklere bağımlıdır ve bu da belirleyici ama bazen yetersiz bir davranışa neden olur. Ancak yapay zeka ve ML kullanan uyarlamalı teknikler gerçek zamanlı trafik desenlerine, anomalilere ve geçmiş hata oranlarına göre eşikleri dinamik olarak ayarlayarak devre kesiciyi daha dayanıklı ve verimli hale getirir.

Sorunlar ve dikkat edilmesi gerekenler

Bu düzeni nasıl uygulayacağınıza karar verirken aşağıdaki noktaları dikkate almalısınız:

Özel durum işleme: Devre kesici aracılığıyla bir işlemi çağıran bir uygulama, işlem kullanılamıyorsa oluşturulan özel durumları işlemeye hazır olmalıdır. Özel durumların işlenme şekli uygulamaya özgü olacaktır. Örneğin, uygulama geçici olarak işlevselliğini düşürebilir, aynı görevi yerine getirmeyi veya aynı verileri almayı denemek üzere alternatif bir işlem çağırabilir ya da özel durumu kullanıcıya bildirir ve daha sonra yeniden denemesini ister.

Özel durum türleri: İstek birçok nedenden dolayı başarısız olabilir ve bazıları diğerlerinden daha ciddi bir hata türüne işaret edebilir. Örneğin, uzak bir hizmet kilitlendiği ve kurtarılması birkaç dakika süreceğinden veya hizmetin geçici olarak aşırı yüklenmesi nedeniyle zaman aşımı nedeniyle istek başarısız olabilir. Devre kesici oluşan özel durumların türlerini inceleyebilir ve bu özel durumların doğasına bağlı olarak stratejisini ayarlayabilir. Örneğin, devre kesiciyi durumuna döndürmek için hizmetin tamamen kullanılamaması nedeniyle oluşan hata sayısına kıyasla daha fazla zaman aşımı özel durumu gerekebilir.

İzleme: Devre kesici, hem başarısız hem de başarılı isteklerde net gözlemlenebilirlik sağlayarak operasyon ekiplerinin sistem durumunu değerlendirmesine olanak sağlamalıdır. Hizmetler arasında uçtan uca görünürlük için dağıtılmış izlemeyi kullanın.

Kurtarılabilirlik: Devre kesiciyi koruduğu işlemin olası kurtarma düzeniyle eşleşecek şekilde yapılandırmanız gerekir. Örneğin, devre kesici uzun süre Açık durumda kalırsa, başarısızlığa neden olan hata düzeltilmiş olsa bile özel durumlar oluşturabilir. Benzer biçimde, devre kesici Açık durumdan Yarı Açık duruma çok hızlı geçirilirse, dalgalanmalar ortaya çıkabilir ve uygulamaların yanıt sürelerini kısaltabilir.

Test başarısız işlemleri: durumunda, Yarı Açık durumuna ne zaman geçileceğini belirlemek için zamanlayıcı kullanmak yerine, devre kesici bunun yerine uzak hizmete veya kaynağa düzenli aralıklarla ping atarak yeniden kullanılabilir olup olmadığını belirleyebilir. Bu ping daha önce başarısız olan bir işlemi çağırma girişimi biçiminde olabilir veya Sistem Durumu Uç Nokta İzleme düzeni tarafından açıklandığı gibi uzak hizmet tarafından özel olarak hizmetin durumunu test etmek için sağlanmış özel bir işlem de kullanabilir.

El ile geçersiz kılma: Başarısız bir işlemin kurtarma süresinin son derece değişken olduğu bir sistemde, bir yöneticinin devre kesiciyi kapatmasını (ve hata sayacını sıfırlamasını) sağlayan bir el ile sıfırlama seçeneği sağlamak yararlı olur. Benzer şekilde, devre kesici tarafından korunan işlem geçici olarak kullanılamıyorsa, yönetici devre kesiciyi Açma durumuna zorlayabilir (ve zaman aşımı zamanlayıcısını yeniden başlatabilir).

Eşzamanlılık: Aynı devre kesiciye bir uygulamanın çok sayıda eşzamanlı örneği tarafından erişilebilir. Uygulama sırasında eş zamanlı istekler engellenmemeli veya bir işleme yapılan çağrıya aşırı ek yük getirilmemelidir.

Kaynak farklılaştırma: Birden çok temel alınan bağımsız sağlayıcı olabilirse, tek bir kaynak türü için tek bir devre kesici kullanırken dikkatli olun. Örneğin, birden çok parça içeren bir veri deposunda, bir parça tümüyle erişilebilir durumdayken diğeri geçici bir sorunla karşılaşmış olabilir. Bu senaryolardaki hata yanıtları birleştirilirse, uygulama başarısız olma olasılığı yüksek bile olsa bazı parçalara erişmeyi deneyebilir ve bu arada başarılı olma olasılığı yüksek bile olsa diğer parçalara erişim engellenebilir.

Hızlandırılmış devre kesme: Bazen bir hata yanıtı, devre kesicinin hemen takılması ve minimum süre boyunca takılı kalması için yeterli bilgi içerebilir. Örneğin, paylaşılan aşırı yüklenmiş bir kaynaktan gelen hata yanıtı hemen yeniden denemenin önerilmediğini ve uygulamanın yeniden denemeden önce birkaç dakika beklemesi gerektiğini gösteriyor olabilir.

Çok bölgeli dağıtımlar: Devre kesici tek veya çok bölgeli dağıtımlar için tasarlanabilir. İkincisi, genel yük dengeleyiciler veya denetimli yük devretme, gecikme süresi iyileştirme ve mevzuat uyumluluğu sağlayan özel bölge algılayan devre kesme stratejileri kullanılarak uygulanabilir.

Service mesh devre kesiciler: Devre kesiciler uygulama katmanında veya çapraz kesme, soyutlanmış bir özellik olarak uygulanabilir. Örneğin, hizmet kafesleri genellikle sepet veya uygulama kodunu değiştirmeden tek başına bir özellik olarak devre kesmeyi destekler.

Not

Bir hizmet istemciyi daraltıyorsa HTTP 429 (Çok Fazla İstek) veya hizmet şu anda kullanılamıyorsa HTTP 503 (Hizmet Kullanılamıyor) döndürebilir. Yanıt, gecikmenin beklenen süresi gibi ek bilgiler içerebilir.

Başarısız istekleri yeniden yürütme: durumunda, devre kesici hızlı bir şekilde başarısız olmak yerine her isteğin ayrıntılarını günlüğe kaydedebilir ve uzak kaynak veya hizmet kullanılabilir olduğunda bu isteklerin yeniden oynatılması için düzenleme yapabilir.

Dış hizmetlerde uygunsuz zaman aşımları: Devre kesici, uygulamaları uzun bir zaman aşımı süresiyle yapılandırılan dış hizmetlerde başarısız olan işlemlerden tam olarak koruyamayabilir. Zaman aşımı çok uzunsa, devre kesicinin işlemin başarısız olduğunu belirtebilmesi için devre kesici çalıştıran bir iş parçacığı uzun bir süre boyunca engellenebilir. Bu süre içinde, birçok başka uygulama örneği de devre kesici aracılığıyla hizmeti çağırmayı deneyebilir ve tümü başarısız olana kadar çok sayıda iş parçacığını hareketsiz bırakabilir.

İşlem çeşitlendirmesine uyarlanabilirlik: Devre kesiciler sunucusuzdan kapsayıcılı iş yüklerine kadar soğuk başlatma ve ölçeklenebilirlik gibi faktörlerin hata işlemeyi etkilediği farklı işlem ortamlarını dikkate almalıdır. Uyarlamalı yaklaşımlar, işlem türüne göre stratejileri dinamik olarak ayarlayarak heterojen mimariler arasında dayanıklılık sağlayabilir.

Bu düzenin kullanılacağı durumlar

Bu düzeni kullanarak:

  • Bu işlemlerin başarısız olma olasılığı yüksekse, uzak hizmet veya paylaşılan bir kaynağa erişim isteklerinin aşırı çağrılarını durdurarak basamaklı hataları önlemek için.
  • Gerçek zamanlı hata sinyallerine göre trafiği akıllı bir şekilde yönlendirerek çok bölgeli dayanıklılığı geliştirmek.
  • Yavaş bağımlılıklara karşı koruma sağlamak, hizmet düzeyi hedeflerinize (SLO' lar) ayak uydurmanıza yardımcı olmak ve yüksek gecikme süreli hizmetlerden kaynaklanan performans düşüşlerini önlemek için.
  • Aralıklı bağlantı sorunlarını işlemek ve dağıtılmış ortamlardaki istek hatalarını azaltmak için.

Bu düzenin şunlar için kullanılması önerilmez:

  • Uygulamanın bellek içi veri yapısı gibi yerel özel kaynaklarına erişimi işlemek için. Bu ortamda, devre kesici kullanmak sisteminize ek yük getirebilir.
  • Uygulamalarınızın iş mantığında özel durumları işlemeye bir alternatif olarak.
  • İyi bilinen yeniden deneme algoritmaları yeterli olduğunda ve bağımlılıklarınız yeniden deneme mekanizmalarıyla başa çıkmak için tasarlandıklarında. Bu durumda uygulamanızda bir devre kesici uygulamak sisteminize gereksiz karmaşıklık katabilir.
  • Bir devre kesicinin sıfırlanması beklenirken kabul edilemez gecikmeler olabilir.
  • İleti temelli veya olay odaklı bir mimariniz varsa, bunlar genellikle başarısız iletileri el ile veya ertelenmiş işleme için Teslim Edilemeyen İleti Kuyruğuna (DLQ) yönlendirir. Genellikle bu tasarımlarda uygulanan yerleşik hata yalıtımı ve yeniden deneme mekanizmaları genellikle yeterlidir.
  • Hata kurtarma, genel yük dengeleyicilerdeki veya hizmet ağlarındaki sistem durumu denetimleri gibi altyapı veya platform düzeyinde yönetiliyorsa devre kesiciler gerekli olmayabilir.

İş yükü tasarımı

Bir mimar, Azure İyi Tasarlanmış Çerçeve yapılarında ele alınan hedefleri ve ilkeleri ele almak için devre kesici deseninin iş yükünün tasarımında nasıl kullanılabileceğini değerlendirmelidir. Örneğin:

Yapı Taşı Bu desen sütun hedeflerini nasıl destekler?
Güvenilirlik tasarımı kararları, iş yükünüzün arızaya karşı dayanıklı olmasına ve bir hata oluştuktan sonra tamamen çalışır duruma gelmesini sağlamaya yardımcı olur. Bu düzen, hatalı bir bağımlılığın aşırı yüklenmesini önler. Bu deseni, iş yükünde düzgün bir düşüş tetiklemesi için de kullanabilirsiniz. Devre kesiciler genellikle hem kendini koruma hem de kendi kendini iyileştirme sağlamak için otomatik kurtarma ile bir araya getirilir.

- RE:03 Hata modu analizi
- RE:07 Geçici hatalar
- RE:07 Kendini koruma
Performans Verimliliği , ölçeklendirme, veri ve kod iyileştirmeleri aracılığıyla iş yükünüzün talepleri verimli bir şekilde karşılamasını sağlar. Bu düzen, bağımlılık kurtarma sırasında aşırı kaynak kullanımına neden olabilecek ve kurtarma girişiminde bulunan bir bağımlılıkta performansı aşırı yükleyebilecek yeniden deneme hata yaklaşımını önler.

- PE:07 Kod ve altyapı
- PE:11 Canlı sorunlar yanıtları

Herhangi bir tasarım kararında olduğu gibi, bu desenle ortaya konulabilecek diğer sütunların hedeflerine karşı herhangi bir dengeyi göz önünde bulundurun.

Bu düzeni uygularken aşağıdaki düzenler de kullanışlı olabilir:

  • Güvenilir web uygulaması deseni , bulutta yakınsanan web uygulamalarına devre kesici deseninin nasıl uygulanacağını gösterir.

  • Yeniden deneme düzeni. Hizmete veya ağa bağlanmayı denediğinde daha önce başarısız olan bir işlemi saydam bir şekilde yeniden denemesini sağlayarak, uygulamanın beklenen, geçici hataları nasıl işleyebileceğini açıklar.

  • Sistem Durumu Uç Noktası İzleme düzeni. Devre kesici, hizmet tarafından sunulan bir uç noktaya istek göndererek hizmetin durumunu test edebilir. Hizmetin durumunu gösteren bilgileri döndürmesi gerekir.