obecně platí, že cílem přepážky vzor je, aby se zabránilo chyby v jedné části systému, aby se celý systém dolů. Termín pochází z lodí, kde je loď rozdělena do samostatných vodotěsných oddílů, aby se zabránilo jedinému porušení trupu, které zaplaví celou loď; zaplaví pouze jednu přepážku.
implementace vzoru přepážky může mít mnoho podob v závislosti na tom, před jakými chybami chcete systém chránit. V této odpovědi budu diskutovat pouze o typu chyb, které hystrix zpracovává.
myslím, že vzor přepážky byl popularizován knihou Release It! Michael T. Nygard.
Co Hystrix Řeší
přepážka provádění v Hystrix omezuje počet souběžných volání součásti. Tímto způsobem je omezen počet zdrojů (typicky vláken), které čekají na odpověď od komponenty.
Předpokládejme, že máte požadavek založené, multi threaded aplikace (například typické webové aplikace), který používá tři různé komponenty, A, B, a C. Pokud požadavky na komponentu C začnou viset, nakonec budou všechna vlákna pro zpracování požadavků viset a čekat na odpověď od C. To by způsobilo, že aplikace zcela nereaguje. Pokud se požadavky na C zpracovávají pomalu, máme podobný problém, pokud je zatížení dostatečně vysoké.
implementace vzoru přepážky Hystrix omezuje počet souběžných volání na komponentu a v tomto případě by aplikaci uložila. Předpokládejme, že máme 30 vláken pro zpracování požadavků a existuje limit 10 souběžných volání na C. Pak na 10 žádost manipulaci závity můžete pověsit při volání C, dalších 20 závity může ještě zvládnout požadavky a použití složek a a B.
Hystrix‘ přístupy
Hystrix‘ má dva různé přístupy k přepážce, závit izolace a semafor izolace.
izolace vlákna
standardní přístup je předat všechny požadavky komponentě C do samostatného fondu vláken s pevným počtem vláken a bez (nebo malé) fronty požadavků.
Semafor Izolace
druhý přístup je, aby všechny volající získat povolení (s 0 timeout) před žádostí o C. Pokud povolení nelze získat ze semaforu, volání na C nejsou předány.
Rozdíly
výhodou podprocesů přístup je, že požadavky, které jsou předány k C může být vypršel, něco, co není možné při použití semaforů.