Robustifisering Av Side Effects
Introduksjon
Når vi har side effects av hendelser i systemet er det viktig at dette gjøres på en robust og resilient måte. I dag utføres alle side effects i samme context som den opprinnelige hendelsen, noe som kan skape utfordringer med inkonsistens og feil. Side effects er en viktig del av systemdesign, og det er viktig å gjøre dem på en måte som garanterer at de blir utført på en robust og resilient måte.
Eksempler på slike side effects er:
- Utsending av korrespondanse
- Arkivering
- Andre side effects som trenger å bli utført i en asynkront måte
Dette er side effects som kan (og bør) kjøres asynkront utenfor context av opprinnelig hendelse. Da er det mulig å gjøre dette både robust og resilient ved å bruke "køer" og retries.
Løsningsforslag
I stedet for å gjøre arkivering, utsending av korrespondanse og andre side effects direkte i context av hendelsen så bør vi heller publisere eventer om hendelsen som har skjedd, f.eks:
- "Skifteattest mottatt"
- "Arving lagt til"
- Oserv...
SÃ¥ kan man registrere event handlere til disse eventene for hver av side effectene som trenger informasjonen, f.eks:
- /arkiv/eventhandler
- /korrespondanse/eventhandler/
- Oserv...
Dette kan godt være event handlere i samme tjeneste som publiserte opprinnelig event, da det er oppdelingen av ansvar og funksjonaliteten i eventing-systemet vi er ute etter her.
Hvis vi benytter eventsystemet i altinn vil eventene automatisk bli retried etter gitte regler inntil en viss tid/antall forsøk og deretter bli lagt i en DLQ dersom det oppstår feil i prosessering av disse. På denne måte kan vi gi en bedre garanti på at side-effect "før eller senere" vil bli utført, og i de aller fleste tilfeller i løpet av millisekunder eller sekunder.
Fordelene med eventing
Eventing er en måte å kommunisere mellom systemer på, og det har flere fordeler:
- Robusthet: Eventing gjør det mulig å gjøre side effects på en robust måte, da eventene kan bli retried etter gitte regler.
- Resiliens: Eventing gjør det mulig å gjøre side effects på en resilient måte, da eventene kan bli lagt i en DLQ dersom det oppstår feil i prosessering av disse.
- Skalabilitet: Eventing gjør det mulig å gjøre side effects på en skala, da eventene kan bli publisert til flere systemer samtidig.
Ulemper med eventing
Eventing har også noen ulemper:
- Komplexitet: Eventing kan være komplisert å implementere, da det krever en god forståelse av eventing og event handling.
- Tid: Eventing kan være tidskrævende å implementere, da det krever en god forståelse av eventing og event handling.
Konklusjon
I konklusjon kan vi si at eventing er en god måte å gjøre side effects på, da det gir en bedre garanti på at side-effect "før eller senere" vil bli utført. Eventing er en robust og resilient måte å gjøre side effects på, og det er en god måte å gjøre dem på en skala.
Eksempler på event handling
Eksempler på event handling er:
- /arkiv/eventhandler
- /korrespondanse/eventhandler/
- Oserv...
Dette kan godt være event handlere i samme tjeneste som publiserte opprinnelig event, da det er oppdelingen av ansvar og funksjonaliteten i eventing-systemet vi er ute etter her.
Eksempler på event handling i altinn
Eksempler på event handling i altinn er:
- /arkiv/eventhandler
- /korrespondanse/eventhandler/
- Oserv...
Dette kan godt være event handlere i samme tjeneste som publiserte opprinnelig event, da det er oppdelingen av ansvar og funksjonaliteten i eventing-systemet vi er ute etter her.
Eksempler på event handling i andre systemer
Eksempler på event handling i andre systemer er:
- /arkiv/eventhandler
- /korrespondanse/eventhandler/
- Oserv...
Dette kan godt være event handlere i samme tjeneste som publiserte opprinnelig event, da det er oppdelingen av ansvar og funksjonaliteten i eventing-systemet vi er ute etter her.
Se også
- #1020 for mer detaljer og lenker til teori.
Spørsmål og svar
1. Hva er side effects?
Side effects er hendelser som skjer i systemet som følge av en opprinnelig hendelse. Eksempler på side effects er utsending av korrespondanse og arkivering.
2. Hva er robustifisering av side effects?
Robustifisering av side effects er en måte å gjøre side effects på en robust og resilient måte. Dette innebærer å gjøre side effects på en måte som garanterer at de blir utført på en robust og resilient måte.
3. Hva er eventing?
Eventing er en måte å kommunisere mellom systemer på. Det innebærer å publisere eventer om hendelser som skjer i systemet.
4. Hva er event handling?
Event handling er en måte å håndtere eventer som blir publisert i systemet. Det innebærer å registrere event handlere til eventene som trenger informasjonen.
5. Hva er DLQ?
DLQ (Dead Letter Queue) er en kø som inneholder eventer som ikke kunne bli behandlet på grunn av feil i prosesseringen.
6. Hva er retried?
Retried er en prosess hvor eventene blir publisert igjen etter en viss tid/antall forsøk hvis de ikke kunne bli behandlet på grunn av feil i prosesseringen.
7. Hva er skalabilitet?
Skalabilitet er en måte å gjøre side effects på en skala. Det innebærer å gjøre side effects på en måte som lar dem bli utført på en skala.
8. Hva er robusthet?
Robusthet er en måte å gjøre side effects på en robust måte. Det innebærer å gjøre side effects på en måte som garanterer at de blir utført på en robust måte.
9. Hva er resiliens?
Resiliens er en måte å gjøre side effects på en resilient måte. Det innebærer å gjøre side effects på en måte som lar dem bli utført på en resilient måte.
10. Hva er eventing i altinn?
Eventing i altinn er en måte å kommunisere mellom systemer på i altinn. Det innebærer å publisere eventer om hendelser som skjer i systemet.
11. Hva er event handling i altinn?
Event handling i altinn er en måte å håndtere eventer som blir publisert i systemet i altinn. Det innebærer å registrere event handlere til eventene som trenger informasjonen.
12. Hva er DLQ i altinn?
DLQ (Dead Letter Queue) i altinn er en kø som inneholder eventer som ikke kunne bli behandlet på grunn av feil i prosesseringen i altinn.
13. Hva er retried i altinn?
Retried i altinn er en prosess hvor eventene blir publisert igjen etter en viss tid/antall forsøk hvis de ikke kunne bli behandlet på grunn av feil i prosesseringen i altinn.
14. Hva er skalabilitet i altinn?
Skalabilitet i altinn er en måte å gjøre side effects på en skala i altinn. Det innebærer å gjøre side effects på en måte som lar dem bli utført på en skala.
15. Hva er robusthet i altinn?
Robusthet i altinn er en måte å gjøre side effects på en robust måte i altinn. Det innebærer å gjøre side effects på en måte som garanterer at de blir utført på en robust måte.
16. Hva er resiliens i altinn?
Resiliens i altinn er en måte å gjøre side effects på en resilient måte i altinn. Det innebærer å gjøre side effects på en måte som lar dem bli utført på en resilient måte.
Se også
- #1020 for mer detaljer og lenker til teori.