Amazon Web Services Case Fonecta TIE-23600 Palvelupohjaiset järjestelmät 2014-15 Tapio Rautonen Ohjelmistoarkkitehti, Gofore Oy tapio.rautonen@gofore.com http://fi.linkedin.com/in/trautonen https://github.com/trautonen www.gofore.com 2014 Gofore - Tapio Rautonen 7.11.2014 1
Luentojen sisältö Tiistai (12-14) Gofore lyhyesti Case Fonecta Työkalut ja teknologiat Käytetyt AWS-palvelut Keskiviikko (klo 14-16) AWS arkkitehtuuri Käytetyt ratkaisumallit Mitä on opittu? 2014 Gofore - Tapio Rautonen 7.11.2014 2
Gofore Oy Vuonna 2001 perustettu IT-johdon konsultoinnin ja tietojärjestelmien kehittämisen asiantuntijayritys Vahvassa kasvussa oleva yritys Liikevaihto 6 MEUR (2013) Ennustettu liikevaihto yli 9 MEUR (2014) Vajaa 90 asiantuntijaa Taloudellisesti vakavarainen työnantaja Liikevoitto yli 10 % viimeiset yhdeksän vuotta Soliditetin AAA-luottoluokitus vuodesta 2006 yhtäjaksoisesti Toimistot Helsingissä ja Tampereella Työilmapiirin kouluarvosana 9.47 Työyhteisön yhteishenki 9.45 Suvaitsevaisuus 9.30 Tasavertainen kohtelu asemastani riippumatta 9.39 Tasa-arvoinen kohtelu sukupuolestani riippumatta 9.67 Henkilöstötyytyväisyystutkimus 11/2013, Barona IT 2014 Gofore - Tapio Rautonen 7.11.2014 3
Case Fonecta Vuoden 2011 lopulla aloitettiin Amazonin pilvi-infrastruktuurin käyttö uusissa projekteissa AWS palveluita kokeiltiin ensimmäisenä Osuma.fi-palvelussa Dynaaminen monitoimittajaprojektitiimi, jota johtaa Fonecta Vuonna 2012 Fonecta.fi ja Eniro.fi -palvelut yhdistettiin uudeksi Fonecta.fi-palveluksi Amazonin pilvi-infrastruktuurin päälle Vuosien 2012-2014 aikana toteutettu yli 35 sovellusta tai palvelua 2014 Gofore - Tapio Rautonen 7.11.2014 4
Case Fonecta työkalut Lähtökohtana mahdollisimman automatisoitu ympäristö Chef pilvi-infrastruktuurin hallinta ja sovellusten päivitys keskitetty hallinta, asiakasohjelma virtuaalipalvelimella devops ei ole vain buzzword Jenkins jatkuvan integraation palvelin sovellusten julkaisu, testiautomaatio julkaisujen ylennys eri ympäristöihin Nexus artifaktirepositorio vain julkaistuja artifakteja voi ottaa käyttöön New Relic palvelinten ja sovellusten valvonta SAAS pilvipalvelu 2014 Gofore - Tapio Rautonen 7.11.2014 5
Case Fonecta teknologiat ja sovelluskehykset Palvelut Versionhallinta Java, Scala, JavaScript Git, Bitbucket Tomcat, Jetty, Netty Jersey (JAX-RS), Play Framework Käyttöliittymät Apache CXF (JAX-WS) HTML5, Freemarker, Jade, AngularJS Guice, NodeJS JavaScript, CoffeeScript Solr, ElasticSearch CSS3, LESS MySQL, MongoDB Hibernate, Morphia, ReactiveMongo Jackson, ModelMapper JUnit, ScalaTest, Selenium, Robot Framework 2014 Gofore - Tapio Rautonen 7.11.2014 6
Käytetyt AWS palvelut Amazon Virtual Private Cloud (VPC) eristetty palvelu-infrastruktuuri Amazon Elastic Compute Cloud (EC2) virtuaalipalvelin Elastic Load Balancing kuormantasaaja Amazon Simple Storage Service (S3) staattisten resurssien tietovarasto Amazon CloudFront staattisten resurssien välimuisti Amazon Relational Database Service (RDS) relaatiotietokanta (MySQL, Oracle, PostgreSQL, Microsoft SQL Server) Amazon ElastiCache muistinvarainen välimuisti 2014 Gofore - Tapio Rautonen 7.11.2014 7
Käytetyt AWS palvelut Amazon Simple Queue Service (SQS) hajautettu viestijono Amazon Simple Email Service (SES) sähköpostin lähetyspalvelu Amazon Route 53 nimipalvelu Amazon CloudWatch pilvipalveluiden valvonta 2014 Gofore - Tapio Rautonen 7.11.2014 8
Käytetyt AWS palvelut numeroin 230+ EC2 virtuaalipalvelinta 100+ ELB kuormantasaajaa (julkiset ja sisäiset) 25 SQS viestijonoa 12 RDS relaatiotietokantaa 10 ElastiCache välimustia 6 CloudFront välimuistia 2 VPN yhteyttä 1 S3 staattisten resurssien tallennuspalvelu 190+ Jenkins tehtävää 150+ Git repositoriota 2014 Gofore - Tapio Rautonen 7.11.2014 9
Amazon Virtual Private Cloud (VPC) Tarjoaa eristetyn pilvialueen omaan käyttöön ja mahdollistaa virtuaalisen verkkotopologian rakentamisen Kaikki Fonectan palvelut ovat VPC sisäverkossa eikä niihin ei ole suoraa pääsyä internetistä pääsy NAT palvelimen kautta ja SSH tunneleilla (vaihtoehtoisesti VPN, joka maksaa) käyttäjien SSH avaimia hallitaan etcd-palvelulla, reaaliaikainen oikeuksien lisäys ja poisto vain kuormantasaajia näkyy internetiin ja niillä ohjataan liikennettä VPC:n sisälle Lisää tietoturvaa ja säästää kustannuksia datasiirtomaksut eivät päde VPC:n sisällä mikään palvelin ei ole suoraan internetissä, joten hyökkäyksiä on hankala tehdä SSH tunnelointi tuo lisähaasteita erityisesti Windows kehittäjille Palvelut jaettu eri Availability Zoneille VPC:n sisällä 2014 Gofore - Tapio Rautonen 7.11.2014 10
Amazon Elastic Compute Cloud (EC2) Virtuaalipalvelimilla käytetään Amazonin omaa Linux AMI jakelua perustuu RedHat 5.x ja RedHat 6.x jakeluihin binääriyhteensopiva RedHat 5.x ja Centos 5.x jakeluiden kanssa Varusohjelmat ja käyttöjärjestelmä alustetaan Chefin avulla tyhjästä toimiva virtuaalikone muutamassa minuutissa Virtuaalipalvelin voi hajota Werner Vogels: "Everything fails all the time" palvelimet usealle Availability Zonelle autoskaalauksella korjataan hajonneet instanssit Käytössä erikokoisia perusinstansseja perusinstanssit eivät ole nykymittapuulla arvioituna kovin tehokkaita erikoisinstansseissa käyttökustannukset nousevat huomattavasti aloita pienellä, skaalaa tarvittaessa horisontaalisesti ja vertikaalisesti instanssin tyyppi määriteltävä käyttötarkoituksen mukaan 2014 Gofore - Tapio Rautonen 7.11.2014 11
Elastic Load Balancing Internetistä tulevan liikenteen sekä VPC:n sisäisen liikenteen kuormantasaus Pääsynhallinnalla voidaan rajoittaa pääsyä kuormantasaajan kautta palveluihin ELB skaalautuu automaattisesti ei mahdollista saada staattista IP:tä, voi olla ongelma ulkoisten palomuurien kanssa Tukee health check sivuja rekisteröidyillä instansseilla health check sivun toteutus kriittinen mutta kun 0 instanssia on toiminnassa, tarjoaa vain tyhjän HTTP 503 virhesivun ominaisuus jota on pyydetty Amazonilta jo pitkään, mutta sitä ei ole edelleenkään saatavilla tilanne täytyy ennakoida ja hallita ohjaus kuormantasaajalta omalle virhesivulle nyt tosin mahdollista toteuttaa virheohjaus Route 53 nimipalvelun avulla SSL pysäytys kuormantasaajaan sovelluspalvelinten vaatima prosessoriaika vähenee oikea konteksti käsiteltävä sovelluksissa HTTP-otsikon avulla (X-Forwarded-Proto) 2014 Gofore - Tapio Rautonen 7.11.2014 12
Amazon Simple Storage Service (S3) Internetin yli toimiva staattisten resurssien tallennusvarasto Hyödynnetään erilaisissa käyttötarkoituksissa sovellusten staattisten resurssien varasto sisällöntuotannon julkaisupaikka integraatiokanava tietolatauksille Tarjoaa resursseille pääsynhallinnan mutta esimerkiksi komentorivityökaluissa on vaihteleva tuki näille Resurssit eivät muodosta oikeasti hakemistorakennetta, vaan niillä on vain yksilöllinen avain tietyllä tavalla muodostetut avaimet voidaan kuitenkin näyttää asiakasohjelmissa ikään kuin hakemistoina Resursseille mahdollista asettaa meta-tietoja esimerkiksi HTTP-otsikoita 2014 Gofore - Tapio Rautonen 7.11.2014 13
Amazon CloudFront Staattisten resurssien välimuisti tehokkaaseen sisällön jakeluun Lähin EC2 ja S3 palvelinkeskus on Irlannissa, CloudFront palveluita saa Tukholmasta Käytetään dynaamisen sisällön sekä S3 resurssien välimuistina Lokakuusta 2013 lähtien tuki käytännössä kaikille HTTP metodeille GET, OPTIONS, POST, PUT, DELETE, OPTIONS ja PATCH mahdollistaa dynaamisten sivustojen viemisen kokonaan välimuistin taakse Mahdollista liittää oma domain CNAME:n avulla tukee nyt myös omia SSL sertifikaatteja CloudFront noudattaa Cache-Control HTTP-otsikoita oletusvälimustiaika on 24 tuntia otsikoiden kanssa täytyy olla huolellinen välimuistin tuhoaminen työlästä ja kallista 2014 Gofore - Tapio Rautonen 7.11.2014 14
Amazon Relational Database Service (RDS) Relaatiotietokantapalvelu MySQL, Oracle, PostgreSQL, Microsoft SQL Server Replikointimahdollisuus multi-az replikointi MySQL lukureplika Perusratkaisussa vaihtelevan nopea I/O useita instanssivaihtoehtoja, suorituskyky kannattaa evaluoida vakionopeuksinen I/O lisäkustannuksella Helppo ylläpitää päivitykset voidaan tehdä automaattisesti valitun huoltoikkunan aikana tietokanta uudelleenkäynnistetään tarvittaessa automaattisesti Konfiguraation vaikeus saattaa yllättää esimerkiksi MySQL triggereiden käyttöönotto vaatii parametriryhmien määrittelyn ja käyttöönoton 2014 Gofore - Tapio Rautonen 7.11.2014 15
Amazon ElastiCache Muistinvarainen välimuisti toteutuksena MemCached tai Redis klusteroitu Matalan latenssin ja suuren suorituskyvyn avain-arvoparimuisti esimerkiksi käyttäjien sessiot, tietokantojen välimuisti, väliaikainen tiedon tallennus Halvempi käyttää ja ylläpitää kun paikalliset välimuistit EC2 virtuaalipalvelimilla paikalliset välimuistit tehokkaampia (ei verkkolatenssia) paikallisissa välimuisteissa tieto ei välttämättä ole yhdenmukaista ja synkronoitua Lisätty tuki käytölle VPC:n sisällä rajoitti aiemmin huomattavasti käyttöä 2014 Gofore - Tapio Rautonen 7.11.2014 16
Amazon Simple Queue Service (SQS) Hajautettu viestijono Pysyvä viestien tallennus mutta maksimissaan vain 14 päivää Ei transaktioita toteutetaan näkyvyysajan avulla lukijan on tuhottava luettu viesti voi olla mahdollista että sama viesti luetaan useaan kertaan Java SDK:ssa tuki asynkronisille toiminnoille Pitkää viestiodotuspyyntöä kannattaa käyttää maksimissaan 20 sekunnin odotus vähentää kustannuksia ja suoritusaikaa kuluttavia odottavia silmukoita sovelluksessa SNS:n avulla viestit voidaan monistaa useisiin jonoihin 2014 Gofore - Tapio Rautonen 7.11.2014 17
Muita palveluita Elastic BeansTalk yksinkertainen ajoympäristö Java-ympäristö kehno, mutta mahdollista käyttää Docker-säiliöitä OpsWorks Amazonin oma infrastruktuurin hallintatyökalu yhteensopiva Chefin kanssa DynamoDB web scale nosql ennustettava suorituskyky Elastic MapReduce Hadoop As A Service helppo provisioida jopa tuhansia laskentayksiköitä CloudFormation mallipohjainen infrastruktuurin provisiointi infrastruktuurin formaali dokumentointi ja samankaltaisten ympäristöjen nopea rakennus 2014 Gofore - Tapio Rautonen 7.11.2014 18
AWS arkkitehtuuri Internet VPC A1 A1 A1 A2 A2 EC SSH tunnel SSH tunnel NAT A3 A3 SQS RDS 2014 Gofore - Tapio Rautonen 7.11.2014 19
Käytetyt ratkaisumallit Uuden virtuaalikone-instanssin käyttöönotto koneen rakennus tyhjästä Palveluiden korkea saatavuus toteutus ja saatavuuden valvonta Sovellusten jatkuva integraatio ja katkoton päivittäminen build promotion blue-green deployment Automaattinen skaalaus horisontaalisesti skaalautuvat palvelut Sisällönjulkaisuverkko ajonaikainen malli päivitysaikainen malli 2014 Gofore - Tapio Rautonen 7.11.2014 20
Käytetyt ratkaisumallit uuden instanssin käyttöönotto Uusi instanssi luodaan Amazon Linux AMI julkaisun päälle Skripti asentaa Chef asiakasohjelman tyhjään instanssiin hakee instanssin tageista Chef nimet, roolit ja ympäristöt Chef asiakasohjelma ajaa halutun roolin, joka alustaa instanssin Instanssille määritellään Chef rooli rooli kuvaa mikä instanssin tehtävä on mitä Chef asiakasohjelma asentaa ja konfiguroi palvelimelle rooliin liittyy yksi tai useampi resepti jonka avulla tarkemmat määritykset kuvataan roolin asetuksen jälkeen Chef asiakasohjelman ajo riittää instanssin käyttöönottoon Chef palvelimella hallitaan rooliin liittyviä määrityksiä roolit määritellään usein projekteittain mutta myös projektien sisällä saattaa olla useita rooleja riippuen kuinka paljon projektiin liittyy erilaisia palveluita kehittäjillä iso vastuu infrastruktuurin ja virtuaalipalvelinten hallinnassa Devops 2014 Gofore - Tapio Rautonen 7.11.2014 21
Käytetyt ratkaisumallit korkea saatavuus Kaikki palvelut vähintään kahdella palvelimella palvelimet autoskaalausryhmässä kuormantasaajan takana VPC:n sisällä jaettu vähintään kahdelle Availability Zonelle autoskaalaus korjaa hajonneet palvelimet Jatkuva palveluiden ja palvelinten valvonta perusvalvonta Amazonin CloudWatchin avulla palvelinten ja sovellusten valvonta New Relicissä Pingdom, Zabbix, jne. palveluiden seurantaan StatusPage.io tilanneseuranta sisäiseen ja asiakkaiden käyttöön Keskitetty käyttäjäsessioiden hallinta (Redis) sessiot voimassa, vaikka palvelimet hajoavat mahdollistaa täysin katkottoman sovellusten päivittämisen 2014 Gofore - Tapio Rautonen 7.11.2014 22
Käytetyt ratkaisumallit jatkuva integraatio ja julkaisu Muutos versionhallinnassa käynnistää jatkuvan integraation palvelimella tehtävän Testit läpäisevä versio julkaistaan artifaktirepositorioon Jokainen julkaisu viedään Amazonissa ajettavaan testiympäristöön Jo olemassa olevia julkaisuja voidaan ylentää eri ympäristöihin (Build Promotion) Päivitys käynnistetään jatkuvan integraation palvelimelta Jenkins ja Chef tekevät päivitysprosessissa yhteistyötä knife ssh -työkalulla etsitään rooliin ja ympäristöön liittyvät instanssit, joille ajetaan Chef asiakasohjelma joukko shell skriptejä ja kasa ruby koodia Kun päivitys on valmis ja palvelu vastaa healthcheck-testiin 3 kertaa, luodaan levykuva levykuva pudotetaan autoskaalausryhmään instanssien tila identtinen ja nopeutetaan päivitysprosessia kun instansseja on paljon etcd-palvelulla hallitaan pääsyoikeuksia ja palvelinten varusohjelmien päivityksiä nähdään keskitetysti varusohjelmien versiot ja mahdolliset tietoturvaongelmat 2014 Gofore - Tapio Rautonen 7.11.2014 23
Käytetyt ratkaisumallit jatkuva integraatio ja julkaisu update update DEV Build 1 2014 Gofore - Tapio Rautonen 7.11.2014 24
Käytetyt ratkaisumallit jatkuva integraatio ja julkaisu update update DEV update update DEV Build 1 Build 2 2014 Gofore - Tapio Rautonen 7.11.2014 25
Käytetyt ratkaisumallit jatkuva integraatio ja julkaisu update update DEV update update DEV Build 1 Build 2 promote promote QA 2014 Gofore - Tapio Rautonen 7.11.2014 26
Käytetyt ratkaisumallit jatkuva integraatio ja julkaisu update update DEV update update DEV update update DEV Build 1 Build 2 Build 3 promote promote QA 2014 Gofore - Tapio Rautonen 7.11.2014 27
Käytetyt ratkaisumallit jatkuva integraatio ja julkaisu update update DEV update update DEV update update DEV Build 1 Build 2 Build 3 promote promote promote promote QA QA 2014 Gofore - Tapio Rautonen 7.11.2014 28
Käytetyt ratkaisumallit jatkuva integraatio ja julkaisu update update DEV update update DEV update update DEV update update DEV Build 1 Build 2 Build 3 Build 4 promote promote promote promote QA QA 2014 Gofore - Tapio Rautonen 7.11.2014 29
Käytetyt ratkaisumallit jatkuva integraatio ja julkaisu update update DEV update update DEV update update DEV update update DEV Build 1 Build 2 Build 3 Build 4 promote promote promote promote promote promote QA PROD QA 2014 Gofore - Tapio Rautonen 7.11.2014 30
Käytetyt ratkaisumallit blue-green deployment Katkoton jatkuvan tuotantoonviennin päivitysmalli Kaksi identtistä ympäristöä (blue ja green) toinen ympäristöistä aktiivinen Päivitys inaktiiviseen ympäristöön onnistuneen päivityksen jälkeen reititys vaihdetaan ympäristöstä toiseen Helppo tehdä palautus epäonnistuneen päivityksen jälkeen Inaktiivisessa ympäristössä tehdään viimeiset savutestit varmistetaan että palveluiden healthcheck on kunnossa voidaan suorittaa ylimääräisiä testejä 2014 Gofore - Tapio Rautonen 7.11.2014 31
Käytetyt ratkaisumallit blue-green deployment A v1 A v1 A v1 2014 Gofore - Tapio Rautonen 7.11.2014 32
Käytetyt ratkaisumallit blue-green deployment 1. build green ASG with v2 A v1 A v1 A v1 A v2 A v2 A v2 2014 Gofore - Tapio Rautonen 7.11.2014 33
Käytetyt ratkaisumallit blue-green deployment 1. build green ASG with v2 2. verify healthcheck and smoke tests healthcheck smoke test A v1 A v1 A v1 A v2 A v2 A v2 2014 Gofore - Tapio Rautonen 7.11.2014 34
Käytetyt ratkaisumallit blue-green deployment 1. build green ASG with v2 2. verify healthcheck and smoke tests 3. connect green ASG to ELB A v1 A v1 A v1 A v2 A v2 A v2 2014 Gofore - Tapio Rautonen 7.11.2014 35
Käytetyt ratkaisumallit blue-green deployment 1. build green ASG with v2 2. verify healthcheck and smoke tests 3. connect green ASG to ELB 4. disconnect blue ASG from ELB A v1 A v1 A v1 A v2 A v2 A v2 2014 Gofore - Tapio Rautonen 7.11.2014 36
Käytetyt ratkaisumallit blue-green deployment 1. build green ASG with v2 2. verify healthcheck and smoke tests 3. connect green ASG to ELB 4. disconnect blue ASG from ELB 5. terminate blue ASG rollback to blue ASG A v2 A v2 A v2 2014 Gofore - Tapio Rautonen 7.11.2014 37
Automaattinen skaalaus Tuotantoympäristöjen skaalaus kuorman mukaan yöllä vähemmän liikennettä, tarvitaan vähemmän resursseja kuormituspiikit (joulukorttiruuhka) Instanssit pystytetään valmiista levykuvasta nopea provisiointiaika voidaan varmistua, että kaikki instanssit ovat samassa tilassa Huoltovarmuus rikkinäiset instanssit korjautuvat itsestään sovelluksen kaatuminen käynnistää instanssin vaihdon Skaalaus liitetty prosessorikuormaan voi olla joskus liian karkea tai hidas mittari Virtuaalipalvelimilla pidetään vain ajettava sovellus ja sen konfiguraatio logit keskitettyyn varastoon (logstash / Splunk) tuhottuja instansseja mahdoton selvitellä jälkikäteen 2014 Gofore - Tapio Rautonen 7.11.2014 38
Käytetyt ratkaisumallit sisällönjulkaisuverkko Sisällönjulkaisuverkko kahdella erilaisella ratkaisumallilla Ajonaikainen malli sisältö palvellaan dynaamisesti sovelluspalvelimilta CloudFrontin läpi käytössä on todellisuudessa vain yksi versio resursseista haasteena yksittäin päivitettävät sovellukset kuormantasaajan takana Päivitysaikainen malli sisältö siirretään päivityksen yhteydessä S3 varastoon, josta se palvellaan CloudFrontin läpi mahdollistaa resurssien useiden eri versioiden olemassaolon yhtä aikaa resurssien siivoaminen ja julkaisuprosessi monimutkaistaa päivitystä 2014 Gofore - Tapio Rautonen 7.11.2014 39
Käytetyt ratkaisumallit sisällönjulkaisuverkko / ajonaikainen /js/main.js request CloudFront CDN VHost Application /companies.html request App VHost 2014 Gofore - Tapio Rautonen 7.11.2014 40
Käytetyt ratkaisumallit sisällönjulkaisuverkko / päivitysaikanen /js/main.js request CloudFront S3 deploy assets /companies.html request App Vhost Application deploy app Jenkins 2014 Gofore - Tapio Rautonen 7.11.2014 41
Mitä on opittu? Kertakäyttöiset virtuaalipalvelimet palvelinten hajoamisella ei väliä ei tarvetta edes SSH yhteydelle, koneilla säilötään vain ajettava sovellus Platform As A Service jokainen käytetty palvelu on vähemmän infrastruktuuria ja koodia ylläpidettäväksi kehity alustan mukana, mutta onko vaihtoehtoja kun kerran on sisällä Konfiguraationhallinta konfiguraatio niin yksinkertaisena kuin mahdollista kehitysympäristöt pitää olla mallia kloonaa ja aja Palvelupohjainen arkkitehtuuri ei yksittäisiä vikaantumispisteitä, horisontaalinen skaalaus palveluiden välinen viestintä vikasietoisilla asynkronisilla viesteillä itsenäiset mikropalvelut 2014 Gofore - Tapio Rautonen 7.11.2014 42
Kiitos mielenkiinnosta Sähköisten palveluiden RAKENNUSTOIMISTO Avoimuudella, riippumattomuudella ja toimintalähtöisyydellä saadaan aikaan tietojärjestelmiä, jotka aidosti palvelevat tuottavuuden tekijöiden arkea. 2014 Gofore - Tapio Rautonen 7.11.2014 43