View Single Post
Jeg drifter en nettside som har høye krav til oppetid og også ofte opplever stor pågang i korte tidsrom.

Jeg har identifisert to 3 store feilkilder som jeg har prøvde å eliminere:

1) Tap av 1 enkelt server (disker og annen maskinvare som feiler)
2) Tap av hele datasenteret (strømmen går for eksempel)
3) Stor pågang gjør at nettsiden kneler

Kode og data er skilt. Selve nettsiden er pakket i Docker konteinere og kjøres av Amazon ECS med auto scaling. Auto scaling systemet styrer de underliggende virtuelle maskinene som kjører Docker. Hvis en maskin feiler eller CPU last blir for høy bestiller auto scaling systemet flere virtuelle maskiner automatisk. Når CPU lasten synker igjen skrues en og en maskin av til man kommer til en stabil tilstand igjen.

Auto scaling er koblet opp med AWS Elastic Load Balancing (ELB) lastbalanserer. Så snart en ny virtuelle maskin er bestilt legges den inn i ELB og ELB kjører en del tester. Fungerer maskinen vil den ble puttet inn i poolen og begynne å svare brukere. ELB kjører tester på alle virtuelle maskiner hvert minutt. Hvis noen feiler testene eller tilkoblinger begynner å feile skrues maskinen av og auto scaling starter en ny maskin. Les mer om dette på https://aws.amazon.com/blogs/compute...th-amazon-ecs/


Data lagres i Postgres som kjørers med Amazon Relational Database Service (RDS) som replikerer data på flere maskiner.


Alt i ECS og RDS spres automatisk over flere "availability zones". Availability zones er separate datasenter som har sin egne separate bygning, med separat strøm og nettverk, men ligger typisk ved siden av hverandre.


Jeg lener meg mye på Amazon her, men fordelen er at man får et veldig tolerant oppsett som rimelig greit å sette opp. Mesteparten kan bli satt opp fra ECS gui. Pris for 3 små virtuelle maskiner og RDS med 2 noder ligger på rundt 1 000 kr pr måned (men dette øker fort ethvert som man trenger flere resurser).