generelt er målet med skotmønsteret at undgå fejl i en del af et system for at tage hele systemet ned. Udtrykket kommer fra skibe, hvor et skib er opdelt i separate vandtætte rum for at undgå et enkelt skrogbrud for at oversvømme hele skibet; det vil kun oversvømme et Skott.
implementeringer af skotmønsteret kan tage mange former afhængigt af, hvilken slags fejl du vil beskytte systemet mod. Jeg vil kun diskutere den type fejl Hystriks håndtag i dette svar.
Jeg tror, at skotmønsteret blev populariseret af bogen Release It! af Michael T. Nygard.
hvad Hystrik løser
skottets implementering begrænser antallet af samtidige opkald til en komponent. På denne måde er antallet af ressourcer (typisk tråde), der venter på et svar fra komponenten, begrænset.
Antag, at du har en anmodningsbaseret applikation med flere gevind (f. eks. en typisk internetapplikation), der bruger tre forskellige komponenter, A, B og C. Hvis anmodninger om komponent C begynder at hænge, til sidst vil alle anmodningshåndteringstråde hænge på og vente på et svar fra C. Dette ville gøre applikationen helt ikke-lydhør. Hvis anmodninger til C håndteres langsomt, har vi et lignende problem, hvis belastningen er høj nok.implementering af skotmønsteret begrænser antallet af samtidige opkald til en komponent og ville have gemt applikationen i dette tilfælde. Antag, at vi har 30 anmodning om håndtering af tråde, og der er en grænse på 10 samtidige opkald til C. Derefter kan højst 10 anmodningshåndteringstråde hænge, når du ringer til C, de andre 20 tråde kan stadig håndtere anmodninger og bruge komponenter a og B.
Hystriks’ tilgange
Hystriks’ har to forskellige tilgange til skottet, trådisolering og semaforeisolering.
trådisolering
standardmetoden er at aflevere alle anmodninger til komponent C til en separat trådpulje med et fast antal tråde og ingen (eller en lille) anmodningskø.
Semaphore Isolation
den anden tilgang er at få alle opkaldere til at erhverve en tilladelse (med 0 timeout) før anmodninger til C. Hvis en tilladelse ikke kan erhverves fra semaforen, sendes opkald til C ikke igennem.
forskelle
fordelen ved trådpuljetilgangen er, at anmodninger, der sendes til C, kan timeout, noget der ikke er muligt, når du bruger semaforer.