co to jest wzór Grodzi używany przez Hystrix?

ogólnie rzecz biorąc, celem wzoru grodziowego jest uniknięcie usterek w jednej części systemu, aby zniszczyć cały system. Termin pochodzi od statków, w których statek jest podzielony na oddzielne przedziały wodoszczelne, aby uniknąć uszkodzenia pojedynczego kadłuba, aby zalać cały statek; zaleje tylko jedną przegrodę.

implementacje wzoru grodziowego mogą przybierać różne formy w zależności od rodzaju usterek, przed którymi chcesz chronić system. W tej odpowiedzi omówię tylko rodzaj usterek, z którymi Hystrix ma do czynienia.

myślę, że wzór Grodzi został spopularyzowany przez książkę Release It! autor: Michael T. Nygard.

co rozwiązuje Hystrix

implementacja w hystrix ogranicza liczbę jednoczesnych wywołań komponentu. W ten sposób liczba zasobów (zazwyczaj wątków) oczekujących na odpowiedź z komponentu jest ograniczona.

Załóżmy, że masz wielowątkową aplikację opartą na żądaniach (na przykład typową aplikację internetową), która używa trzech różnych komponentów, A, B i C. Jeśli żądania do komponentu C zaczną się zawieszać, ostatecznie wszystkie wątki obsługi żądań będą się zawieszać w oczekiwaniu na odpowiedź od C. spowoduje to, że aplikacja nie będzie reagować. Jeśli żądania do C są obsługiwane powoli, mamy podobny problem, jeśli obciążenie jest wystarczająco wysokie.

implementacja wzorca gródź hystrix ogranicza liczbę równoczesnych wywołań do komponentu i w tym przypadku zapisałaby aplikację. Załóżmy, że mamy 30 wątków obsługi żądań i istnieje limit 10 jednoczesnych wywołań do C. Wtedy co najwyżej 10 wątków obsługi żądań może zawiesić się podczas wywoływania C, pozostałe 20 wątków może nadal obsługiwać żądania i używać komponentów A I B.

hystrix’ podejścia

Hystrix’ ma dwa różne podejścia do Grodzi, izolację wątków i izolację semaforów.

Izolacja wątków

standardowym podejściem jest przekazanie wszystkich żądań do komponentu C do oddzielnej puli wątków o ustalonej liczbie wątków i braku (lub małej) kolejki żądań.

Izolacja semaforów

inne podejście polega na tym, aby wszyscy wywołujący uzyskali pozwolenie (z 0 timeoutem) przed żądaniami do C. Jeśli nie można uzyskać zezwolenia z semafora, wywołania do C nie są przekazywane.

różnice

zaletą podejścia thread pool jest to, że żądania przekazywane do C mogą zostać przekroczone, co nie jest możliwe przy użyciu semaforów.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.