- analyse og implementasjon
Hvem er vi? Vi heter Anders S Finnerud Dennis JMJ Lundh studerer til bachelorgraden i ingeniørfag for data ved Høgskolen i Oslo.
Oppgaven Lage et lett system som kan utføre oppgaver etter batch metoden Vår oppdragsgiver: ATS (Accenture Tecnology Solutions) Vi skal forsøke å: analysere behovene skape ett eksempel
Motivasjon for oppgaven Tidligere batchsystemer: benytter enterprise rammeverk. f.eks.: Java Enterprise Edition(J2EE) Fordeler: mye benyttet og derfor stort utviklingsmiljø. godt dokumentert testet teknologi Ulemper: Må implementere funksjonalitet man ikke trenger Unødvendig høyt ressursforbruk kan virke kompliserende
Motivasjon for oppgaven Trenden går nå mot enklere systemer basert på Java Standard Edition(J2SE) Fordeler: Man kan kun ta med det man trenger av funksjonalitet. Dette betyr Mindre ressursbruk Enklere utvikling Hvorfor er ikke dette gjort tidligere? ny funksjonalitet i J2SE Hibernate og andre rammeverk støtter nå J2SE, og ikke bare J2EE
Krav til systemet: J2SE basert, altså standard java kode Repetere en oppgave på en mengde, lignende, objekter Kunne lese/skrive til database benytte Hibernate Rulle tilbake data ved feil Være automatisert Kunne logge utførelsen
Hva gjorde vi? Første fase - analyse studerte batchsystemer i ulike sammenhenger industrielle databaserte vurderte aspekter som egenskaper krav problemstillinger
Hva gjorde vi? Andre fase utviklingen Teste grunnleggende komponenter sammen Quartz Hibernate Laget modeller for batchsystemet Ville finne enkleste mulige oppbygging med hensyn til: sikker jobb utførelse enkel overvåking og administrasjon fremtidige endringer i systemet
Første fase: Hva er batchjobber? Sekvensielt arbeid Gjentagende prosess Mange repetisjoner Minner om: Samlebåndsarbeid i fabrikker bilindustri Prosessindustri store automatiserte bakerier og laboratorier.
Skrittvis forklart
Effektiv jobbutførelse Parallell prosessering Dele en jobb opp til flere komponenter Behandle hvert komponent uavhengig Behandle komponenter til samme tid
Effektiv jobbutførelse Concurrency Samme som parallell prosessering men Komponenter kan være av helt forskjellig type Behandling av komponenter kan foregå til forskjellige tidspunkter Prosess 1 Uavhengig Batch Jobb Starter ny Prosess Felles Batch Jobb Batch Starter ny Prosess Prosess 2 Uavhengig Batch Jobb
Problemstilling: Kritiske avsnitt 2 eller flere prosesser prøver å benytte samme ressurs til samme tid Eksempel: To bakere benytter samme ovn til å steke brød Kritisk kun ved lagring eller oppdatering Løsning: Sett prosess 1 til å vente på prosess 2 Eksempler på problem: Race Condition Deadlock
Deadlock Eksempel: Fire biler kommer samtidig mot ett kryss fra 4 forskjellige retninger. Ingen signal-lys Høyre-regelen gjelder Alle bilene må vente på hverandre siden alle har en bil til høyre i krysset.
Deadlock Hvilke følger får en Deadlock? Batchsystemet vil stoppe fullstendig opp Når forekommer en Deadlock? Større systemer med flere kritiske transaksjoner Hva kan gjøres? Dele inn transaksjonene Kjører et begrenset antall jobber om gangen
Hva har ett godt batchsystem? Forutsigbar start og stopp Fleksibilitet Loggføring God logistikk Feilhåndtering
Automatisering og tidsstyring (skedulering) Kontroll over jobber som skal utføres i systemet tidsstyring repetisjon med bestemt intervall Quartz setter i gang prosessen Quartz Tidsstyrt signal Jobb indeling Utførelse Batch-Jobb kontroll Jobb indeling
Partisjonering Er å dele jobbens data inn i mindre deler (partisjoner) Kan hjelpe for å utnytte minne og prosessortid optimalt bedre ytelse på nettverk og mot eksterne tjenester Grunnlaget for parallell jobbutførelse (GRID-Computing) handler om å fordele arbeidet ut til mange tjenere Systemet vårt: lager og prosesserer partisjoner sekvensielt. er i praksis en FIFO kø i en beholder klasse.
Logging Logger skrives til tekstfil Kan også vises på skjerm Normalt loggføres data om konfigurasjons og progresjon feilsituasjoner Konfigurerbar etter behov. Vårt system benytter Log4j fra Apache Software Foundation veldig populært
Litt om feilhåndtering (rulle tilbake data) Rull tilbake -funksjonaliteten: utføres i laget for kommunikasjon mot databasen. skjer automatisk rett etter at feilen er oppdaget loggføres Hvis ønskelig kan systemet forsøke på nytt et bestemt antall ganger implementeres i forrentningslogikken
Arbeids klasse (IWork) Database Objekt Start Aktivetsdiagram for transaksjoner Avslutter med feil [nei] Lagre objekt entitet i DB [ja] Nytt forsøk? Transaksjon mot DB Feil oppstått (Exception e) [ja] [nei] Avslutter ved å returnere den lagrede entiteten Logg og kast (Exception e) [nei] Er transaksjon fremdeles aktiv? [ja] rull tilbake [nei] Feil under tilbakerulling (Exception he) [ja] Logg (Exception he)
Litt om flertrådskjøring Gir mulighet for mer fleksibel ressursfordeling Sikrer at kritiske prosesser kjører selv om en annen prosess stopper opp. Kan gi bedre ytelse og responstid. spesielt på systemer med flere cpukjerner Vårt system: har i størst mulig grad benyttet trådsikre klasser er ikke implementert til å kjøre flere tråder enda
Andre sammensetninger Pakke 1: Databasen(Postgresql) Det finnes en rekke typer databaser som støtter SQL standarden Pakke 2: Persistering(Hibernate) Det finnes få alternativer til Hibernate til dags dato Pakke 3: Batch-logikk(Java kode) Kan byttes ut med SpringBatch Pakke 4: Tidsstyring(Quartz) Kan byttes ut med for eksempel Struts eller Flux.
Til slutt Besøk vår webside: http://student.iu.hio.no/hovedprosjekter/2009/data/33/ Der kan du blant annet finne: Prosjektdokumentasjon Eksempler på logger fra kjøring Kildekode dokumentasjon i form av JavaDoc