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:
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'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 bölme, diş izolasyonu ve semafor izolasyonu için iki farklı yaklaşımı vardır.
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.
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 .
İş 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.
İş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.