Driftbarhet - Steg mot smidig drift, JavaZone 2010

89
Driftbarhet Steg mot smidig drift JavaZone 2010 Trond Arve Wasskog

description

De fleste utviklingsprosjekter drives av funksjonalitet. De gode prosjektene fokuserer på vedlikeholdbarhet. Alt for få leveres med god driftbarhet.Tilrettelegging for drift bør prioriteres høyere i utviklingsprosjekter. Dessverre overskygges driftbarhet ofte av ensidig fokus på funksjonalitet. Resultatet er en kaotisk og uoversiktlig driftssituasjon med brannslokking og påfølgende etterarbeid.Denne sesjonen gir eksempler på hvordan man kan oppnå god driftbarhet med relativt enkle grep. Basert på positive og negative erfaringer fra flere prosjekter ser vi på hvordan applikasjoner kan tilrettelegges for drift samt konkrete teknikker og verktøy som kan benyttes.Video: http://tcs.java.no/Beskrivelse: http://javazone.no/incogito10/events/JavaZone%202010/sessions/Driftbarhet%20-%20Veien%20til%20smidig%20drift

Transcript of Driftbarhet - Steg mot smidig drift, JavaZone 2010

Page 1: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Driftbarhet

Steg mot smidig drift

JavaZone 2010 – Trond Arve Wasskog

Page 2: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Driftbarhet?

Page 3: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Overskyggende fokus på sluttbrukerfunksjonalitet

Page 4: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Ikke-funksjonelle krav...

Page 5: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Når det feiler i et av de involverte systemene, så skal det ved asynkrone oppgaver

automatisk gjøres nye forsøk, og etter x antall forsøk skal

det legges en melding på den generiske varslingstjenesten.

Page 6: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Utføring av sentrale funksjoner skal logges. Dette vil være en

form for logging av utført forretningslogikk. Naturlige tidspunkt for slik logging vil

være ved oppretting/innsending av ”noe”, verifisering,

tjenestekall, oppslag, etc.

Page 7: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Formelle krav i henhold til regelverk og lover skal oppfylles.

Eksempler på aktuelle lover og regelverk er

personopplysningsloven, arkivloven og offentlighetsloven.

Page 8: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Driftbarhet

Tilrettelegging for effektiv drift

Page 9: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Driftsoperatørene

Page 10: Driftbarhet - Steg mot smidig drift, JavaZone 2010
Page 11: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Ansvar for at applikasjonen fungerer

i produksjonsmiljøet

Page 12: Driftbarhet - Steg mot smidig drift, JavaZone 2010
Page 13: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Som administrator

skal jeg kunne søke opp en prosessinnstans

slik at jeg raskt kan finne den spesifikkeprosessen eller utvalget av prosesser

jeg skal håndtere

Page 14: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Gitt at jeg har kundenummer for en feilende prosess

når jeg oppgir kundenummeret i søkefeltet

så skal alle prosesser for det spesifikke kundenummeret listes sortert på

oppstartstid

Page 15: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Som administrator

skal jeg se en oversikt over alle aktuelle prosesser

slik at jeg vet om systemet kjører som normalt

Page 16: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Gitt prosessoversikten vises

Når ingen prosesser har feilet

Så skal alle prosesser ha status OKog være sortert på ferdigdato

Page 17: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Gitt at prosessoversikten vises

Når en prosess feiler

Skal den feilende prosessen ha status FEILog vises øverst i prosesslista

og de andre prosessene ha status OK

Page 18: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Driftsoperatørene er også brukere av systemet

Page 19: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Plattform

Page 20: Driftbarhet - Steg mot smidig drift, JavaZone 2010
Page 21: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Driftsoppgaver

Page 22: Driftbarhet - Steg mot smidig drift, JavaZone 2010
Page 23: Driftbarhet - Steg mot smidig drift, JavaZone 2010
Page 24: Driftbarhet - Steg mot smidig drift, JavaZone 2010
Page 25: Driftbarhet - Steg mot smidig drift, JavaZone 2010
Page 26: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Utrulling

Page 27: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Bunntekst -- Endres i toppmenyen: ”Insert” -> ”Header & Footer” (Velg ”Apply to all”) Side 28

Page 28: Driftbarhet - Steg mot smidig drift, JavaZone 2010
Page 29: Driftbarhet - Steg mot smidig drift, JavaZone 2010
Page 30: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Utvikling Test QA Produksjon

Page 31: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Utvikling Test QA Produksjon

OS

App

Hypervisor

OS

App

Hypervisor

OS

App

Hypervisor

OS

App

Hypervisor

Page 32: Driftbarhet - Steg mot smidig drift, JavaZone 2010
Page 33: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Version 2.1

Version 2.2

SQL Version 2.3

SQL

Database migrations

Page 34: Driftbarhet - Steg mot smidig drift, JavaZone 2010

http://martinfowler.com/bliki/BlueGreenDeployment.html

Page 35: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Automatisering

Page 36: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Overvåkning

Page 37: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Som en driftsoperatør

ønsker jeg å avdekke feil i konfigurasjon og miljø

slik at applikasjonen starter

Page 38: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Diagnosetester

Page 39: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Gitt at applikasjonen starter

når applikasjonsbrukeren ikke har tilgang til importkatalogen

så skal oppstarten feile med en tydelig feilmelding

Page 40: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Diagnosetest Beskrivelse

Java VM versjon Systemet benytter riktig Java

VM versjon

Java VM parametre Systemet har nødvendige Java

VM parametre satt

Tid og dato Verifiserer at klokke og tid er

satt korrekt

Språk/tegnsett OS Språk og tegnsett er korrekt på

operativsystemnivå

Språk/tegnsett database Språk og tegnsett er korrekt på

databasenivå

Systembruker tilgang Sjekker at systembrukeren har

tilgang til nødvendige filområder

Page 41: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Kan kjøre ved oppstart eller som egen testkjøring

Page 42: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Som en driftsoperatør

ønsker jeg å verifisere at den nylig installerte

applikasjonen fungerer

Page 43: Driftbarhet - Steg mot smidig drift, JavaZone 2010
Page 44: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Som en driftsoperatør

ønsker jeg å ha oversikt over applikasjonens helsetilstand

slik at jeg tidlig kan oppdage problemer og iverksette tiltak

Page 45: Driftbarhet - Steg mot smidig drift, JavaZone 2010
Page 46: Driftbarhet - Steg mot smidig drift, JavaZone 2010
Page 47: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Som en driftsoperatør

ønsker jeg at alle applikasjonene overvåkes i et

felles driftskonsoll

Page 48: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Diagnosetester

Røyktester

Helsesjekker

Felles driftskonsoll

Page 49: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Feilhåndtering og logging

Page 50: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Drift vil vite hva de skal gjøre når en feil oppstår

Page 51: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Som en driftsoperatør

skal jeg kunne skille mellom applikasjonsfeil, systemfeil

og programmeringsfeil

slik at jeg vet om jeg skal gjøre tiltak

Page 52: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Funksjonell

håndtering

Feilretting og

utrulling

Prøv igjen?

Application

Exception

Ja Nei Nei

System

Exception

Mulig Nei Mulig

Programming

Exception

Nei Ja Nei

Page 53: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Som en driftsoperatør

Ønsker jeg at feil kan kategoriseres

Slik at jeg kan identifisere gjentaktende feiltyper

Page 54: Driftbarhet - Steg mot smidig drift, JavaZone 2010
Page 55: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Som en driftsoperatør

skal jeg kunne identifisere hver enkelt feilhendelse

slik at jeg kan finne feil som rapporteres med ID

Page 56: Driftbarhet - Steg mot smidig drift, JavaZone 2010
Page 57: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Legg til kontekst der feilen oppstår

Page 58: Driftbarhet - Steg mot smidig drift, JavaZone 2010

AbstractException-Enum category

-Long uid-Map context

addContext(key, value)

ApplicationException SystemException

java.langRuntimeException

Page 59: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Alvorlighetsgrad

Page 60: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Fatal Kritisk applikasjonsfeil

Error Kritisk sesjonsfeil

Warning Mindre kritiske feil

Info Interessante hendelser

Page 61: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Logg til lokal disk

Page 62: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Enkel tilgang til produksjonsloggene

Page 63: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Loggovervåkning

Page 64: Driftbarhet - Steg mot smidig drift, JavaZone 2010
Page 65: Driftbarhet - Steg mot smidig drift, JavaZone 2010
Page 66: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Enkel og konsistent feilhåndtering

og logging

Page 67: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Finn en sårbarhet - I

Page 68: Driftbarhet - Steg mot smidig drift, JavaZone 2010

try {

conn = pool.getConnection();

stmt = conn.createStatement();

// execute sql

} finally {

stmt.close();

conn.close();

}

Page 69: Driftbarhet - Steg mot smidig drift, JavaZone 2010

try {

conn = pool.getConnection();

stmt = conn.createStatement();

// execute sql

} finally {

try {

stmt.close();

} catch (Exception e) { //SystemEx }

try {

conn.close();

} catch (Exception e) { //SystemEx }

}

Page 70: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Finn en sårbarhet - II

Page 71: Driftbarhet - Steg mot smidig drift, JavaZone 2010

URLConnection conn =

openConnection("http://www.bekk.no");

conn.connect();

InputStream is = conn.getInputStream();

while(is.available() > 0) {

// process

}

Page 72: Driftbarhet - Steg mot smidig drift, JavaZone 2010

URLConnection conn =

openConnection("http://www.bekk.no");

conn.setConnectTimeout(CONNECT_TIMEOUT);

conn.setReadTimeout(READ_TIMEOUT);

conn.connect();

InputStream is = conn.getInputStream();

while(is.available() > 0) {

// process

}

Page 73: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Finn en sårbarhet - III

Page 74: Driftbarhet - Steg mot smidig drift, JavaZone 2010

public synchronized Object get(String id)

{

Object obj = items.get(id);

if(null == obj) {

obj = createFromBackingStore(id);

items.put(id, obj);

}

return obj;

}

Page 75: Driftbarhet - Steg mot smidig drift, JavaZone 2010

public synchronized Object get(String id)

{

Object obj = items.get(id);

if(null == obj) {

obj = createFromBackingStore(id);

items.put(id, obj);

}

return obj;

}

Page 76: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Finn en sårbarhet - IV

Page 77: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Last-balanserer

Appserver 1 Appserver 2

80% 75%

50/50

Page 78: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Last-balanserer

Appserver 1 Appserver 2

155% ?? 0%

100/0

Page 79: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Finn en sårbarhet - V

Page 80: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Last-balanserer

Appserver 1 Appserver 2

Page 81: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Last-balanserer

Appserver 1 Appserver 2

Page 82: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Finn en sårbarhet - VI

Page 83: Driftbarhet - Steg mot smidig drift, JavaZone 2010

MinApplikasjon

SAP CMS

Mainframe

LDAPFolke

registeret

Print

Page 84: Driftbarhet - Steg mot smidig drift, JavaZone 2010

MinApplikasjon

SAP CMS

Mainframe

LDAPFolke

registeret

Print60s

5s10s

10 ms

20 ms5s

Page 85: Driftbarhet - Steg mot smidig drift, JavaZone 2010

MinApplikasjon

SAP CMS

Mainframe

LDAPFolke

registeret

Print

Page 86: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Oppsummert

Page 87: Driftbarhet - Steg mot smidig drift, JavaZone 2010

devops

Page 88: Driftbarhet - Steg mot smidig drift, JavaZone 2010

Det koster så lite og betyr så mye

Page 89: Driftbarhet - Steg mot smidig drift, JavaZone 2010

BEKK CONSULTING ASSKUR 39, VIPPETANGEN. P.O. BOX 134 SENTRUM, 0102 OSLO, NORWAY. WWW.BEKK.NO

Takk for at du hørte på!

Spørmål?

[email protected]