Patró de tallacircuit
| Tipus | behavioral pattern (en) |
|---|---|
| Més informació | |
| Stack Exchange | Etiqueta |
|
| |
El patró de tallacircuit (en anglès circuit breaker) és un patró de disseny de programari utilitzat per millorar la resiliència dels sistemes distribuïts. La seva funció principal és detectar fallades en serveis externs i evitar que una aplicació intenti realitzar operacions destinades a fallar, protegint els recursos del sistema i evitant la saturació de la xarxa per peticions inútils.
El patró va ser popularitzat per Michael T. Nygard al seu llibre Release It! Design and Deploy Production-Ready Software (The Pragmatic Bookshelf, 2007), on el descriu com una eina essencial per construir aplicacions de producció robustes davant de fallades en cascada. En el context de la programació asíncrona amb Python, el patró s'aplica com a complement dels mecanismes de temps d'espera (timeout) en arquitectures de microserveis: quan un servei tarda sistemàticament més del temps permès, el tallacircuit evita que el bucle d'esdeveniments quedi saturat de peticions condemnades a fallar.[1]
Estats
[modifica]Aquest mecanisme actua com un embolcall (wrapper) al voltant de les crides de xarxa i opera mitjançant una màquina d'estats:[2]
- Tancat (Closed): L'estat normal de funcionament. Les peticions s'envien al servei extern. Si el nombre de fallades supera un llindar determinat en un temps concret, el circuit passa a l'estat obert.
- Obert (Open): El sistema rebutja immediatament totes les crides sense intentar contactar amb el servei, retornant un error ràpid (fail-fast). Això dóna temps al servei remot per recuperar-se de la sobrecàrrega.
- Mig obert (Half-Open): Després d'un interval de repòs, el sistema permet el pas d'un nombre limitat de peticions de prova. Si tenen èxit, el circuit es torna a tancar; si fallen, torna a l'estat obert.
Aquest patró és vital en arquitectures de microserveis, ja que evita que el bucle d'esdeveniments de l'aplicació principal quedi bloquejat esperant respostes de serveis caiguts, garantint una degradació controlada del servei.
Referències
[modifica]- ↑ Nygard, Michael T. Release It! Design and Deploy Production-ReadySoftware. 2a. The Pragmatic Bookshelf, 2018. ISBN 9781680502398.
- ↑ Fowler, Matthew. Python Concurrency with asyncio. Manning Publications, 2022, p. 261-265. ISBN 9781617298660.