Hystrix tarafından kullanılan Bulkhead Pattern nedir?


104

Karmaşık dağıtılmış sistemlerde gecikme ve hata toleransı için bir Netflix API olan Hystrix, iş parçacığı yalıtımı için Bulkhead Pattern tekniğini kullanır . Birisi lütfen detaylandırabilir mi?

Yanıtlar:


194

Genel

Genel olarak, perde modelinin amacı, sistemin bir bölümündeki arızalardan kaçınarak tüm sistemi devreden çıkarmaktır. Bu terim, bir geminin tüm gemiyi su basması için tek bir gövde çatlağından kaçınmak için ayrı su geçirmez bölmelere bölündüğü gemilerden gelir; sadece bir bölmeyi sular altında bırakacaktır.

Perde modelinin uygulamaları, sistemi ne tür hatalardan korumak istediğinize bağlı olarak birçok şekilde olabilir. Bu cevapta sadece Hystrix'in ele aldığı hata türlerini tartışacağım.

Bence bölme düzeni, Release It! Kitabı tarafından popüler hale getirildi . Michael T. Nygard tarafından.

Hystrix Ne Çözer?

Hystrix'teki bölme uygulaması, bir bileşene yapılan eşzamanlı çağrıların sayısını sınırlar . Bu şekilde, bileşenden yanıt bekleyen kaynakların (tipik olarak iş parçacıkları) sayısı sınırlıdır.

A , B ve C olmak üzere üç farklı bileşen kullanan istek tabanlı, çok iş parçacıklı bir uygulamanız (örneğin tipik bir web uygulaması) olduğunu varsayalım . C bileşenine yönelik istekler askıda kalmaya başlarsa, sonunda tüm istek işleme iş parçacıkları C'den bir yanıt beklerken askıda kalacaktır . Bu, uygulamayı tamamen yanıt vermez hale getirir. C'ye yapılan istekler yavaş işlenirse, yük yeterince yüksekse benzer bir sorunla karşılaşırız.

Hystrix'in bölme modelinin uygulanması, bir bileşene yapılan eşzamanlı çağrıların sayısını sınırlar ve bu durumda uygulamayı kurtarırdı. 30 istek işleme iş parçacığımız olduğunu ve C'ye 10 eşzamanlı çağrı sınırı olduğunu varsayalım . Daha sonra C'yi çağırırken en fazla 10 istek işleme iş parçacığı askıda kalabilir , diğer 20 iş parçacığı hala istekleri işleyebilir ve A ve B bileşenlerini kullanabilir. .

Hystrix'in yaklaşımları

Hystrix'in bölme, diş izolasyonu ve semafor izolasyonu için iki farklı yaklaşımı vardır.

Diş İzolasyonu

Standart yaklaşım, tüm talepleri C bileşenine teslim etmektir. sabit sayıda iş parçacığı ve hiç (veya küçük) bir istek kuyruğu olmayan ayrı bir iş parçacığı havuzuna teslim etmektir.

Semafor İzolasyonu

Diğer yaklaşım, tüm arayanların C'ye yapılan taleplerden önce bir izin (0 zaman aşımı ile) almasını sağlamaktır. . Semafordan izin alınamıyorsa, C'ye yapılan çağrılar geçilmez .

Farklılıklar

İş parçacığı havuzu yaklaşımının avantajı, C'ye iletilen isteklerin zaman aşımına uğrayabilmesidir; bu, semafor kullanırken mümkün olmayan bir şeydir.


10
Ek olarak, orijinal Hystrix wiki'de şimdi her iki yaklaşımın ayrıntılı bir açıklaması var: github.com/Netflix/Hystrix/wiki/How-it-Works
Dmitry

1
devre kesici ve bölme arasındaki fark nedir?
voipp

4
@voipp devre kesiciler oldukça farklı bir şeydir. Bir hizmetin sağlıksız bir durumda olduğunu algılarlar ve arayanları sağlıksız hizmeti aramadıkları, bunun yerine hizmet tekrar düzelene kadar bir hata kodu döndürdükleri "hızlı hata" durumuna geçirirler. Bu, sağlıksız hizmetin kurtarılabilmesi için aşırı yüklenmesini önler ve arayanlar yavaşlamadığından basamaklı hataları önler.
K Erlandsson

1

İşte Netflix Hystrix'ten esinlenen Resilience4j'deki bölme için çalışma zamanı açıklamasına sahip iyi bir örnek .

Aşağıdaki örnek konfigürasyonlar biraz kullanım netliği sağlayabilir.

Örnek konfigürasyonlar: Herhangi bir zamanda maksimum 5 eşzamanlı aramaya izin verin. Diğer aramaları, işlem içi 5 eşzamanlı bitişten biri veya en fazla 2 saniyeye kadar bekletin.

Fikir, hiçbir sisteme tüketebileceklerinden daha fazla yük yüklememektir. Gelen yük tüketimden fazlaysa, makul bir süre bekleyin veya sadece zaman aşımını bekleyin ve alternatif yola gidin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.