amazon web services - "scaling from the trenches"
TRANSCRIPT
Amazon Web Services“Scaling from the trenches”
Nemanja Krivokapić
Software Engineer
@NemanjaKr | LinkedIn
Auto Scaling Group - ASG
Održava konstantan broj „zdravih“ instanci
Koristi Scaling polise za skaliranje
Scaling polise aktivira predefinisani alarm
Alarm koristi metrike dostupne sa CloudWatch
Moguće koristiti sopstvene metrike umesto
predefinisanih
Moguće koristiti ELB-ove metrike kako
za skaliranje tako i za definisanje
„zdravih“ instanci
Elastic Load Balancer - ELB
Elastic = broj instanci unutar ELB-a skalira po
potrebi
Nije projektovan da izdrži iznenadni pik
saobraćaja već mu je potrebno vreme da
skalira
Proverava „zdrave“ instance preko HTTP(S),
TCP ili SSL protokola.
ASG prijavljuje EC2 instance ELB-u.
SSL/TLS terminacija
Projektni zadatak #1- Zahtevi
Android aplikacija koja na osnovu slika prostora
generiše 3D model istog
Korišćenje algoritama za rekonstrukciju
prostora zahteva resurse i vreme
Korisnički i administrativni portali su web
aplikacije
Komunikacija uglavnom preko
REST hybrid API-a
Projektni zadatak #1 - Problemi
Obezbediti obradu u realnom vremenu
Bezbednost podataka
Mogućnost oporavka od greške i gubitka
podataka
Struktura podataka prilagođena radu sa 3D
grafikom
Kratke iteracije do release-a – dvonedeljni
SCRUM sprint-ovi.
Projektni zadatak #1 – Specifičnosti rešenja
Gearman Job Server
PHP platforma (Zend Framework 2)
SimpleDB + CouchDB + Parse*
2x ELB (sa i bez sticky session-a)
Google Cloud Messaging za notifikaciju android
klijenta
*Parse je nezavistan servis
Projektni zadatak #1 – Moguća unapređenja
Izbacivanje SimpleDB-a i prebacivanje DB-a na
MongoDB + MySQL RDS rešenje.
Zamena Gearman Job Servera Amazon SQS-
om
Slanje push notifikacija preko Amazon SNS-a
....
Projektni zadatak #2- Zahtevi
Administracija uređaja iz Cloud-a
SaaS platforma
Brz odziv sistema bez obzira na load
Sigurnost podataka
Projektni zadatak #2 - Problemi
Obezbediti brz odziv sistema kod više desetina
zahteva u sekundi
Efikasno korišćenje resursa
Sigurnost podataka u slučaju bilo kakvog kvara
Mogućnost generisanja i distribucija različitih
paketa u realnom vremenu
Projektni zadatak #2 – Specifičnosti rešenja
Multitenancy
Java – Spring (MVC/Security/Data)
Oslanja se u potpunosti na AWS rešenja
(SES, SQS, RDS, S3 + CloudFront)
40req/sec na m1.small
Skalabilnost implementirana isključivo AWS
alatima
Projektni zadatak #2 – ASG konfiguracija
ASG (min 2, desired 2, max 10)
ASG Health Check Grace – 420sec
ASG Default Cooldown – 60sec
ASG scale down policy:
Average CPUUtilization < 30% in 300sec
Cooldown 120sec
ASG scale up policy:
Average CPUUtilization > 70% in 8min
Cooldown 330sec
Projektni zadatak #2 – ELB konfiguracija
HTTP HealthCheck
Timout 5sec
Interval 30sec
Unhealthy threshold: 2
Healthy threshold: 2
Connection draining: 60sec
Projektni zadatak #2 – Moguća unapređenja
RDS Read Replicas (HAPROXY?)
Statički sadržaj sa CDN-a umesto Web instanci
Korišćenje sopstvene metrike na CW-u za
scaling polise (veća kontrola nad procesom
skaliranja)
Pouke
Rad nezavistan od same instance
“Inspect and Adapt”
Distribuirane web aplikacije !=(=) klasične web
aplikacije
CI itekako preporučljiv
Skaliranje je dobrodošlo a ne krajnja nužda