Canva siirsi istuntojen peruutukset S3:een ja leikkasi välimuistin muistinkulutusta 87,5 prosenttia

Canvan istuntojen peruutukset

Canva on uudistanut istuntojen peruutusten käsittelyjärjestelmänsä vastaamaan satojen miljoonien aktiivisten istuntojen muodostamaan kuormaan. Uudessa arkkitehtuurissa peruutustiedot tallennetaan Amazon S3:een pieninä muuttumattomina tietueina ja jaetaan sovellusyhdyskäytäville paikallisiksi muistissa toimiviksi indekseiksi.

Muutoksen tavoitteena oli vähentää riippuvuutta verkkotietokannoista autentikoinnin yhteydessä. Canvan mukaan ratkaisu nopeutti käyttöönottoja, vähensi tarvittavaa tietokantainfrastruktuuria ja pienensi peruutusvälimuistin muistinkulutusta 87,5 prosenttia.

Miljoonat peruutukset kuormittivat MySQL-tietokantaa

Canva säilyttää istuntotiedot salatuissa selainevästeissä. Tämän ansiosta yhdyskäytävä pystyy normaalisti todentamaan käyttäjän ilman erillistä tietokantakyselyä. Ongelmaksi muodostuvat kuitenkin perutut istunnot ja käyttöoikeuksien muutokset, joiden täytyy näkyä järjestelmässä nopeasti.

Aiemmin Canva säilytti 12 tunnin peruutustiedot muistissa, mutta järjestelmän kasvaessa välimuistin rakentamisesta tuli raskasta. Käyttöönoton yhteydessä sadat gateway-instanssit saattoivat kukin hakea MySQL:stä yli miljoona peruutustietuetta. Tämä aiheutti suuren, samanaikaisen kuormituspiikin tietokantaan.

Canva harkitsi Redis-pohjaista ratkaisua, mutta päätyi Amazon S3:een välttääkseen uuden erillisen tietovaraston ylläpidon.

Peruutukset jaetaan 30 minuutin S3-tiedostoihin

Uudessa mallissa 12 tunnin peruutusikkuna jaetaan 30 minuutin mittaisiin S3-objekteihin. Jokainen peruutus tallennetaan vain 16 tavun binäärisenä tietueena, joka sisältää käyttäjään liittyvän tunnisteen ja aikaleiman.

Tietueet järjestetään lajitelluiksi taulukoiksi, joista yhdyskäytävät voivat tehdä suoria hakuja muistissa. Kompakti rakenne selittää suuren osan saavutetusta muistinsäästöstä. Jopa miljoonan peruutuksen sisältävä kokonaisuus vie Canvan mukaan noin 16 megatavua.

Gateway ohjelmistot hakevat muuttuneet osat S3:n ehdollisilla GET-pyynnöillä ja poistavat yli 12 tuntia vanhat tiedot. Taustalla toimivat worker-prosessit puolestaan etsivät uusia peruutuksia, yhdistävät ne uusimpaan osioon ja tallentavat päivitetyn version S3:een.

Samanaikaisten päivitysten hallinnassa käytetään ehdollisia PUT-operaatioita optimistiseen lukitukseen. ZooKeeperin leader election vähentää päällekkäisten päivitysten määrää, mutta Canva korostaa, ettei järjestelmän oikeellisuus ole siitä riippuvainen.

Gateway voi palautua ilman tietokannan apua

Uusi rakenne helpottaa myös palveluiden käynnistämistä ja palautumista häiriöistä. Gateway-instanssin ei tarvitse rakentaa peruutusvälimuistiaan tietokannasta, vaan se voi ladata tarvittavat osiot suoraan S3:sta.

Canvan mukaan taustaprosessi kykenee käsittelemään yli 2 000 peruutusta sekunnissa, mikä ylittää yhtiön arvioimat normaalit kapasiteettitarpeet. Samalla käyttöönotot nopeutuivat, koska satojen gateway-instanssien käynnistyminen ei enää aiheuta vastaavaa yhtäaikaista kuormaa MySQL:lle.

Muutoksen jälkeen Canva pystyi pienentämään istuntojen peruutuksiin käytettävän tietokantaympäristön kahteen lukureplikaan redundanssia varten. Tietokannan kuormitus riippuu nyt enemmän todellisesta sivustoliikenteestä ja uusien peruutusten määrästä kuin siitä, kuinka monta gateway-instanssia järjestelmässä käynnistyy.

Ratkaisu on kiinnostava esimerkki S3:n käyttämisestä muuhunkin kuin tavalliseen objektien säilyttämiseen. Muuttumattomien objektien, ehdollisten kirjoitusten ja paikallisten muistihakemistojen yhdistelmällä Canva pystyi poistamaan suuren osan autentikointijärjestelmänsä tietokantariippuvuudesta ilman uuden suuren hajautetun tietovaraston rakentamista.