Amazon Web Services Case Fonecta Palvelupohjaiset järjestelmät TIE-23600 Tapio Rautonen Vanhempi ohjelmistosuunnittelija, Gofore Oy tapio.rautonen@gofore.com www.linkedin.com/in/trautonen/ www.gofore.com 2013 Gofore - Tapio Rautonen 8.10.2013 1
Luentojen sisältö Tiistai (klo 12-14) Gofore lyhyesti, uramahdollisuuksia Case Fonecta Fonectan käyttämät Amazonin pilvipalvelut Keskiviikko (klo 14-16) Käytetyt ratkaisumallit Kysymyksiä, keskustelua 2013 Gofore - Tapio Rautonen 8.10.2013 2
Gofore Oy Vuonna 2001 perustettu IT-johdon konsultoinnin ja tietojärjestelmien kehittämisen asiantuntijayritys Vahvassa kasvussa oleva yritys Liikevaihto 3,7 MEUR (2012) Ennustettu liikevaihto 6 MEUR (2013) 58 asiantuntijaa (~ 20 uutta tänä vuonna) Taloudellisesti vakavarainen työnantaja Liikevoitto yli 10 % viimeiset kahdeksan vuotta Soliditetin AAA-luottoluokitus yli viisi vuotta Suomen Asiakastiedon Rating Alfa AA+ viitenä vuonna peräkkäin Toimistot Helsingissä ja Tampereella Henkilöstötyytyväisyys Työilmapiirin kouluarvosana 9.44 Työyhteisön yhteishenki 9.53 Suvaitsevaisuus 9.50 Tasavertainen kohtelu asemastani riippumatta 9.16 Tasa-arvoinen kohtelu sukupuolestani riippumatta 9.42 Henkilöstötyytyväisyystutkimus 11/2012, Barona IT Gofore oli vertailuryhmän paras kaikilla osa-alueilla 2013 Gofore - Tapio Rautonen 8.10.2013 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 Vuoden 2012 ja 2013 aikana toteutettu yli 35 sovellusta tai palvelua 2013 Gofore - Tapio Rautonen 8.10.2013 4
Case Fonecta käytetyt 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 2013 Gofore - Tapio Rautonen 8.10.2013 5
Case Fonecta käytetyt teknologiat ja sovelluskehykset Palvelut Tomcat, Jetty (Servlet container) Apache Camel Jersey (JAX-RS) Apache CXF (JAX-WS / JAX-RS clients) Guice Solr, Voikko MySQL, MongoDB Hibernate, Morphia Jackson, ModelMapper JUnit, Selenium, Robot Framework Versionhallinta Git Käyttöliittymät HTML5, Freemarker JavaScript, CoffeeScript CSS3, LESS 2013 Gofore - Tapio Rautonen 8.10.2013 6
Käytetyt AWS palvelut Amazon Virtual Private Cloud (VPC) mikään palvelu ei ole suoraan näkyvissä ulkoverkkoon Amazon Elastic Compute Cloud (EC2) sovellusten ajoympäristöt, jatkuvan integraation palvelin Elastic Load Balancing julkiset ja sisäiset kuormantasaajat Amazon Simple Storage Service (S3) staattisten resurssien tallennus Amazon CloudFront staattisten resurssien välimuisti Amazon Relational Database Service (RDS) sovellusten käyttämät relaatiotietokannat (MySQL) Amazon ElastiCache sovellusten muistinvarainen välimuisti 2013 Gofore - Tapio Rautonen 8.10.2013 7
Käytetyt AWS palvelut Amazon Simple Queue Service (SQS) sovellusten käyttämät viestijonot Amazon Simple Email Service (SES) sähköpostin lähetyspalvelu Amazon Route 53 nimipalvelu Amazon CloudWatch pilvipalveluiden valvonta 2013 Gofore - Tapio Rautonen 8.10.2013 8
Käytetyt AWS palvelut numeroin 115+ EC2 virtuaalipalvelinta 70+ ELB kuormantasaajaa (julkiset ja sisäiset) 10 RDS relaatiotietokantaa 9 ElastiCache välimustia 6 SQS viestijonoa 4 CloudFront välimuistia 2 VPN yhteyttä 1 S3 staattisten resurssien tallennuspalvelu 110 Jenkins tehtävää 70 Git repositoriota 2013 Gofore - Tapio Rautonen 8.10.2013 9
Amazon Virtual Private Cloud (VPC) Tarjoaa itsenäisen pilvialueen omaan käyttöön ja mahdollistaa virtuaalisen verkkotopologian rakentamisen Kaikki Fonectan palvelut ovat VPC:n sisäverkossa ja 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 Chefin avulla 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ä 2013 Gofore - Tapio Rautonen 8.10.2013 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 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 tulee määritellä käyttötarkoituksen mukaan 2013 Gofore - Tapio Rautonen 8.10.2013 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 Tukee SSL pysäytystä sovelluspalvelinten kuorma vähenee oikea konteksti käsiteltävä sovelluksissa HTTP-otsikon avulla (X-Forwarded-Proto) 2013 Gofore - Tapio Rautonen 8.10.2013 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 2013 Gofore - Tapio Rautonen 8.10.2013 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 Tukee vain GET ja HEAD metodeja kokonaisen palvelun välimuistittaminen ei todennäköisesti onnistu Mahdollista liittää oma domain CNAME:n avulla lisätty tuki myös omille sertifikaateille lähiaikoina CloudFront noudattaa Cache-Control HTTP-otsikoita oletusvälimustiaika on 24 tuntia otsikoiden kanssa täytyy olla huolellinen Voidaan rakentaa sisällönjakeluverkko joka huomioi käyttäjien maantieteellisen sijainnin 2013 Gofore - Tapio Rautonen 8.10.2013 14
Amazon Relational Database Service (RDS) Klusteroitu relaatiotietokanta MySQL Oracle SQL Server mutta ei PostgreSQL Perusratkaisussa vaihtelevan nopea I/O 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 2013 Gofore - Tapio Rautonen 8.10.2013 15
Amazon ElastiCache Muistinvarainen välimuisti toteutuksena MemCached tai Redis klusteroitu 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 hiljattain tuki käytölle VPC:n sisällä rajoitti aiemmin huomattavasti käyttöä Puntarointi resurssien käytön, suorituskyvyn, ylläpidon ja kustannusten välillä 2013 Gofore - Tapio Rautonen 8.10.2013 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 2013 Gofore - Tapio Rautonen 8.10.2013 17
Käytetyt ratkaisumallit Uuden virtuaalikone-instanssin käyttöönotto koneen rakennus tyhjästä Palveluiden korkea saatavuus toteutus ja saatavuuden valvonta Sovellusten katkoton päivittäminen build promotion automaattinen päivitys kuormantasaajan takana Sisällönjulkaisuverkko ajonaikainen malli päivitysaikainen malli Automaattinen skaalaus (tekeillä) 2013 Gofore - Tapio Rautonen 8.10.2013 18
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 2013 Gofore - Tapio Rautonen 8.10.2013 19
Käytetyt ratkaisumallit korkea saatavuus Kaikki palvelut vähintään kahdella palvelimella palvelimet julkisen kuormantasaajan takana VPC:n sisällä jaettu vähintään kahdelle Availability Zonelle Jatkuva palveluiden ja palvelinten valvonta perusvalvonta Amazonin CloudWatchin avulla palvelinten ja sovellusten valvonta New Relicissä Pingdom julkisten palveluiden seurantaan StatusPage.io tilanneseuranta sisäiseen ja asiakkaiden käyttöön Keskitetty käyttäjäsessioiden hallinta sessiot voimassa, vaikka palvelimet hajoavat mahdollistaa täysin katkottoman sovellusten päivittämisen 2013 Gofore - Tapio Rautonen 8.10.2013 20
Käytetyt ratkaisumallit sovellusten katkoton päivittäminen Sovellukset julkaistaan artifaktirepositorioon jokaisesta muutoksesta versionhallintaan 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 sovellukset päivitetään kuormantasaajien taakse yksi kerrallaan ei katkoja samalla voidaan suorittaa instansseille käyttöjärjestelmäpäivitykset Katkottomuus vaatii keskitetyn sessionhallinnan käyttäjien sessiot on siirretty sovelluspalvelimilta virtuaalikoneilla ajettavaan replikoituun MongoDB tietokantaan 2013 Gofore - Tapio Rautonen 8.10.2013 21
Käytetyt ratkaisumallit sovellusten katkoton päivittäminen update update DEV Build 1 2013 Gofore - Tapio Rautonen 8.10.2013 22
Käytetyt ratkaisumallit sovellusten katkoton päivittäminen update update DEV update update DEV Build 1 Build 2 2013 Gofore - Tapio Rautonen 8.10.2013 23
Käytetyt ratkaisumallit sovellusten katkoton päivittäminen update update DEV update update DEV Build 1 Build 2 promote promote QA 2013 Gofore - Tapio Rautonen 8.10.2013 24
Käytetyt ratkaisumallit sovellusten katkoton päivittäminen update update DEV update update DEV update update DEV Build 1 Build 2 Build 3 promote promote QA 2013 Gofore - Tapio Rautonen 8.10.2013 25
Käytetyt ratkaisumallit sovellusten katkoton päivittäminen update update DEV update update DEV update update DEV Build 1 Build 2 Build 3 promote promote promote promote QA QA 2013 Gofore - Tapio Rautonen 8.10.2013 26
Käytetyt ratkaisumallit sovellusten katkoton päivittäminen 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 2013 Gofore - Tapio Rautonen 8.10.2013 27
Käytetyt ratkaisumallit sovellusten katkoton päivittäminen 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 2013 Gofore - Tapio Rautonen 8.10.2013 28
Käytetyt ratkaisumallit sovellusten katkoton päivittäminen Jenkins ELB Chef Client Chef Server EC2 2013 Gofore - Tapio Rautonen 8.10.2013 29
Käytetyt ratkaisumallit sovellusten katkoton päivittäminen Jenkins ELB Chef Client Chef Server EC2 promote 2013 Gofore - Tapio Rautonen 8.10.2013 30
Käytetyt ratkaisumallit sovellusten katkoton päivittäminen Jenkins ELB Chef Client Chef Server EC2 promote check instances 2013 Gofore - Tapio Rautonen 8.10.2013 31
Käytetyt ratkaisumallit sovellusten katkoton päivittäminen Jenkins ELB Chef Client Chef Server EC2 promote check instances remove instance 2013 Gofore - Tapio Rautonen 8.10.2013 32
Käytetyt ratkaisumallit sovellusten katkoton päivittäminen Jenkins ELB Chef Client Chef Server EC2 promote check instances remove instance run 2013 Gofore - Tapio Rautonen 8.10.2013 33
Käytetyt ratkaisumallit sovellusten katkoton päivittäminen Jenkins ELB Chef Client Chef Server EC2 promote check instances remove instance run get configuration 2013 Gofore - Tapio Rautonen 8.10.2013 34
Käytetyt ratkaisumallit sovellusten katkoton päivittäminen Jenkins ELB Chef Client Chef Server EC2 promote check instances remove instance run get configuration update server 2013 Gofore - Tapio Rautonen 8.10.2013 35
Käytetyt ratkaisumallit sovellusten katkoton päivittäminen Jenkins ELB Chef Client Chef Server EC2 promote check instances remove instance run get configuration update server attach instance 2013 Gofore - Tapio Rautonen 8.10.2013 36
Käytetyt ratkaisumallit sisällönjulkaisuverkko Sisällönjulkaisuverkko toteutettu 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ä 2013 Gofore - Tapio Rautonen 8.10.2013 37
Käytetyt ratkaisumallit sisällönjulkaisuverkko / ajonaikainen /js/main.js request CloudFront CDN VHost Application /companies.html request App VHost 2013 Gofore - Tapio Rautonen 8.10.2013 38
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 2013 Gofore - Tapio Rautonen 8.10.2013 39
Automaattinen skaalaus (tekeillä) Tuotantoympäristöjen skaalaus kuorman mukaan yöllä vähemmän liikennettä, tarvitaan enemmän resursseja kuormituspiikit (joulukorttiruuhka) Kehitys- ja testiympäristöjen alasajo öisin kehitys- ja testiympäristöjä käytetään pääsääntöisesti toimistoaikaan on kuitenkin huomioitava integraatioiden ja eräajojen testaus ja jatkuvuus Haasteita käyttöönotossa miten varmistutaan, että kaikki instanssit ovat samassa tilassa varusohjelmat, sovellukset ja palvelut logit paikallisilla palvelimilla ja siirretään erä-ajoilla talteen mitä tehdään logeille, joita ei ole vielä siirretty muihin varastoihin tarvitaan varattuja instansseja aina tietty vähimmäismäärä vähintään yksi instanssi / AZ MongoDB replicaset 2013 Gofore - Tapio Rautonen 8.10.2013 40
Kiitos mielenkiinnosta Sähköisten palveluiden RAKENNUSTOIMISTO Avoimuudella, riippumattomuudella ja toimintalähtöisyydellä saadaan aikaan tietojärjestelmiä, jotka aidosti palvelevat tuottavuuden tekijöiden arkea. 2013 Gofore - Tapio Rautonen 8.10.2013 41