Når du driver med kontinuerlig leveranse er det et problem om du har nedetid hver gang du produksjonssetter når målet er å produksjonssette så ofte du kan. I denne lyntalen vil jeg vise hvordan du kan unngå nedetid når du deployer Java-web-applikasjoner. Jeg vil vise hvordan du kan deploye (og rulle tilbake) nye versjoner, og også hvordan du bør håndtere databaseendringer (og rollback) mellom deployments.
5. Continuous delivery is about putting the
release schedule in the hands of the
business, not in the hands of IT.
... any build could potentially be
released to users at the touch of a
button using a fully automated process
in a matter of seconds or minutes.
- Jez Humble (http://continuousdelivery.com/)
6.
7. public class MySessionHandler extends SessionHandler {
public MySessionHandler(final Server server, final DataSource dataSource) {
super();
setSessionManager(new MyJDBCSessionManager(server, dataSource));
}
}
public class MyJDBCSessionIdManager extends JDBCSessionIdManager implements SessionIdManager {
public MyJDBCSessionIdManager(final Server server, final DataSource ds) {
super(server);
setDatasource(ds);
}
}
29. app v. 14
kompatibel med
db v. 3
db v. 3
deploy
TID
30. app v. 14
kompatibel med
db v. 3
db v. 3 db pre. 4
deploy
migrer
TID
31. app v. 14 app v. 15
kompatibel med kompatibel med
db v. 3 pre 4 og 4
db v. 3 db pre. 4
deploy deploy
migrer
TID
32. app v. 14 app v. 15
kompatibel med kompatibel med
db v. 3 pre 4 og 4
db v. 3 db pre. 4 db v. 4
deploy deploy
migrer migrer
TID
33. app v. 14 app v. 15 app v. 17
kompatibel med kompatibel med kompatibel med
db v. 3 pre 4 og 4 db 4 og 5
db v. 3 db pre. 4 db v. 4
deploy deploy deploy
migrer migrer
TID
34. app v. 14 app v. 15 app v. 17
kompatibel med kompatibel med kompatibel med
db v. 3 pre 4 og 4 db 4 og 5
db v. 3 db pre. 4 db v. 4 db v. 5
deploy deploy deploy
migrer migrer migrer
TID
35. app v. 14 app v. 15 app v. 17 app v. 18
kompatibel med kompatibel med kompatibel med kompatibel med
db v. 3 pre 4 og 4 db 4 og 5 db v. 5
db v. 3 db pre. 4 db v. 4 db v. 5
deploy deploy deploy deploy
migrer migrer migrer
TID
37. <databaseChangeLog>
<changeSet id="Legger til kolonne for kontostatus" author="Stein Inge Morisbak">
<addColumn tableName="KONTO">
<column type="VARCHAR(20)" name="STATUS" />
</addColumn>
</changeSet>
<changeSet id="Migrer kontostatus" author="Stein Inge Morisbak">
<sql>
update KONTO set STATUS = 'AKTIV' where AKTIV = 1;
update KONTO set STATUS = 'DEAKTIVERT' where AKTIV = 0;
</sql>
<rollback>
update KONTO set AKTIV = 1 where STATUS = 'AKTIV';
update KONTO set AKTIV = 0 where STATUS = 'DEAKTIVERT';
update KONTO set AKTIV = 0 where STATUS = 'STENGT';
</rollback>
</changeSet>
<changeSet id="Fjerner gammel kolonne for aktiv" author="Stein Inge Morisbak">
<dropColumn tableName="KONTO" columnName="AKTIV"/>
<rollback>
<addColumn tableName="KONTO">
<column type="NUMBER(1,0)" name="AKTIV"/>
</addColumn>
</rollback>
</changeSet>
</databaseChangeLog>
40. OPPSUMMERING
Du er ikke smidig om du ikke leverer kontinuerlig!
Du kan ikke levere kontinuerlig om du har nedetid!
41. OPPSUMMERING
Du er ikke smidig om du ikke leverer kontinuerlig!
Du kan ikke levere kontinuerlig om du har nedetid!
Forretning bestemmer hva og når noe skal i produksjon.
42. OPPSUMMERING
Du er ikke smidig om du ikke leverer kontinuerlig!
Du kan ikke levere kontinuerlig om du har nedetid!
Forretning bestemmer hva og når noe skal i produksjon.
Prodsetting skal være like enkelt som å trykke på en knapp.
43. OPPSUMMERING
Du er ikke smidig om du ikke leverer kontinuerlig!
Du kan ikke levere kontinuerlig om du har nedetid!
Forretning bestemmer hva og når noe skal i produksjon.
Prodsetting skal være like enkelt som å trykke på en knapp.
Nedetidfri deploy kan løses på følgende måte:
44. OPPSUMMERING
Du er ikke smidig om du ikke leverer kontinuerlig!
Du kan ikke levere kontinuerlig om du har nedetid!
Forretning bestemmer hva og når noe skal i produksjon.
Prodsetting skal være like enkelt som å trykke på en knapp.
Nedetidfri deploy kan løses på følgende måte:
- Sesjonsreplikering i databasen.
45. OPPSUMMERING
Du er ikke smidig om du ikke leverer kontinuerlig!
Du kan ikke levere kontinuerlig om du har nedetid!
Forretning bestemmer hva og når noe skal i produksjon.
Prodsetting skal være like enkelt som å trykke på en knapp.
Nedetidfri deploy kan løses på følgende måte:
- Sesjonsreplikering i databasen.
- Migrer bakover- og fremoverkompatible databaseendringer (expand).
46. OPPSUMMERING
Du er ikke smidig om du ikke leverer kontinuerlig!
Du kan ikke levere kontinuerlig om du har nedetid!
Forretning bestemmer hva og når noe skal i produksjon.
Prodsetting skal være like enkelt som å trykke på en knapp.
Nedetidfri deploy kan løses på følgende måte:
- Sesjonsreplikering i databasen.
- Migrer bakover- og fremoverkompatible databaseendringer (expand).
- Meld ut en node av lastbalansering/reverse proxy.
47. OPPSUMMERING
Du er ikke smidig om du ikke leverer kontinuerlig!
Du kan ikke levere kontinuerlig om du har nedetid!
Forretning bestemmer hva og når noe skal i produksjon.
Prodsetting skal være like enkelt som å trykke på en knapp.
Nedetidfri deploy kan løses på følgende måte:
- Sesjonsreplikering i databasen.
- Migrer bakover- og fremoverkompatible databaseendringer (expand).
- Meld ut en node av lastbalansering/reverse proxy.
- Deploy til noden.
48. OPPSUMMERING
Du er ikke smidig om du ikke leverer kontinuerlig!
Du kan ikke levere kontinuerlig om du har nedetid!
Forretning bestemmer hva og når noe skal i produksjon.
Prodsetting skal være like enkelt som å trykke på en knapp.
Nedetidfri deploy kan løses på følgende måte:
- Sesjonsreplikering i databasen.
- Migrer bakover- og fremoverkompatible databaseendringer (expand).
- Meld ut en node av lastbalansering/reverse proxy.
- Deploy til noden.
- Gjenta for resten av nodene.
49. OPPSUMMERING
Du er ikke smidig om du ikke leverer kontinuerlig!
Du kan ikke levere kontinuerlig om du har nedetid!
Forretning bestemmer hva og når noe skal i produksjon.
Prodsetting skal være like enkelt som å trykke på en knapp.
Nedetidfri deploy kan løses på følgende måte:
- Sesjonsreplikering i databasen.
- Migrer bakover- og fremoverkompatible databaseendringer (expand).
- Meld ut en node av lastbalansering/reverse proxy.
- Deploy til noden.
- Gjenta for resten av nodene.
- Rydd opp i databasen (contract).
50. OPPSUMMERING
Du er ikke smidig om du ikke leverer kontinuerlig!
Du kan ikke levere kontinuerlig om du har nedetid!
Forretning bestemmer hva og når noe skal i produksjon.
Prodsetting skal være like enkelt som å trykke på en knapp.
Nedetidfri deploy kan løses på følgende måte:
- Sesjonsreplikering i databasen.
- Migrer bakover- og fremoverkompatible databaseendringer (expand).
- Meld ut en node av lastbalansering/reverse proxy.
- Deploy til noden.
- Gjenta for resten av nodene.
- Rydd opp i databasen (contract).
51. y
DevO ps Norwa
Dan North
14. november klokken 18:00:
How to build your own Heroku - an experience report.
http://www.meetup.com/DevOps-Norway/
Jeg heter Stein Inge Morisbak og er fagleder for Kointinuerlige Leveranser og DevOps i BEKK. Jeg jobber til daglig som tech lead p&#xE5; teamet som lager Digipost. P&#xE5; Digipost s&#xE5; leverer vi kontinuerlig, og vi har for tiden ca. en kvart million brukere. Da er det ikke s&#xE5; g&#xF8;y &#xE5; ha nedetid n&#xE5;r vi leverer s&#xE5;pass hyppig som vi gj&#xF8;r. I snitt deployer vi en gang i uka, men vi jobber med &#xE5; f&#xE5; enn&#xE5; hyppigere prodsettinger.\n
N&#xE5;r man driver med smidig utvikling s&#xE5; er f&#xF8;rste prinsipp at man skal levere kontinuerlig.\n
Og man skal levere hyppig. Jo oftere desto bedre. Setningen i midten er utdatert, s&#xE5; den stryker jeg.\n
Framdrift m&#xE5;les utelukkende fra fungerende programvare i produksjon. Og jo lenger tid det tar mellom hver produksjonssetting, jo vanskeligere er det &#xE5; m&#xE5;le fremdrift.\n
Kontinuerlig leveranse handler om &#xE5; redusere ledetid fra id&#xE9; til produksjon. Det er forretning som skal sitte i f&#xF8;rersetet og kunne bestemme hva og n&#xE5;r noe skal i produksjon. S&#xE5; kunden kan si at han &#xF8;nsker en endring og f&#xE5; se det i produksjon i l&#xF8;pet av dagen eller enda kortere. Og da skal ikke vi m&#xE5;tte si nei.\n
Da m&#xE5; prodsetting v&#xE6;re like enkelt som &#xE5; trykke p&#xE5; en knapp og vi kan ikke ha nedetid med s&#xE5; hyppige prodsettinger og s&#xE5; mange brukere.\n
Uansett; m&#xE5;ten vi har gjort det p&#xE5; er &#xE5; bruke sesjonsreplikering i databasen. Dette er det st&#xF8;tte for out-of-the box i Jetty. Man legger simpelthen til en JDBCSessionHandler som persisterer brukersesjonene til databasen. Dersom en sesjon ikke eksisterer i minne, s&#xE5; sjekkes databasen for om det finnes en sesjon fra en annen server der, og laster inn sesjonen i minne p&#xE5; den nye serveren. Enkelt - men vi m&#xE5; gj&#xF8;re en ting til (klikk).\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Foran applikasjonsserverne v&#xE5;re har vi en lastbalanserer som ruter brukerne til den samme serveren som de var p&#xE5; sist. Det kan ta litt tid f&#xF8;r lastbalansereren merker at en node er nede, s&#xE5; den vil vente ganske lenge p&#xE5; at applikasjonsserveren er tilgjengelig f&#xF8;r den ruter brukeren til neste server. Brukeren m&#xE5; da vente lenge p&#xE5; &#xE5; f&#xE5; svar. M&#xE5;ten vi har ordnet det p&#xE5; er som f&#xF8;lger. Det starter med at serveren du &#xF8;nsker &#xE5; ta ned for redeploy melder seg selv ut av lastbalanserer-poolen ved &#xE5; endre returstatus for requesten som lastbalansereren poller p&#xE5; fra online til offline (klikk). S&#xE5; venter vi litte grann og fortsetter &#xE5; serve brukere til lastbalansereren har pinget oss og meldt serveren ut av poolen (klikk) . S&#xE5; kan man deploye til serveren som er tatt ned (klikk). Deretter kan man gj&#xF8;re tester mot den nye applikasjonen (klikk) f&#xF8;r vi melder den inn igjen i clusteret (klikk)(klikk). S&#xE5; gj&#xF8;r vi tilsvarende med resterende servere.\n
Den ene knappen som produksjonssetter har vi implementert som et bash-skript. Deployskriptet her er forenklet en del, men ikke s&#xE5; mye. Man angir artefakt og versjon som parameter 1 og 2, henter artefakten fra artefaktrepoet, pakker ut den nye versjonen, stopper applikasjonen, flytter soft-link fra gammel til ny applikasjon og starter den nye applikasjonen. While-loopen p&#xE5; slutten venter til applikasjonen er online igjen f&#xF8;r skriptet avsluttes. S&#xE5; hvis man kaller dette skriptet fra et annet skript for hver server man skal deploye til, s&#xE5; er man sikker p&#xE5; at hver server er online f&#xF8;r neste server deployes.\n
Rollback er enn&#xE5; enklere. Der stopper vi appen. Flytter symlinken fra ny til forrige versjon og starter opp igjen.\n
Det er ikke alle som har Big-Ip som lastbalanserer. Det er en sinnsykt dyr boks for sv&#xE6;re l&#xF8;sninger. Men du kan f&#xE5; til prinsippet ved &#xE5; bruke andre proxier foran applikasjonene dine. Her er et eksempel med Nginx. Hvis nginx oppdager en feil, det vil si connection refused eller en timeout p&#xE5; en upstream server, s&#xE5; failer den over til den neste upstream serveren. I dette tilfellet kaster vi en 502 for &#xE5; indikere at en graceful shutdown p&#xE5;g&#xE5;r. Nginx gj&#xF8;r da en failover til neste upstream server n&#xE5;r den f&#xE5;r en feil, en timeout eller en 502.\n
Apache. (klikk) Vi deployer en ny versjon av applikasjonen p&#xE5; en annen port. Her 8081. (klikk) S&#xE5; endrer vi porten til revers-proxien til 8081 (klikk) og reloader apache configen (klikk).\n
Apache. (klikk) Vi deployer en ny versjon av applikasjonen p&#xE5; en annen port. Her 8081. (klikk) S&#xE5; endrer vi porten til revers-proxien til 8081 (klikk) og reloader apache configen (klikk).\n
Apache. (klikk) Vi deployer en ny versjon av applikasjonen p&#xE5; en annen port. Her 8081. (klikk) S&#xE5; endrer vi porten til revers-proxien til 8081 (klikk) og reloader apache configen (klikk).\n
Apache. (klikk) Vi deployer en ny versjon av applikasjonen p&#xE5; en annen port. Her 8081. (klikk) S&#xE5; endrer vi porten til revers-proxien til 8081 (klikk) og reloader apache configen (klikk).\n
Apache. (klikk) Vi deployer en ny versjon av applikasjonen p&#xE5; en annen port. Her 8081. (klikk) S&#xE5; endrer vi porten til revers-proxien til 8081 (klikk) og reloader apache configen (klikk).\n
Apache. (klikk) Vi deployer en ny versjon av applikasjonen p&#xE5; en annen port. Her 8081. (klikk) S&#xE5; endrer vi porten til revers-proxien til 8081 (klikk) og reloader apache configen (klikk).\n
Apache. (klikk) Vi deployer en ny versjon av applikasjonen p&#xE5; en annen port. Her 8081. (klikk) S&#xE5; endrer vi porten til revers-proxien til 8081 (klikk) og reloader apache configen (klikk).\n
Apache. (klikk) Vi deployer en ny versjon av applikasjonen p&#xE5; en annen port. Her 8081. (klikk) S&#xE5; endrer vi porten til revers-proxien til 8081 (klikk) og reloader apache configen (klikk).\n
Til slutt skal jeg snakke om databasemigrering (klikk) og rollback. Det er et slags h&#xF8;na og egget problem: Databaseendringer kan ikke gjennomf&#xF8;res uten &#xE5; bryte med den eksisterende l&#xF8;sningen, og den nye versjonen virker ikke uten endringene du skal gjennomf&#xF8;re. Ikke bra. Vel det finnes l&#xF8;sninger p&#xE5; det.\n
For eksempel har vi det vi kaller expand/contract pattern. (klikk) Expansion skript er databaseendringer som er trygge &#xE5; legge til uten &#xE5; bryte bakoverkompatibiltet med den eksisterende applikasjonen. Endringer som &#xE5; legge til nye tabeller, legge til kolonner eller &#xE5; tweake indekser faller inn under denne kategorien. (klikk) Contraction-skript er databasemigreringer som rydder opp ting i databasen som ikke trengs lenger etter oppgraderingen. &#xC5; slette kolonner, tabeller eller constraints, og &#xE5; legge til constraints er eksepler p&#xE5; det. Ekspansjonsskriptene kj&#xF8;res f&#xF8;r oppgradering av applikasjonen og contraction-skriptene kj&#xF8;rer n&#xE5;r applikasjonen er oppgradert og stabil. Det er ytterst sjelden at vi gj&#xF8;r andre ting som gj&#xF8;r at ikke applikasjonen kan v&#xE6;re kompatibel med to versjoner av databasen. Og det finnes andre teknikker for &#xE5; f&#xE5; til at for eksempel en kolonne skal endre navn eller flyttes til en ny tabell. Man kan for eksempe bruke triggers og en migreringsjobb.\n
For eksempel har vi det vi kaller expand/contract pattern. (klikk) Expansion skript er databaseendringer som er trygge &#xE5; legge til uten &#xE5; bryte bakoverkompatibiltet med den eksisterende applikasjonen. Endringer som &#xE5; legge til nye tabeller, legge til kolonner eller &#xE5; tweake indekser faller inn under denne kategorien. (klikk) Contraction-skript er databasemigreringer som rydder opp ting i databasen som ikke trengs lenger etter oppgraderingen. &#xC5; slette kolonner, tabeller eller constraints, og &#xE5; legge til constraints er eksepler p&#xE5; det. Ekspansjonsskriptene kj&#xF8;res f&#xF8;r oppgradering av applikasjonen og contraction-skriptene kj&#xF8;rer n&#xE5;r applikasjonen er oppgradert og stabil. Det er ytterst sjelden at vi gj&#xF8;r andre ting som gj&#xF8;r at ikke applikasjonen kan v&#xE6;re kompatibel med to versjoner av databasen. Og det finnes andre teknikker for &#xE5; f&#xE5; til at for eksempel en kolonne skal endre navn eller flyttes til en ny tabell. Man kan for eksempe bruke triggers og en migreringsjobb.\n
Her er et eksempel p&#xE5; forskjellige typiske m&#xF8;nstre for evolusjon av databaser og applikasjoner. Vi starter med database versjon 3. (klikk) S&#xE5; deployer vi en applikasjon som er kompatibel med versjon 3 (klikk). S&#xE5; deployer vi en database som fungerer med forrige og neste versjon av applikasjonen - expansion (klikk). Deretter en applikasjon som er kompatibel med versjon pre 4 og 4. S&#xE5; rydder vi opp og deployer den komplette versjon 4 - contraction. (klikk ) Neste applikasjon er kompatibel med b&#xE5;de database 4 og den kommende versjon 5 (klikk). Vi migrerer versjon 5. (klikk) S&#xE5; deployer vi en ny applikasjon som er kompatibel med kun 5. Og s&#xE5;nn g&#xE5;r nu dagan.\n
Her er et eksempel p&#xE5; forskjellige typiske m&#xF8;nstre for evolusjon av databaser og applikasjoner. Vi starter med database versjon 3. (klikk) S&#xE5; deployer vi en applikasjon som er kompatibel med versjon 3 (klikk). S&#xE5; deployer vi en database som fungerer med forrige og neste versjon av applikasjonen - expansion (klikk). Deretter en applikasjon som er kompatibel med versjon pre 4 og 4. S&#xE5; rydder vi opp og deployer den komplette versjon 4 - contraction. (klikk ) Neste applikasjon er kompatibel med b&#xE5;de database 4 og den kommende versjon 5 (klikk). Vi migrerer versjon 5. (klikk) S&#xE5; deployer vi en ny applikasjon som er kompatibel med kun 5. Og s&#xE5;nn g&#xE5;r nu dagan.\n
Her er et eksempel p&#xE5; forskjellige typiske m&#xF8;nstre for evolusjon av databaser og applikasjoner. Vi starter med database versjon 3. (klikk) S&#xE5; deployer vi en applikasjon som er kompatibel med versjon 3 (klikk). S&#xE5; deployer vi en database som fungerer med forrige og neste versjon av applikasjonen - expansion (klikk). Deretter en applikasjon som er kompatibel med versjon pre 4 og 4. S&#xE5; rydder vi opp og deployer den komplette versjon 4 - contraction. (klikk ) Neste applikasjon er kompatibel med b&#xE5;de database 4 og den kommende versjon 5 (klikk). Vi migrerer versjon 5. (klikk) S&#xE5; deployer vi en ny applikasjon som er kompatibel med kun 5. Og s&#xE5;nn g&#xE5;r nu dagan.\n
Her er et eksempel p&#xE5; forskjellige typiske m&#xF8;nstre for evolusjon av databaser og applikasjoner. Vi starter med database versjon 3. (klikk) S&#xE5; deployer vi en applikasjon som er kompatibel med versjon 3 (klikk). S&#xE5; deployer vi en database som fungerer med forrige og neste versjon av applikasjonen - expansion (klikk). Deretter en applikasjon som er kompatibel med versjon pre 4 og 4. S&#xE5; rydder vi opp og deployer den komplette versjon 4 - contraction. (klikk ) Neste applikasjon er kompatibel med b&#xE5;de database 4 og den kommende versjon 5 (klikk). Vi migrerer versjon 5. (klikk) S&#xE5; deployer vi en ny applikasjon som er kompatibel med kun 5. Og s&#xE5;nn g&#xE5;r nu dagan.\n
Her er et eksempel p&#xE5; forskjellige typiske m&#xF8;nstre for evolusjon av databaser og applikasjoner. Vi starter med database versjon 3. (klikk) S&#xE5; deployer vi en applikasjon som er kompatibel med versjon 3 (klikk). S&#xE5; deployer vi en database som fungerer med forrige og neste versjon av applikasjonen - expansion (klikk). Deretter en applikasjon som er kompatibel med versjon pre 4 og 4. S&#xE5; rydder vi opp og deployer den komplette versjon 4 - contraction. (klikk ) Neste applikasjon er kompatibel med b&#xE5;de database 4 og den kommende versjon 5 (klikk). Vi migrerer versjon 5. (klikk) S&#xE5; deployer vi en ny applikasjon som er kompatibel med kun 5. Og s&#xE5;nn g&#xE5;r nu dagan.\n
Her er et eksempel p&#xE5; forskjellige typiske m&#xF8;nstre for evolusjon av databaser og applikasjoner. Vi starter med database versjon 3. (klikk) S&#xE5; deployer vi en applikasjon som er kompatibel med versjon 3 (klikk). S&#xE5; deployer vi en database som fungerer med forrige og neste versjon av applikasjonen - expansion (klikk). Deretter en applikasjon som er kompatibel med versjon pre 4 og 4. S&#xE5; rydder vi opp og deployer den komplette versjon 4 - contraction. (klikk ) Neste applikasjon er kompatibel med b&#xE5;de database 4 og den kommende versjon 5 (klikk). Vi migrerer versjon 5. (klikk) S&#xE5; deployer vi en ny applikasjon som er kompatibel med kun 5. Og s&#xE5;nn g&#xE5;r nu dagan.\n
Her er et eksempel p&#xE5; forskjellige typiske m&#xF8;nstre for evolusjon av databaser og applikasjoner. Vi starter med database versjon 3. (klikk) S&#xE5; deployer vi en applikasjon som er kompatibel med versjon 3 (klikk). S&#xE5; deployer vi en database som fungerer med forrige og neste versjon av applikasjonen - expansion (klikk). Deretter en applikasjon som er kompatibel med versjon pre 4 og 4. S&#xE5; rydder vi opp og deployer den komplette versjon 4 - contraction. (klikk ) Neste applikasjon er kompatibel med b&#xE5;de database 4 og den kommende versjon 5 (klikk). Vi migrerer versjon 5. (klikk) S&#xE5; deployer vi en ny applikasjon som er kompatibel med kun 5. Og s&#xE5;nn g&#xE5;r nu dagan.\n
Vi bruker liquibase for &#xE5; lage databaseskriptene v&#xE5;re. (klikk)\n
Liquibase er xml-basert, og n&#xE5;r du kj&#xF8;rer sier den for eksempel fra hvis du ikke har skrevet kode for roll-back. Den sier ogs&#xE5; fra om noe er feil med skriptene dine f&#xF8;r du pr&#xF8;ver de mot databasen. Hver release tagges med versjonsnummer i metadata-tabeller i databasen og du kan rulle frem og tilbake mellom versjoner med en enkel kommando. Snedig! (klikk)\n
S&#xE5;; hva har vi sett? \n(klikk) Dersom du skal kunne si at du driver med Smidig, s&#xE5; m&#xE5; du levere kontinuerlig.\n(klikk) Du kan ikke levere kontinuerlig om du har nedetid.\n(klikk) Vi utviklere skal ikke si nei om forretning sier at noe skal i produksjon i l&#xF8;pet av dagen eller enda raskere.\n(klikk) Prodsetting kan ikke v&#xE6;re en tung prosess med masse manuelle steg.\n(klikk) Nedetidfri deploy kan relativt enkelt lages ved &#xE5; (klikk) replikere sesjoner i databasen, (klikk) migrere databaseendringer som ikke bryter kompatibilitet med eksisterende eller ny versjon av applikasjonen, (klikk) meld ut en server av lastbalanserer-poolen, (klikk) og deploy til den ene serveren. (klikk) Gjenta for resten av serverne. (klikk) Rydd opp i databasen med migreringer som kan gj&#xF8;res etter at den nye applikasjonen er produksjonssatt.\nOg selvf&#xF8;lgelig. S&#xF8;rg for &#xE5; lage og teste rollback.\n
S&#xE5;; hva har vi sett? \n(klikk) Dersom du skal kunne si at du driver med Smidig, s&#xE5; m&#xE5; du levere kontinuerlig.\n(klikk) Du kan ikke levere kontinuerlig om du har nedetid.\n(klikk) Vi utviklere skal ikke si nei om forretning sier at noe skal i produksjon i l&#xF8;pet av dagen eller enda raskere.\n(klikk) Prodsetting kan ikke v&#xE6;re en tung prosess med masse manuelle steg.\n(klikk) Nedetidfri deploy kan relativt enkelt lages ved &#xE5; (klikk) replikere sesjoner i databasen, (klikk) migrere databaseendringer som ikke bryter kompatibilitet med eksisterende eller ny versjon av applikasjonen, (klikk) meld ut en server av lastbalanserer-poolen, (klikk) og deploy til den ene serveren. (klikk) Gjenta for resten av serverne. (klikk) Rydd opp i databasen med migreringer som kan gj&#xF8;res etter at den nye applikasjonen er produksjonssatt.\nOg selvf&#xF8;lgelig. S&#xF8;rg for &#xE5; lage og teste rollback.\n
S&#xE5;; hva har vi sett? \n(klikk) Dersom du skal kunne si at du driver med Smidig, s&#xE5; m&#xE5; du levere kontinuerlig.\n(klikk) Du kan ikke levere kontinuerlig om du har nedetid.\n(klikk) Vi utviklere skal ikke si nei om forretning sier at noe skal i produksjon i l&#xF8;pet av dagen eller enda raskere.\n(klikk) Prodsetting kan ikke v&#xE6;re en tung prosess med masse manuelle steg.\n(klikk) Nedetidfri deploy kan relativt enkelt lages ved &#xE5; (klikk) replikere sesjoner i databasen, (klikk) migrere databaseendringer som ikke bryter kompatibilitet med eksisterende eller ny versjon av applikasjonen, (klikk) meld ut en server av lastbalanserer-poolen, (klikk) og deploy til den ene serveren. (klikk) Gjenta for resten av serverne. (klikk) Rydd opp i databasen med migreringer som kan gj&#xF8;res etter at den nye applikasjonen er produksjonssatt.\nOg selvf&#xF8;lgelig. S&#xF8;rg for &#xE5; lage og teste rollback.\n
S&#xE5;; hva har vi sett? \n(klikk) Dersom du skal kunne si at du driver med Smidig, s&#xE5; m&#xE5; du levere kontinuerlig.\n(klikk) Du kan ikke levere kontinuerlig om du har nedetid.\n(klikk) Vi utviklere skal ikke si nei om forretning sier at noe skal i produksjon i l&#xF8;pet av dagen eller enda raskere.\n(klikk) Prodsetting kan ikke v&#xE6;re en tung prosess med masse manuelle steg.\n(klikk) Nedetidfri deploy kan relativt enkelt lages ved &#xE5; (klikk) replikere sesjoner i databasen, (klikk) migrere databaseendringer som ikke bryter kompatibilitet med eksisterende eller ny versjon av applikasjonen, (klikk) meld ut en server av lastbalanserer-poolen, (klikk) og deploy til den ene serveren. (klikk) Gjenta for resten av serverne. (klikk) Rydd opp i databasen med migreringer som kan gj&#xF8;res etter at den nye applikasjonen er produksjonssatt.\nOg selvf&#xF8;lgelig. S&#xF8;rg for &#xE5; lage og teste rollback.\n
S&#xE5;; hva har vi sett? \n(klikk) Dersom du skal kunne si at du driver med Smidig, s&#xE5; m&#xE5; du levere kontinuerlig.\n(klikk) Du kan ikke levere kontinuerlig om du har nedetid.\n(klikk) Vi utviklere skal ikke si nei om forretning sier at noe skal i produksjon i l&#xF8;pet av dagen eller enda raskere.\n(klikk) Prodsetting kan ikke v&#xE6;re en tung prosess med masse manuelle steg.\n(klikk) Nedetidfri deploy kan relativt enkelt lages ved &#xE5; (klikk) replikere sesjoner i databasen, (klikk) migrere databaseendringer som ikke bryter kompatibilitet med eksisterende eller ny versjon av applikasjonen, (klikk) meld ut en server av lastbalanserer-poolen, (klikk) og deploy til den ene serveren. (klikk) Gjenta for resten av serverne. (klikk) Rydd opp i databasen med migreringer som kan gj&#xF8;res etter at den nye applikasjonen er produksjonssatt.\nOg selvf&#xF8;lgelig. S&#xF8;rg for &#xE5; lage og teste rollback.\n
S&#xE5;; hva har vi sett? \n(klikk) Dersom du skal kunne si at du driver med Smidig, s&#xE5; m&#xE5; du levere kontinuerlig.\n(klikk) Du kan ikke levere kontinuerlig om du har nedetid.\n(klikk) Vi utviklere skal ikke si nei om forretning sier at noe skal i produksjon i l&#xF8;pet av dagen eller enda raskere.\n(klikk) Prodsetting kan ikke v&#xE6;re en tung prosess med masse manuelle steg.\n(klikk) Nedetidfri deploy kan relativt enkelt lages ved &#xE5; (klikk) replikere sesjoner i databasen, (klikk) migrere databaseendringer som ikke bryter kompatibilitet med eksisterende eller ny versjon av applikasjonen, (klikk) meld ut en server av lastbalanserer-poolen, (klikk) og deploy til den ene serveren. (klikk) Gjenta for resten av serverne. (klikk) Rydd opp i databasen med migreringer som kan gj&#xF8;res etter at den nye applikasjonen er produksjonssatt.\nOg selvf&#xF8;lgelig. S&#xF8;rg for &#xE5; lage og teste rollback.\n
S&#xE5;; hva har vi sett? \n(klikk) Dersom du skal kunne si at du driver med Smidig, s&#xE5; m&#xE5; du levere kontinuerlig.\n(klikk) Du kan ikke levere kontinuerlig om du har nedetid.\n(klikk) Vi utviklere skal ikke si nei om forretning sier at noe skal i produksjon i l&#xF8;pet av dagen eller enda raskere.\n(klikk) Prodsetting kan ikke v&#xE6;re en tung prosess med masse manuelle steg.\n(klikk) Nedetidfri deploy kan relativt enkelt lages ved &#xE5; (klikk) replikere sesjoner i databasen, (klikk) migrere databaseendringer som ikke bryter kompatibilitet med eksisterende eller ny versjon av applikasjonen, (klikk) meld ut en server av lastbalanserer-poolen, (klikk) og deploy til den ene serveren. (klikk) Gjenta for resten av serverne. (klikk) Rydd opp i databasen med migreringer som kan gj&#xF8;res etter at den nye applikasjonen er produksjonssatt.\nOg selvf&#xF8;lgelig. S&#xF8;rg for &#xE5; lage og teste rollback.\n
S&#xE5;; hva har vi sett? \n(klikk) Dersom du skal kunne si at du driver med Smidig, s&#xE5; m&#xE5; du levere kontinuerlig.\n(klikk) Du kan ikke levere kontinuerlig om du har nedetid.\n(klikk) Vi utviklere skal ikke si nei om forretning sier at noe skal i produksjon i l&#xF8;pet av dagen eller enda raskere.\n(klikk) Prodsetting kan ikke v&#xE6;re en tung prosess med masse manuelle steg.\n(klikk) Nedetidfri deploy kan relativt enkelt lages ved &#xE5; (klikk) replikere sesjoner i databasen, (klikk) migrere databaseendringer som ikke bryter kompatibilitet med eksisterende eller ny versjon av applikasjonen, (klikk) meld ut en server av lastbalanserer-poolen, (klikk) og deploy til den ene serveren. (klikk) Gjenta for resten av serverne. (klikk) Rydd opp i databasen med migreringer som kan gj&#xF8;res etter at den nye applikasjonen er produksjonssatt.\nOg selvf&#xF8;lgelig. S&#xF8;rg for &#xE5; lage og teste rollback.\n
S&#xE5;; hva har vi sett? \n(klikk) Dersom du skal kunne si at du driver med Smidig, s&#xE5; m&#xE5; du levere kontinuerlig.\n(klikk) Du kan ikke levere kontinuerlig om du har nedetid.\n(klikk) Vi utviklere skal ikke si nei om forretning sier at noe skal i produksjon i l&#xF8;pet av dagen eller enda raskere.\n(klikk) Prodsetting kan ikke v&#xE6;re en tung prosess med masse manuelle steg.\n(klikk) Nedetidfri deploy kan relativt enkelt lages ved &#xE5; (klikk) replikere sesjoner i databasen, (klikk) migrere databaseendringer som ikke bryter kompatibilitet med eksisterende eller ny versjon av applikasjonen, (klikk) meld ut en server av lastbalanserer-poolen, (klikk) og deploy til den ene serveren. (klikk) Gjenta for resten av serverne. (klikk) Rydd opp i databasen med migreringer som kan gj&#xF8;res etter at den nye applikasjonen er produksjonssatt.\nOg selvf&#xF8;lgelig. S&#xF8;rg for &#xE5; lage og teste rollback.\n
S&#xE5;; hva har vi sett? \n(klikk) Dersom du skal kunne si at du driver med Smidig, s&#xE5; m&#xE5; du levere kontinuerlig.\n(klikk) Du kan ikke levere kontinuerlig om du har nedetid.\n(klikk) Vi utviklere skal ikke si nei om forretning sier at noe skal i produksjon i l&#xF8;pet av dagen eller enda raskere.\n(klikk) Prodsetting kan ikke v&#xE6;re en tung prosess med masse manuelle steg.\n(klikk) Nedetidfri deploy kan relativt enkelt lages ved &#xE5; (klikk) replikere sesjoner i databasen, (klikk) migrere databaseendringer som ikke bryter kompatibilitet med eksisterende eller ny versjon av applikasjonen, (klikk) meld ut en server av lastbalanserer-poolen, (klikk) og deploy til den ene serveren. (klikk) Gjenta for resten av serverne. (klikk) Rydd opp i databasen med migreringer som kan gj&#xF8;res etter at den nye applikasjonen er produksjonssatt.\nOg selvf&#xF8;lgelig. S&#xF8;rg for &#xE5; lage og teste rollback.\n
S&#xE5;; hva har vi sett? \n(klikk) Dersom du skal kunne si at du driver med Smidig, s&#xE5; m&#xE5; du levere kontinuerlig.\n(klikk) Du kan ikke levere kontinuerlig om du har nedetid.\n(klikk) Vi utviklere skal ikke si nei om forretning sier at noe skal i produksjon i l&#xF8;pet av dagen eller enda raskere.\n(klikk) Prodsetting kan ikke v&#xE6;re en tung prosess med masse manuelle steg.\n(klikk) Nedetidfri deploy kan relativt enkelt lages ved &#xE5; (klikk) replikere sesjoner i databasen, (klikk) migrere databaseendringer som ikke bryter kompatibilitet med eksisterende eller ny versjon av applikasjonen, (klikk) meld ut en server av lastbalanserer-poolen, (klikk) og deploy til den ene serveren. (klikk) Gjenta for resten av serverne. (klikk) Rydd opp i databasen med migreringer som kan gj&#xF8;res etter at den nye applikasjonen er produksjonssatt.\nOg selvf&#xF8;lgelig. S&#xF8;rg for &#xE5; lage og teste rollback.\n
S&#xE5;; hva har vi sett? \n(klikk) Dersom du skal kunne si at du driver med Smidig, s&#xE5; m&#xE5; du levere kontinuerlig.\n(klikk) Du kan ikke levere kontinuerlig om du har nedetid.\n(klikk) Vi utviklere skal ikke si nei om forretning sier at noe skal i produksjon i l&#xF8;pet av dagen eller enda raskere.\n(klikk) Prodsetting kan ikke v&#xE6;re en tung prosess med masse manuelle steg.\n(klikk) Nedetidfri deploy kan relativt enkelt lages ved &#xE5; (klikk) replikere sesjoner i databasen, (klikk) migrere databaseendringer som ikke bryter kompatibilitet med eksisterende eller ny versjon av applikasjonen, (klikk) meld ut en server av lastbalanserer-poolen, (klikk) og deploy til den ene serveren. (klikk) Gjenta for resten av serverne. (klikk) Rydd opp i databasen med migreringer som kan gj&#xF8;res etter at den nye applikasjonen er produksjonssatt.\nOg selvf&#xF8;lgelig. S&#xF8;rg for &#xE5; lage og teste rollback.\n