Amazon Redshift Parallel Scaling Guide ja testitulokset
Skyengillä käytämme Amazon Redshiftiä, mukaan lukien rinnakkaisskaalaus, joten tämä Stefan Gromoll, dotgo.comin perustaja, intermix.io-sivustolla oli kiinnostava. Käännöksen jälkeen hieman kokemustamme tietoinsinööri Daniyar Belkhodzhaevilta.
Amazon Redshift -arkkitehtuuri mahdollistaa skaalauksen lisäämällä uusia solmuja klusteriin. Tarve selviytyä pyyntöjen huippumäärästä voi johtaa solmujen ylivalvontaan. Samanaikaisuuden skaalaus, toisin kuin uusien solmujen lisääminen, lisää laskentatehoa tarpeen mukaan.
Amazon Redshift -rinnakkaisskaalaus antaa Redshift-klustereille lisäkapasiteettia huippupyyntömäärien käsittelyyn. Se toimii siirtämällä pyynnöt uusiin "rinnakkaisryhmiin" taustalla. Pyynnöt reititetään WLM-määritysten ja sääntöjen perusteella.
Rinnakkaisskaalaushinnoittelu perustuu luottomalliin, jossa on ilmainen taso. Ilmaisten luottojen lisäksi maksu perustuu aikaan, jolloin Parallel Scaling Cluster käsittelee pyynnöt.
Kirjoittaja testasi rinnakkaisskaalausta yhdessä sisäisistä klustereista. Tässä viestissä hän kertoo testituloksista ja antaa vinkkejä alkuun pääsemiseen.
Klusterin vaatimukset
Jotta voit käyttää rinnakkaisskaalausta, Amazon Redshift -klusterisi on täytettävä seuraavat vaatimukset:
Rinnakkaisskaalaus ei sovellu kaikentyyppisille kyselyille. Ensimmäisessä versiossa se käsittelee vain lukupyynnöt, jotka täyttävät kolme ehtoa:
— SELECT-kyselyt ovat vain luku -muotoisia (vaikka lisää tyyppejä suunnitellaan);
— kysely ei viittaa taulukkoon, jonka lajittelutyyli on INTERLEAVED;
- Kysely ei käytä Amazon Redshift Spectrumia viittaamaan ulkoisiin taulukoihin.
Jotta pyyntö voidaan reitittää Parallel Scaling Clusteriin, se on asetettava jonoon. Lisäksi jonoon kelpaavat kyselyt SQA (lyhyen kyselyn kiihdytys), ei toimi rinnakkaisen mittakaavan klustereissa.
Jonot ja SQA vaativat oikean määrityksen Redshift Workload Management (WLM). Suosittelemme optimoimaan WLM:si ensin - tämä vähentää rinnakkaisskaalauksen tarvetta. Ja tämä on tärkeää, koska rinnakkaisskaalaus on ilmaista vain tietyn tunnin ajan. AWS väittää, että rinnakkaisskaalaus on ilmaista 97 prosentille asiakkaista, mikä vie meidät hinnoittelukysymykseen.
Rinnakkaisskaalauksen kustannukset
AWS tarjoaa luottomallin rinnakkaisskaalaukseen. Jokainen aktiivinen klusteri Amazonin punainen siirto Kerää krediittejä tunneittain, jopa yksi tunti ilmaisia rinnakkaisskaalauspisteitä päivässä.
Maksat vain, kun Parallel Scaling Clusters -käyttösi ylittää saamiesi hyvitysten määrän.
Kustannukset lasketaan sekunnissa on-demand -hinnalla rinnakkaisklusterille, jota käytetään vapaan hinnan yläpuolella. Sinua veloitetaan vain pyyntöjesi ajalta, ja vähintään yhden minuutin maksu joka kerta, kun Rinnakkaisskaalausklusteri aktivoidaan. Sekunti on-demand -hinta lasketaan yleisten hinnoitteluperiaatteiden mukaisesti Amazonin punainen siirto, eli se riippuu solmun tyypistä ja klusterin solmujen lukumäärästä.
Rinnakkaisskaalauksen käynnistäminen
Rinnakkaisskaalaus käynnistetään jokaiselle WLM-jonolle. Siirry AWS Redshift -konsoliin ja valitse vasemmasta navigointivalikosta Workload Management. Valitse klusterin WLM-parametriryhmä seuraavasta avattavasta valikosta.
Näet jokaisen jonon vieressä uuden sarakkeen nimeltä "Concurrency Scaling Mode". Oletusasetus on "Ei käytössä". Napsauta "Muokkaa" ja voit muuttaa kunkin jonon asetuksia.
kokoonpano
Rinnakkaisskaalaus toimii välittämällä asianmukaiset pyynnöt uusiin dedikoituihin klustereihin. Uusilla klustereilla on sama koko (tyyppi ja solmujen lukumäärä) kuin pääklusterilla.
Rinnakkaisskaalaukseen käytettyjen klustereiden oletusmäärä on yksi (1), ja yhteensä voidaan määrittää enintään kymmenen (10) klusteria.
Rinnakkaisskaalauksen klusterien kokonaismäärä voidaan asettaa parametrilla max_concurrency_scaling_clusters. Tämän parametrin arvon kasvattaminen tuottaa lisää redundantteja klustereita.
seuranta
AWS Redshift -konsolissa on saatavilla useita lisäkaavioita. Max Configured Concurrency Scaling Clusters -kaavio näyttää max_concurrency_scaling_clusters-arvon ajan kuluessa.
Aktiivisten skaalausklusterien määrä näkyy käyttöliittymässä "Concurrency Scaling Activity" -osiossa:
Kyselyt-välilehdessä on sarake, joka osoittaa, suoritettiinko kysely pääklusterissa vai rinnakkaisskaalausklusterissa:
Riippumatta siitä, suoritettiinko tietty kysely pääklusterissa vai rinnakkaisen skaalausklusterin kautta, se tallennetaan kansioon stl_query.concurrency_scaling_status.
Arvo 1 osoittaa, että kysely suoritettiin rinnakkaismittakaavaklusterissa, kun taas muut arvot osoittavat, että se suoritettiin ensisijaisessa klusterissa.
Esimerkiksi:
Samanaikaisuuden skaalaustiedot on tallennettu myös joihinkin muihin taulukoihin ja näkymiin, kuten SVCS_CONCURRENCY_SCALING_USAGE. Lisäksi on useita luettelotaulukoita, jotka tallentavat tietoja rinnakkaisskaalauksesta.
Tulokset
Kirjoittajat aloittivat yhden jonon rinnakkaisskaalauksen sisäisessä klusterissa noin klo 18 GMT 30. Muuttivat max_concurrency_scaling_clusters-parametrin arvoon 00 noin klo 29.03.2019 3.
Pyyntöjonon simuloimiseksi pienensimme tämän jonon aikavälien määrää 15:stä 5:een.
Alla on intermix.io-koontinäyttökaavio, joka näyttää käynnissä olevien ja jonossa olevien pyyntöjen määrän paikkojen määrän vähentämisen jälkeen.
Näemme, että jonossa olevien pyyntöjen odotusaika on pidentynyt, maksimiaika on yli 5 minuuttia.
Tässä on oleellista tietoa AWS-konsolista tänä aikana tapahtuneesta:
Redshift käynnisti kolme (3) rinnakkaista skaalausklusteria määritetyllä tavalla. Vaikuttaa siltä, että nämä klusterit olivat vajaakäytössä, vaikka monet klusterimme pyynnöt olivat jonossa.
Muutaman tunnin kuluttua kirjoittajat tarkistivat jonon ja näytti siltä, että 6 pyyntöä oli käynnissä rinnakkain skaalaus. Testasimme myös satunnaisesti kaksi pyyntöä käyttöliittymän kautta. Emme ole tarkistaneet, kuinka näitä arvoja käytetään, kun useita rinnakkaisia klustereita on aktiivisia kerralla.
Tulokset
Rinnakkaisskaalaus voi vähentää aikaa, jonka pyynnöt viettävät jonossa huippukuormituksen aikana.
Perustestin tulosten perusteella kävi ilmi, että latauspyyntöjen tilanne on osittain parantunut. Rinnakkaisskaalaus ei kuitenkaan yksinään ratkaissut kaikkia samanaikaisuusongelmia.
Tämä johtuu rajoituksista, jotka koskevat kyselytyyppejä, jotka voivat käyttää rinnakkaisskaalausta. Tekijöillä on esimerkiksi monia taulukoita, joissa on lomitettuja lajitteluavaimia, ja suurin osa työmäärästämme on kirjoittamista.
Vaikka rinnakkaisskaalaus ei ole yleinen ratkaisu WLM:n määrittämiseen, tämän ominaisuuden käyttäminen on yksinkertaista ja suoraviivaista.
Siksi kirjoittaja suosittelee sen käyttöä WLM-jonoissasi. Aloita yhdestä rinnakkaisklusterista ja seuraa huippukuormitusta konsolin kautta selvittääksesi, ovatko uudet klusterit täysin käytössä.
Kun AWS lisää tuen lisäkyselytyypeille ja -taulukoille, rinnakkaisskaalauksen pitäisi vähitellen muuttua tehokkaammaksi.
Me Skyengissä huomasimme myös heti esiin nousevan rinnakkaisskaalauksen mahdollisuuden.
Toimivuus on erittäin houkutteleva, varsinkin kun otetaan huomioon, että AWS arvioi, että useimpien käyttäjien ei tarvitse edes maksaa siitä ylimääräistä.
Sattui niin, että huhtikuun puolivälissä saimme Redshift-klusteriin epätavallisen paljon pyyntöjä. Tänä aikana turvauduimme usein Concurrency Scalingiin; joskus ylimääräinen klusteri toimi 24 tuntia vuorokaudessa ilman taukoa.
Tämä mahdollisti ellei ongelman ratkaisemisen kokonaan jonoilla, niin ainakin tilanteen hyväksymisen.
Havaintomme ovat suurelta osin yhtenevät intermix.io:n kavereiden vaikutelmien kanssa.
Huomasimme myös, että vaikka jonossa oli pyyntöjä, kaikkia pyyntöjä ei välitetty välittömästi rinnakkaisklusteriin. Ilmeisesti näin tapahtuu, koska rinnakkaisklusterin käynnistyminen vie vielä aikaa. Tästä johtuen lyhytaikaisten ruuhkahuippujen aikana meillä on edelleen pieniä jonoja ja vastaavilla hälytyksillä on aikaa laukea.
Päästyämme eroon epänormaalista kuormituksesta huhtikuussa, siirryimme AWS:n odotusten mukaisesti satunnaiseen käyttöön - vapaan normin sisällä.
Voit seurata rinnakkaisskaalauskustannuksiasi AWS Cost Explorerissa. Sinun on valittava Service - Redshift, Usage Type - CS, esimerkiksi USW2-CS:dc2.large.