STACCi soovitussüsteem arhitektuuri vaatenurgast

STACCi soovitussüsteem arhitektuuri vaatenurgast

2016-2017 aasta tegevused

STACCi esimene soovitussüsteem valmis 2016 aastal. Tegemist on e-kirjade soovitussüsteemiga, mis annab kampaaniatoodete hulgast personaliseeritud soovitusi ja aitab e-poel kampaaniakirju luua. STACCi loodud soovitussüsteemide kohta saate täpsemalt lugeda siit.

Soovitussüsteem
Peamine suhtlus soovitussüsteemiga toimub läbi kasutajaliidese (dashboard). Kasutajaliidesesse pääsemiseks on tarvis ühenduda kliendi võrku. Kasutajaliideses on võimalik luua uusi kampaaniaid, valida sobiv masinõppe mudel, täpsustada kampaania tooteid ja kasutajaid ning kohandada kliendispetsiifilised ärireeglid. Seejärel käivitatakse mudeli treenimisprotsess ja genereeritakse igale kasutajale isikupärastatud soovitused. Kampaania lõppedes on võimalik luua aruanne kampaania tulemusnäitajatega (KPI, key performance indicator), mis annab ülevaate sellest, kuidas soovitused muutsid klientide ostukäitumist ehk kui head soovitused olid.

Süsteemi disain
STACCi soovitussüsteem on arendatud peamiselt Pythonis ja tegemist on sisuliselt ühe suure (monolithic) Django rakendusega. Rakendus pärib treenimiseks vajalikud andmed otse kliendi andmebaasist, kuid kirjutamisõigust tal sinna pole. Rakendus kasutab kahte eri tüüpi andmebaase: kohalik failisüsteem ja SQLite andmebaas. Terve süsteem ja kõik selle protsessid talletavad logide formaadis igal sammul oma tegevuste kohta infot.

Süsteemi paigaldamine
Kliendil oli konkreetne nõue, et lahendus paigaldataks nende infrastruktuuri. Paigaldamise tegi keeruliseks asjaolu, et kliendi süsteemile pääses ligi vaid läbi kaugtöölaua ühenduse (remote desktop). Samuti ei olnud STACCil tol hetkel veel piisavalt CI/CD ning automatiseerimise kogemust.
Soovitussüsteem
Joonis 1. STACCi esimese, 2016. aastal ehitatud soovitussüsteemi arhitektuur.

2017-2018 aasta tegevused

Pärast esimese töötava soovitussüsteemi loomist, selle vigadest õppimist, teadmiste omandamist, otsustas STACC välja töötada uue soovitussüsteemi, mis oleks suunatud (Magento) veebipoodidele ning suudaks neile reaalajas soovitusi anda.

Magento laiendus ja API
Esimeseks väljakutseks oli veebipoodidest andmete sünkroonimine. Kõigile on teada, et ilma andmeteta ei ole võimalik luua hästitoimivat soovitussüsteemi – seejuures, mida rohkem, seda uhkem! Andmete reaalajas vastuvõtmiseks pidi STACC ehitama kaks uut komponenti: API, mis andmeid vastu võtaks ja andmebaasi sisestaks, ning Magento laiendus, mis saadaks reaalajas andmeid(sündmused nagu toote vaatamine, ostukorvi lisamine, ostmine jms) kliendi veebipoest STACCi. Magento laiendus paigaldatakse kliendi veebipoe külge.

Elasticsearch (& ärireeglid)
Klientide veebipoodides reaalajas soovituste tegemiseks otsustas STACC kasutada hajutatud, avatud lähtekoodiga otsingu- ja analüüsimootorit nimega Elasticsearch. Kõik klientide tooted salvestatakse Elasticsearchi ja selles tehakse erinevaid päringud (koos ärireeglitega), et leida parimad tooted (soovitused) valitud kasutajatele. Kahjuks selgus mõne aja möödudes, et ärireeglite lisamine, haldamine ja säilitamine on Elasticsearchiga üsna tülikas  ja mitteskaleeruv protsess.

Mudeli analüüsija
Selleks, et näha, millised näevad välja kasutajatele loodud personaalsed soovitused, loodi tööriist nimega mudeli analüüsija (model explorer). See tööriist võimaldab visualiseerida igale kasutajale leitud soovitusi erinevate toodete ja mudelite lõikes. Lihtsamalt öeldes on see tööriist, mis laseb nii andmeteadlasel kui ka äriinimesel mudeli soovitusi visuaalselt hinnata.

Monitoorimissüsteem
Kuna STACC pakkus teenust korraga mitmele kliendile, oli tarvis omada ülevaadet, kuidas süsteem erinevate klientide keskkondades töötab. Kliendi kasutajaliides andis hea ülevaate, kuidas meie süsteem toimib ärilises mõttes, kuid vajasime süsteemi haldamiseks ülevaadet ka tehnilise poole pealt – vigadest, versioonihaldusest, riistvara koormusest jne. Probleemi lahendamiseks ehitasime ettevõttesisese monitoorimissüsteemi, mis andis hea ülevaate eelnevalt mainitud aspektide osas.

“Võtmed kätte” soovitussüsteem
Meie kliendibaasi kasvades saime aru, et kõikide klientide süsteemide eraldi haldamine on kulukas, kuna klientide vajadused on mingil määral erinevad. Seetõttu otsustas STACC välja töötada oma karbitoote – “võtmed kätte” soovitussüsteem. Sellise soovitussüsteemi peamiseks eesmärgis oli see, et igal veebipoel oleks võimalik meie süsteemiga liituda ja enda keskkonda meie soovitussüsteem paigaldada. Kasutajaliideses on võimalik kõike seda teha, sealhulgas hallata ärireegleid jms. Ühtlasi oli oluline, et võimalikult paljud protsessid oleksid automatiseeritud – andmete sünkroniseerimine, mudeli treenimine (koos ärireeglitega) ja aruannete loomine. Et andmete kasutamine oleks kooskõlas GDPRiga, saavad kliendid soovi korral kõik nendega seotud andmed alla laadida ja vajadusel kustutada.

Välised teenused
Kuna soovisime süsteemi paremaks toimimiseks kasutada ka muid, veebipoest sõltumatuid andmeid, osutus vajalikuks ka integratsioon väliste teenustega. Näiteks soovisime mudelite arendamisel kasutada ilmaandmeid, aruannete jaoks õigete arvutuste tegemiseks vajasime päevaseid valuutakursse (mõni veebipood arveldab erinevate valuutadega) ja nii mudelivaatur kui ka mõni mudel kasutab toodete pilte.

Soovitussüsteemi tuum ehk enimkasutatud funktsionaalsused
Kui STACC kolis mikroteenuse arhitektuurile, oli palju koodiosasid, mida on võimalik taaskasutada, näiteks andmebaasidega ühendumine, soovitusi leidvad algoritmid, aruannete arvutamine jne. Selleks, et erinevate teenuste ja projektide vahel koodi jagada, lõime teegi, mida nimetasime soovitussüsteemi tuumaks (recommender core). Laadisime teegi üles ettevõtte infrastruktuuri nõnda, et seda saaks mugavalt paigaldada igasse mikroteenusesse.

Airflow
Klientide ja funktsionaalsuste kasvuga sai mingi hetk selgeks, et kuidagi on tarvis erinevaid protsesse mõistlikult hallata. Algul üritas STACC välja arendada majasisest järjekorrasüsteemi (queue system), kuid küllalt kiiresti selgus, et mõistlikum on kasutada rakendust, mis on tarkvarakommuuni poolt juba tuhandete inimeste poolt testitud ja valideeritud. Seetõttu valisime välja protsesside orkestraatori Apache Airflow, mis on ühtlasi ka mugav monitoorimise tööriist, kuna seda on Slackiga lihtne integreerida, mis omakorda võimaldab intsidentide tekkimisel nende kohta koheselt teada saada.
soovitussüsteemi arhitektuur
Joonis 2. STACCi “Võtmed kätte” soovitussüsteemi arhitektuur 2018. aastal.

Tegevused 2019-2020

Seni oli STACC toetunud klientide ja enda majasisesele infrastruktuurile. Aja möödudes saime aru, et antud lahendus ei rahulda enam meie nõudmisi, kuna vajasime aina võimsamat ja stabiilsemat infrastruktuuri. Varasemalt on meil aeg-ajalt olnud voolu- ja internetikatkestusi, mis katkestasid meie süsteemide töö. Seetõttu oli aeg teha veel üks suur samm edasi ja võtta kasutusele pilveteenused, mille jaoks pöördusime AWSi poole (Amazon Web Services).

Ansible/Terraform
Pilveteenuste kasutuselevõtu käigus selgus tõsiasi, et erinevatele klientidele ja projektidele infrastruktuuri käsitsi seadistamine erinevatele võtab palju aega ning ressursse. Lahendusena võtsime kasutusele Ansible’i, mis võimaldab infrastruktuuri koodina (infrastructure as code) kirjeldada ja automaatselt üles seada. Pärast mõningast Ansible kasutamist selgus, et see sisaldab (vähemalt AWS-iga) mitmeid parandamata vigu ja et sellel on mõningaid jõudlusprobleeme. Seetõttu läksime üle Terraformile, mis näib siiani olevat hea alternatiiv. Süsteemi töövoog on järgmine: pärast konkreetsesse harusse commit’imist käivitatakse Bitbucket Pipelines’is vastav töövoog, mille käigus jooksutatakse erinevaid teste (unit, integration, Sonarcloud jne), seejärel seab Terraform kogu infrastruktuuri AWS-is üles ning paigaldab ja käivitab meie teenused.

Kuidas võiks soovitussüsteem teie ettevõttele kasu tuua?

Soovitussüsteemi eesmärk on kasvatada ettevõtte müüki, aidates inimestel leida neile huvi pakkuvat sisu ja tekitades neis tunde, et see ettevõte tunneb neid ja nende vajadusi — külastaja esimesest klikist kuni ostu sooritamise ja püsikliendiks saamiseni. STACCi kasumlikkuse kalkulaatori kohta saate lugeda siit! Kui tekkis huvi STACCi soovitussüsteemi vastu, siis võta meiega ühendust siit! 
Kui otsid aga pigem tehnilisi väljakutseid ja tahad osa saada meie põnevatest seiklustest, siis kandideeri meie meeskonda!