Hjelp, vi må prodsette

28
Hjelp, vi må prodsette! Jørgen Wahlberg utviklingsleder, A-pressen Digitale Medier tirsdag 20. april 2010

description

Når man utvikler nettaviser er det en utfordring å balansere hensynet til stabilitet og ønsket om hyppige endringer i en løsning. Jørgen Wahlberg viser eksempler på hva A-pressen sammen med Linpro har gjort for å gjøre både driftere, utviklere og avisene mindre nervøse når endringene skal settes i produksjon.

Transcript of Hjelp, vi må prodsette

Page 1: Hjelp, vi må prodsette

Hjelp, vi må prodsette!

Jørgen Wahlbergutviklingsleder,

A-pressen Digitale Medier

tirsdag 20. april 2010

Page 2: Hjelp, vi må prodsette

A-pressen Digitale Medier

• 65 nettaviserbl.a. RB.no, BA.no, Nordlys.no, AN.noselve nettavisene, fotball-live, skattelistene, rubrikkannonser, etc.

• Norges femte største nettaktørca. 350 000 unike brukere pr dagca. 1,2 millioner lesere i uken

• Zett.no, Derdubor.no, Mediehuset Digital, Nettsamfunnet Origo

• A-pressen eier ogsåhalve Nettavisenhalve TV2

tirsdag 20. april 2010

Page 3: Hjelp, vi må prodsette

Om oss

• Ca. 15 utviklere• Ca. 60 linux-servere• Drift satt ut til Linpro• Stort sett Java• Noe PHP• Varnish• MySQL• PostgreSQL• Escenic• FAST ESP

tirsdag 20. april 2010

Page 4: Hjelp, vi må prodsette

Produksjonssetting

• Endring medfører risiko for at noe går galt• Endring er nødvendig og det vi går på jobb for• Endring er like viktig som stabilitet

• Må balanseres mot hverandre

tirsdag 20. april 2010

Page 5: Hjelp, vi må prodsette

Hva har vi gjort for å redusere risikoen for feil ved utrullinger?• Automatisering• Kommunikasjon• Utviklingsfilosofi• Samarbeid utvikling/drift

tirsdag 20. april 2010

Page 6: Hjelp, vi må prodsette

Munin og Nagios

• Nagios viser status på systemene

og varsler når noe er galt

• Munin grafer utvikling for forskjellige parametre over tid

slik at vi kan se om endringer førte til uventet oppførsel

tirsdag 20. april 2010

Page 7: Hjelp, vi må prodsette

Dedikerte driftere

• Drift av tjenestene håndteres av Redpill Linpro• En person jobber fast med vår rigg• Slipper å forholde oss til nye ansikter for hver

henvendelse

tirsdag 20. april 2010

Page 8: Hjelp, vi må prodsette

Tett kommunikasjon mellom drift og utvikling

• Ticketsystem• Mail• Møter• Videokonferanse• IRC

tirsdag 20. april 2010

Page 9: Hjelp, vi må prodsette

Ikke bare menneskene kommuniserer på IRC • På kanalen er det en

bruker som heter “bot”• Bot er et program, ikke

et menneske• Bot forteller hva som

skjer med serverne:oppdateringerfeilmeldinger

http://www.flickr.com/photos/frogdna/3605073173/

tirsdag 20. april 2010

Page 10: Hjelp, vi må prodsette

Versjonskontroll

• Vi bruker Subversion som versjonskontrollsystem• For kildekode og konfigurasjon• Brukes av både utvikling og drift

• Alle vet hvor de skal se

tirsdag 20. april 2010

Page 11: Hjelp, vi må prodsette

Gjøre utviklings- og produksjonsmiljøer like• Jetty som

applikasjonsserver• Byttet fra Oracle til

MySQL• Samme oppsett

(porter, prefiks, osv.)• Feil i produksjon kan

stort sett reproduseres lokalt i utviklingsmiljøet

http://www.flickr.com/photos/8364507@N06/4048424056/

tirsdag 20. april 2010

Page 12: Hjelp, vi må prodsette

Kontinuerlig bygging

• Enhetstester• Integrasjonstester• Cruise Control• Reduserer risikoen for

at endringer fører til at noe brekker

• Muliggjør refaktorering

tirsdag 20. april 2010

Page 13: Hjelp, vi må prodsette

ADAM-A

tirsdag 20. april 2010

Page 14: Hjelp, vi må prodsette

Keep it simple

• Enkle tjenester• Spesialiserte• Heller flere enkle enn

færre kompliserte tjenester

• Kommunikasjon mellom tjenestene med HTTP

Enkelt å feilsøkeEnkelt å cache

http://www.flickr.com/photos/baileyfamily/2039427760/

tirsdag 20. april 2010

Page 15: Hjelp, vi må prodsette

Keep it simple (forts.)

• Koden vår er bygget på ryggen av hundrevis av biblioteker

eksempler: spring, hibernate, lucene, xstream, jawr, saxon, jqueryalle unntatt ett er åpen kildekode

• Så få avhengigheter som mulig• Hold egne og eksterne biblioteker oppdatert• Bruke biblioteker som gjør få ting, men gjør dem

bra

tirsdag 20. april 2010

Page 16: Hjelp, vi må prodsette

Puppet

• Verktøy for automatisk oppdatering av servere

• “Puppet-master”, en maskin, holder konfigurasjonen

• Sikrer at servere (“puppets”) blir oppdatert iht. reglene

• Endringer spores av Subversion

http://www.flickr.com/photos/eugene/18142113/

tirsdag 20. april 2010

Page 17: Hjelp, vi må prodsette

Test-, stage og snapshot-servere

• Kombinasjonen av kontinuerlig bygging...• ... og automatisert oppdatering av servere ...• ... gir oss en (nesten) kontinuerlig oppdatert server

som viser hva som er utviklet til nå.• Oppdateres flere ganger om dagen.

• Test- og stage-servere oppdateres også enkelt.

tirsdag 20. april 2010

Page 18: Hjelp, vi må prodsette

Tilgang til serverne

• Alle utviklerne har login men ikke fulle admin-rettigheter

• Både utviklere og driftere kan sette ny kode i produksjon

• Endringer kan spores, så drifterne har fortsatt kontroll over maskinen

http://www.flickr.com/photos/penguincakes/2826996407/

tirsdag 20. april 2010

Page 19: Hjelp, vi må prodsette

Driftsvennlig kode

• Status-sider som forteller om tjenestene har det bra

for f.eks. lastbalanserereog for mennesker

• Knapper, spaker og kontroller slik at man kan endre oppførselen til systemene i fart

http://www.flickr.com/photos/stephangeyer/

tirsdag 20. april 2010

Page 20: Hjelp, vi må prodsette

Eksempler: status og konsoll

tirsdag 20. april 2010

Page 21: Hjelp, vi må prodsette

Utviklerne er ansvarlige for koden også etter at den er i prod

• Man får problemene i fanget hvis det ikke fungerer som det skal

• Gjelder både ved ytelsesproblemer og ved funksjonelle feil

tirsdag 20. april 2010

Page 22: Hjelp, vi må prodsette

Alt som rulles ut er ikke nødvendigvis synlig med en gang • Skille lansering av ny funksjonalitet fra utrulling av

ny kode• Konfigurerbar oppførsel i koden

av/pågammel/ny

• Skru på ny funksjonalitet etter hvert, f.eks. på en avis først.

tirsdag 20. april 2010

Page 23: Hjelp, vi må prodsette

Dyktige medarbeidere

• Utviklere og driftsfolk som respekterer og stoler på hverandre

• ... og skjønner hverandres arbeidsoppgaver...• ... og som prater sammen om hva som fungerer og

ikke fungerer.

tirsdag 20. april 2010

Page 24: Hjelp, vi må prodsette

Ikke rulle ut på fredager

tirsdag 20. april 2010

Page 25: Hjelp, vi må prodsette

Suksessfaktorer

• IRC og bot• Likt oppsett i utvikling og produksjon• Hold kode og oppsett så enkelt som mulig• Kontinuerlig bygging• Enkel oppdatering av servere• Hyppig utrulling

tirsdag 20. april 2010

Page 26: Hjelp, vi må prodsette

Hva har åpen kildekode gitt oss?

• Fleksibilitetkan velge hvor og hvordan programmer skal kjørekan bytte ut biter som ikke virkermulighet til å sette opp så mange testmiljøer vi vil

• Trygghetkan bytte ut biter som ikke virkerkan fikse det som ikke fungerer bra nokkan selv velge hvor vi skal sette inn ressurser hvis noe ikke virker

• Skaleringikke bundet av lisenser som begrenser antall cpu-er eller maskinerfrihet til å sette sammen løsninger slik at de skalerer slik vi vil.

tirsdag 20. april 2010

Page 27: Hjelp, vi må prodsette

Mer informasjon

• http://www.linux.org/• http://java.sun.com/• http://php.net/• http://varnish-cache.org/• http://dev.mysql.com/• http://www.postgresql.org/• http://munin-monitoring.org/• http://www.nagios.org/• http://www.redpill-linpro.no/

• http://en.wikipedia.org/wiki/Internet_Relay_Chat

• http://www.mirc.com/ircintro.html• http://www.tandberg.com/• http://subversion.apache.org/• http://jetty.codehaus.org/jetty/• http://cruisecontrol.sourceforge.net/• http://blogg.api.no/-/bulletin/show/

557849_attention-all-personnel• http://www.puppetlabs.com/• http://www.erdetfredag.no/

tirsdag 20. april 2010

Page 28: Hjelp, vi må prodsette

[email protected]@jorgenwahlberg

http://www.apdm.no/http://blogg.api.no/@apressen_apdm

tirsdag 20. april 2010