driftbarhet - steg mot smidig drift, javazone 2010

Post on 08-Jul-2015

877 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

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

Driftbarhet

Steg mot smidig drift

JavaZone 2010 – Trond Arve Wasskog

Driftbarhet?

Overskyggende fokus på sluttbrukerfunksjonalitet

Ikke-funksjonelle krav...

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.

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.

Formelle krav i henhold til regelverk og lover skal oppfylles.

Eksempler på aktuelle lover og regelverk er

personopplysningsloven, arkivloven og offentlighetsloven.

Driftbarhet

Tilrettelegging for effektiv drift

Driftsoperatørene

Ansvar for at applikasjonen fungerer

i produksjonsmiljøet

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

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

Som administrator

skal jeg se en oversikt over alle aktuelle prosesser

slik at jeg vet om systemet kjører som normalt

Gitt prosessoversikten vises

Når ingen prosesser har feilet

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

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

Driftsoperatørene er også brukere av systemet

Plattform

Driftsoppgaver

Utrulling

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

Utvikling Test QA Produksjon

Utvikling Test QA Produksjon

OS

App

Hypervisor

OS

App

Hypervisor

OS

App

Hypervisor

OS

App

Hypervisor

Version 2.1

Version 2.2

SQL Version 2.3

SQL

Database migrations

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

Automatisering

Overvåkning

Som en driftsoperatør

ønsker jeg å avdekke feil i konfigurasjon og miljø

slik at applikasjonen starter

Diagnosetester

Gitt at applikasjonen starter

når applikasjonsbrukeren ikke har tilgang til importkatalogen

så skal oppstarten feile med en tydelig feilmelding

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

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

Som en driftsoperatør

ønsker jeg å verifisere at den nylig installerte

applikasjonen fungerer

Som en driftsoperatør

ønsker jeg å ha oversikt over applikasjonens helsetilstand

slik at jeg tidlig kan oppdage problemer og iverksette tiltak

Som en driftsoperatør

ønsker jeg at alle applikasjonene overvåkes i et

felles driftskonsoll

Diagnosetester

Røyktester

Helsesjekker

Felles driftskonsoll

Feilhåndtering og logging

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

Som en driftsoperatør

skal jeg kunne skille mellom applikasjonsfeil, systemfeil

og programmeringsfeil

slik at jeg vet om jeg skal gjøre tiltak

Funksjonell

håndtering

Feilretting og

utrulling

Prøv igjen?

Application

Exception

Ja Nei Nei

System

Exception

Mulig Nei Mulig

Programming

Exception

Nei Ja Nei

Som en driftsoperatør

Ønsker jeg at feil kan kategoriseres

Slik at jeg kan identifisere gjentaktende feiltyper

Som en driftsoperatør

skal jeg kunne identifisere hver enkelt feilhendelse

slik at jeg kan finne feil som rapporteres med ID

Legg til kontekst der feilen oppstår

AbstractException-Enum category

-Long uid-Map context

addContext(key, value)

ApplicationException SystemException

java.langRuntimeException

Alvorlighetsgrad

Fatal Kritisk applikasjonsfeil

Error Kritisk sesjonsfeil

Warning Mindre kritiske feil

Info Interessante hendelser

Logg til lokal disk

Enkel tilgang til produksjonsloggene

Loggovervåkning

Enkel og konsistent feilhåndtering

og logging

Finn en sårbarhet - I

try {

conn = pool.getConnection();

stmt = conn.createStatement();

// execute sql

} finally {

stmt.close();

conn.close();

}

try {

conn = pool.getConnection();

stmt = conn.createStatement();

// execute sql

} finally {

try {

stmt.close();

} catch (Exception e) { //SystemEx }

try {

conn.close();

} catch (Exception e) { //SystemEx }

}

Finn en sårbarhet - II

URLConnection conn =

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

conn.connect();

InputStream is = conn.getInputStream();

while(is.available() > 0) {

// process

}

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

}

Finn en sårbarhet - III

public synchronized Object get(String id)

{

Object obj = items.get(id);

if(null == obj) {

obj = createFromBackingStore(id);

items.put(id, obj);

}

return obj;

}

public synchronized Object get(String id)

{

Object obj = items.get(id);

if(null == obj) {

obj = createFromBackingStore(id);

items.put(id, obj);

}

return obj;

}

Finn en sårbarhet - IV

Last-balanserer

Appserver 1 Appserver 2

80% 75%

50/50

Last-balanserer

Appserver 1 Appserver 2

155% ?? 0%

100/0

Finn en sårbarhet - V

Last-balanserer

Appserver 1 Appserver 2

Last-balanserer

Appserver 1 Appserver 2

Finn en sårbarhet - VI

MinApplikasjon

SAP CMS

Mainframe

LDAPFolke

registeret

Print

MinApplikasjon

SAP CMS

Mainframe

LDAPFolke

registeret

Print60s

5s10s

10 ms

20 ms5s

MinApplikasjon

SAP CMS

Mainframe

LDAPFolke

registeret

Print

Oppsummert

devops

Det koster så lite og betyr så mye

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?

trond.arve.wasskog@bekk.no

top related