Anbefalinger for utvikling av bakgrunnsjobber
Gjelder denne Power Platform Well-Architected Reliability-sjekklisteanbefalingen:
RE:05 | Øk fleksibiliteten av arbeidsbelastningen ved å implementere feilhåndtering og håndtering av midlertidige feil. Bygg funksjoner i løsningen for å håndtere komponentfeil og midlertidige feil. |
---|
Denne veiledningen beskriver anbefalingene for utvikling av bakgrunnsjobber. Bakgrunnsjobber kjører automatisk uten behov for brukersamhandling. Mange programmer krever bakgrunnsjobber som kjører uavhengig av brukergrensesnittet.
Noen eksempler på bakgrunnsjobber omfatter satsjobber, tunge prosessoppgaver og prosesser som kjører lenge, for eksempel arbeidsflyter. Programmet starter jobben og behandler interaktive forespørsler fra brukere.
Et program må for eksempel kanskje generere et sammendrag og trekke ut sentiment- og nøkkelpunkter fra dokumenter som brukere laster opp. En bakgrunnsjobb kan utføres for å kjøre KI-handlingene og lagre sammendraget og nøkkelpunktene i databasen. Brukeren trenger ikke vente på at prosessen er fullført. Som et annet eksempel kan en bruker sende inn et utgiftskrav, som starter en bakgrunnsarbeidsflyt som behandler utgiftskravet og sender det til godkjenning. Brukeren kan fortsette å sende inn en annen utgiftskrav eller la programmet være mens bakgrunnsjobben kjører. Når bakgrunnsjobben er fullført, sendes det en e-postmelding til brukeren for å bekrefte at utgiftskravet er sendt til godkjenning.
Bakgrunnsjobber bidrar til å redusere belastningen i brukergrensesnittet for programmet, noe som forbedrer tilgjengeligheten og reduserer interaktiv svartid.
Viktige utformingsstrategier
Hvis du vil velge hvilken oppgave som skal utformes som en bakgrunnsjobb, må du vurdere om oppgaven kjører uten brukermedvirkning, og om grensesnittet må vente til oppgaven er fullført. Oppgaver som krever at brukeren eller brukergrensesnittet venter mens de kjører, er vanligvis ikke riktige bakgrunnsjobber.
Typer bakgrunnsjobber
Her er noen eksempler på bakgrunnsjobber:
Ressurstunge jobber som det tar lang tid å fullføre, for eksempel kjøre en serie transaksjoner.
Satsjobber, for eksempel oppdateringer om natten eller planlagt behandling.
Arbeidsflyter som kjører lenge, for eksempel ordreoppfyllelse eller klargjøring av tjenester og systemer.
Arbeidsflyter som krever asynkront samarbeid, for eksempel godkjenninger.
Behandling av sensitive data som overfører oppgaven til en sikrere plassering for behandling. Det kan for eksempel hende at du ikke vil behandle sensitive data i en nettapp. I stedet kan du bruke et mønster, for eksempel Gatekeeper-mønsteret, til å overføre dataene til en isolert bakgrunnsprosess som har tilgang til beskyttet lagringsplass.
Utløsere
Start bakgrunnsjobber med følgende:
Hendelsesdrevne utløsere: En hendelse, enten en brukerhandling i programmet eller en hendelse som oppstår mot en datakilde, utløser oppgaven.
Tidsplandrevne utløsere: En tidsplan som er basert på en tidtaker starter oppgaven. Jobben kan planlegges regelmessig eller for én enkelt kjøring.
Hendelsesdrevne utløsere
En handling utløser en hendelsesdrevet aktivering som starter bakgrunnsoppgaven. Eksempler på hendelsesdrevne utløsere omfatter følgende:
Brukergrensesnittet eller en annen jobb utløser bakgrunnsjobben og sender data fra den utførte handlingen til bakgrunnsjobben. En bruker sender for eksempel et utgiftskrav via et skjema, og skjemadetaljene sendes til bakgrunnsjobben for behandling.
Brukergrensesnittet eller en annen jobb lagrer eller oppdaterer en verdi som er i lagringsplass. Bakgrunnsjobben overvåker lagringsplassen og registrerer endringer, for eksempel at nye verdier legges til eller at eksisterende verdier endres, og bakgrunnsjobben utløses basert på denne endringen.
Brukergrensesnittet eller en annen jobb ber om det til et endepunkt, for eksempel en HTTPS-URI eller en API som eksponeres som en nettjeneste. Som en del av forespørselen overfører brukergrensesnittet eller jobben dataene som bakgrunnsoppgaven krever. Endepunktet eller nettjenesten starter bakgrunnsoppgaven, som bruker dataene som inndata.
Andre eksempler på hendelsesdrevne utløsere inkluderer et skjema som sendes inn i et program, en ny rad som legges til i datalageret, et utløseruttrykk i en agent som starter et emne som kaller en flyt, verdien til et felt som endres i datalageret, en e-post med et bestemt emne eller fra en bestemt avsender som kommer til innboksen, og en fil som lastes opp til en fillagringsplassering.
Bruk utløserbetingelser til å effektivisere arbeidsflytene og redusere antall unødvendige kjøringer. Utløserbetingelser definerer flere betingelser som må oppfylles før en arbeidsflyt utløses.
Merk
Sørg for at du bruker utløserbetingelser for å hindre uendelige sløyfer hvis du som en del av arbeidsflyten endrer datakilde som starter arbeidsflyten. Programmet kan for eksempel endre felter i en Microsoft Dataverse-tabellrad, og arbeidsflyten utfører flere spørringer basert på de endrede feltene, noe som ytterligere endrer den samme raden. Bruk utløserbetingelser til å starte arbeidsflyten bare når felter som endres av programmet, oppdateres, men ikke andre felter.
Tidsplandrevne utløsere
En selvutløsning utløser en tidsplandrevet aktivering som starter bakgrunnsoppgaven. Eksempler på tidsplandrevne utløsere omfatter følgende:
En bakgrunnsjobb kjører daglig eller ukentlig og utfører et sett med handlinger.
En separat prosess eller et program starter en selvutløser som starter bakgrunnsoppgaven etter en tidsforsinkelse eller på et bestemt tidspunkt.
Andre eksempler på oppgaver som passer til planleggingsdrevet aktivering, er satsbehandlingsrutiner (f.eks. oppdatering av relaterte produktlister for kunder basert på den nylige virkemåten), rutinemessige databehandlingsoppgaver (f.eks. generere akkumulerte resultater), dataanalyse for daglige rapporter, opprydding av dataoppbevaring og kontroller av datakonsekvens.
Returner resultater
Bakgrunnsjobber kjører asynkront i en separat prosess fra brukergrensesnittet eller prosessen som startet bakgrunnsjobben. Ideelt sett er bakgrunnsjobber start og glemme-operasjoner. Fremdriften for kjøretid har ikke innvirkning på brukergrensesnittet eller oppkallsprosessen, noe som betyr at oppkallsprosessen ikke venter på at oppgavene skal fullføres. Brukergrensesnittet og oppkallsprosessen oppdager ikke når oppgaven er ferdig.
Hvis du trenger en bakgrunnsoppgave for å kommunisere med den oppringeroppgaven for å angi fremdrift eller fullføring, må du implementere en mekanisme som følgende:
Skriv en statusindikatorverdi til lagringsplass som er tilgjengelig for brukergrensesnittet eller oppringeroppgaven, som kan overvåke eller kontrollere denne verdien. Andre data som bakgrunnsoppgaven returnerer til oppringeren, kan plasseres i samme lagringsplass.
Vis en API eller et endepunkt fra bakgrunnsoppgaven som brukergrensesnittet eller oppringeren kan få tilgang til for å hente statusinformasjon. Svaret kan inneholde dataene som bakgrunnsoppgaven returnerer til oppringeren.
Konfigurer bakgrunnsoppgaven til å svare med statusen eller dataene den behandlet tilbake til brukergrensesnittet.
Koordinering
Bakgrunnsoppgaver kan være komplekse og krever at flere oppgaver kjøres. I disse scenarioene er det vanlig å dele opp oppgaven i mindre diskrete trinn eller delaktiviteter som flere delaktiviteter kan kjøre med. Flertrinnsjobber er mer effektive og mer fleksible fordi individuelle trinn ofte kan brukes om igjen i flere jobber. Det er også enkelt å legge til, fjerne eller endre rekkefølgen på trinnene.
Det kan være en utfordring å koordinere flere oppgaver og trinn, men det er tre vanlige mønstre som veileder løsningen:
Del opp en oppgave i flere trinn som kan brukes om igjen. Et program kan være nødvendig for å utføre ulike oppgaver av forskjellig kompleksitet på informasjonen som brukes til å prosessere. En enkel, men ikke fleksibel metode for implementering av et slikt program er å utføre denne behandlingen som en stor modul. Denne metoden vil imidlertid sannsynligvis redusere mulighetene for refaktorering av koden, optimalisere den eller bruke den på nytt hvis programmet krever deler av den samme behandlingen andre steder.
Administrer iverksetting av trinnene for en oppgave. Et program kan utføre oppgaver som består av mange trinn, og noen kan starte eksterne tjenester eller få tilgang til eksterne ressurser. Noen ganger er enkelttrinnene uavhengige av hverandre, men de er organisert av programlogikken som implementerer oppgaven.
Behandle gjenopprettingen for oppgavetrinn som mislykkes. Hvis én eller flere av trinnene mislykkes, kan det hende at et program må angre arbeidet som en rekke trinn utfører, som til sammen definerer en til slutt konsekvens operasjon.
Vurderinger av fleksibilitet
Opprett fleksible bakgrunnsoppgaver som leverer pålitelige tjenester for programmet. Når du planlegger og utformer bakgrunnsoppgaver, må du vurdere følgende punkter:
Bakgrunnsoppgaver må håndtere omstarter uten å skade data eller innføre inkonsekvens i programmet. Vurder å bruke sjekkpunkter for oppgaver som har kjørt lenge eller har flere oppgaver. Bruk sjekkpunkter til å lagre tilstanden for jobber i fast lagring eller som meldinger i en kø, og konfigurer logikk for nytt forsøk i tilfelle uventede feil i en handling.
Når du bruker køer til å kommunisere med bakgrunnsoppgaver, kan køene fungere som en buffer for lagring av forespørsler som sendes til oppgavene mens programmet er under tyngre belastning enn vanlig belastning. Oppgavene kan ta igjen brukergrensesnittet i mindre opptatte perioder, og omstarter blokkerer ikke brukergrensesnittet.
Skalerings og ytelseshensyn
Bakgrunnsoppgaver må gi tilstrekkelig ytelse for å sikre at de ikke blokkerer programmet eller utsetter driften når systemet er under belastning. Ytelsen forbedres vanligvis når du skalerer beregningsforekomstene som er vert for bakgrunnsoppgavene. Når du planlegger og utformer bakgrunnsoppgaver, må du vurdere følgende punkter relatert til skalerbarhet og ytelse:
Bakgrunnsjobber kan påvirke brukeropplevelsen hvis resultatet av bakgrunnsoppgavene presenteres for brukeren. Bakgrunnsjobber kan for eksempel kreve at brukeren venter på et varsel, oppdaterer siden eller kontrollerer statusen for oppgaven manuelt. Denne virkemåten kan øke kompleksiteten til brukersamhandlingen og ha negativ innvirkning på brukeropplevelsen. Vurder alternativer for å svare data tilbake til brukergrensesnittet, for eksempel sende et varsel via e-post eller Microsoft Teams, eller å inkludere muligheten til å se etter statusoppdateringer i brukergrensesnittet. I eksemplet på sending av utgiftsskjemaer kan du i stedet for å svare statusen tilbake til brukergrensesnittet, ha en side i programmet som viser alle sendte utgiftsskjemaer med statusen og muligheten til å utløse en oppdatering.
Bakgrunnsjobber kan skape utfordringer for datasynkronisering og prosesskoordinering, spesielt hvis bakgrunnsoppgavene er avhengige av hverandre eller andre datakilder. Bakgrunnsjobber kan for eksempel håndtere datakonsekvensproblemer, nettverkssituasjoner, vranglåser eller tidsavbrudd.
Hvis du vil hindre tap av ytelse under belastning, kan du implementere logikk slik at ett enkelt punkt i prosesskjeden ikke forårsaker en flaskehals. Vurder andre begrensninger, for eksempel maksimal gjennomstrømning for arbeidsflythandlinger, lagring og andre tjenester som programmet og bakgrunnsoppgavene er avhengige av.
Avveining: Bakgrunnsjobber introduserer flere komponenter og avhengigheter til systemet, som kan øke kompleksiteten og vedlikeholdkostnadene for løsningen. Bakgrunnsjobber kan for eksempel kreve en separat overvåkingstjeneste og et nytt forsøk.
Tilrettelegging for Power Platform
Avsnittene nedenfor beskriver tjenestene du kan bruke til å drifte, kjøre, konfigurere og administrere bakgrunnsjobber.
Power Automate
Power Automate-skyflyter er arbeidsflyter som kjører i skyen. De kan være automatiserte flyter som utløses av en hendelse, for eksempel når en e-postmelding kommer fra en bestemt person. Det kan være direktemeldingsflyter som du starter med et klikk, for eksempel en påminnelse til teamet som du sender fra den mobile enheten. De kan være planlagte flyter som kjører på et bestemt tidspunkt, for eksempel en daglig dataopplasting til SharePoint eller en database. Du kan også automatisere gjentakende oppgaver fra skrivebordet eller mobilenheten.
Gjør deg kjent med grensene for automatiserte, planlagte og direkteflyter når det gjelder gjennomstrømning, forespørsel, samtidighet, sløyfe og frakobling. Pass på at du tar hensyn til disse grensene når du utformer arbeidsflyten.
Redusere risikoen ved å planlegge for feilbehandling.
Her er noen eksempler på hvor du kan bruke Power Automate-flyter til å kjøre bakgrunnsjobber:
Microsoft Dataverse
Microsoft Dataverse-beregnede kolonner og beregnede verdier
Formelkolonner er kolonner som viser en beregnet verdi i en Microsoft Dataverse-tabell.
Beregnede kolonner automatiserer manuelle beregninger som brukes i forretningsprosessen. En selger vil for eksempel vite hva vektet omsetning er for en salgsmulighet, som er basert på den beregnede omsetningen fra en salgsmulighet multiplisert med sannsynligheten. Eller de vil legge på en rabatt automatisk hvis en ordre er større enn et bestemt beløp. En beregnet kolonne kan inneholde verdier som resultatet av vanlige matematiske eller betingede operasjoner, for eksempel større enn og hvis-ellers.
Kolonner for beregnet verdi gir brukerne bedre innsikt i dataene ved å overvåke viktige forretningsdata. En kolonne for beregnet verdi inneholder en mengdeverdi som er beregnet på tvers av radene som er knyttet til en bestemt rad. Dette omfatter vanlige tabeller og aktivitetstabeller, for eksempel e-postmeldinger og avtaler. I mer kompliserte scenarier, kan du samle data over hierarkiet av rader. Som systemansvarlig eller tilpasser kan du definere kolonner for beregnet verdi ved hjelp av verktøyene for tilpassing i Power Apps, uten at det er nødvendig å skrive kode.
Bakgrunnsoperasjoner kan sende forespørsler som Dataverse behandler asynkront. Bakgrunnsoperasjoner er nyttige når du ikke vil vedlikeholde en tilkobling mens en forespørsel kjører.
Programtillegg er egendefinerte hendelsesbehandlinger som kjøres som svar på en bestemt hendelse som oppstår under behandling av en Microsoft Dataverse-dataoperasjon.
Microsoft Dataverse tilbyr også en kraftig løsning for å oppnå mer effektiv dataarkitektur og redusere arbeidsbelastningen på klientsiden via lavkodebaserte programtillegg. Disse programtilleggene er arbeidsflyter som kan brukes på nytt i sanntid, og som kjører et bestemt sett kommandoer i Dataverse, som kjører serversiden og utløses av tilpassede hendelsesbehandlinger.
Sjekkliste for pålitelighet
Se hele settet med anbefalinger.