Tämä on lyhyt tarina siitä, miten SMOC.AI siirtyi Cloudflareen rakentaakseen henkilökohtaisen, automatisoidun myyntiagentti-botin, jolla on matala viive ja korkea skaalautuvuus.
SMOC.AIn myyntiagentti-botilla on tärkeä rooli asiakkaidemme liidien hankintastrategiassa. Joka kuukausi se käy läpi satoja tuhansia keskusteluja asiakkaidemme verkkosivujen kävijöiden kanssa.

Botti esittää vierailijalle sarjan kysymyksiä kuin tietovisassa. Vierailija valitsee useista vastausvaihtoehdoista painamalla painikkeita. Seuraava botin esittämä kysymys riippuu aiemmista vastauksista. Keskustelun lopussa vierailijaa pyydetään usein jättämään yhteystietonsa henkilökohtaista tarjousta varten.
Nämä keskustelut lisäävät liidien hankintaa asiakkaillemme 200–500 %.
Asiakkaamme rakastavat sitä, ja tyytyväiset asiakkaat aina pyytävät aina lisää. Joitakin suosituimpia ominaisuuspyyntöjämme ovat:
- Voitteko räätälöidä keskustelun jokaiselle vierailijalle, jotta liidien hankinta kasvaa entisestään?
- Haluamme tavoittaa yleisöjä verkon ulkopuolella (Discord / SnapChat jne). Voitteko saada sen toimimaan siellä?
- Olemme Aasiassa – miksi botin lataaminen kestää niin kauan?
Kuusi kuukautta sitten emme voineet toteuttaa mitään näistä ominaisuuspyynnöistä, koska järjestelmämme oli rakennettu perinteisenä kolmitasoarkkitehtuurina, jossa oli JavaScriptillä toteutettu Single Page Application (SPA) ja pari dedikoitua palvelinta.

- Rails-verkkosovellus toimitti HTML:n, CSS:n, SPA-koodin ja virran JSON:n selaimeen
- SPA keskusteli API-palvelimen kanssa HTTP:n kautta
- API-palvelin vastaanotti vastaukset ja tallensi ne Postgresiin
- Postgres-tietokanta tallensi kaikki vastaukset
SPA latasi suunnatun graafin kaikista mahdollisista botin viesteistä ( virta) muistiin keskustelun alussa. Joka kerta kun kävijä painoi nappia, SPA seurasi graafin kaarta seuraavaan kysymykseen ja näytti sen ruudulla.
Kaikki päätökset siitä, mitä botti sanoisi seuraavaksi, tehtiin selaimessa pyörivässä SPA:ssa.

Botin (herne-)aivot olivat kirjaimellisesti selaimessa.
Tarjotaksemme jokaiselle kävijälle henkilökohtaisen kokemuksen päätimme rakentaa koneoppimismallin, joka päättäisi, mitä kaarta kannattaa seurata seuraavaksi. Aivot piti tehdä älykkäämmiksi ja suuremmiksi. Tämä olisi paljon helpompaa toteuttaa, jos siirtäisimme keskustelulogiikan selaimesta palvelimelle.
Kun kaikki keskustelulogiikka on palvelimella, olisi myös mahdollista integroida keskustelumoottorimme muihin alustoihin, kuten Discordiin ja SnapChatiin.
Kun keskustelulogiikka pyörii palvelimella, meidän täytyisi työntää botti-viestit asiakaslaitteille. Verkkoselaimessa tämä tehtäisiin WebSocketin kautta.
Meidän pitäisi käsitellä vähintään 10 000 samanaikaista WebSocket-yhteyttä säännöllisesti ja yli 100 000 aina, kun asiakkaamme käynnistävät suuria mainoskampanjoita, jotka aiheuttavat piikkejä.

Tällainen samanaikainen I/O ei toimisi hyvin niillä dedikoiduilla EC2-palvelimilla, joita meillä oli. Siitä tulisi yksi kuuma aivo! Tai ehkä kymmenen, mutta silti kuumia. Tarvitsimme arkkitehtuurin, joka voisi skaalautua nopeammin ja edullisemmin.
Tiesimme jo, että nykyinen arkkitehtuurimme voisi aiheuttaa kirjoitusruuhkaa Postgres-tietokannassa, joten halusimme välttää myös sen.
Uuden arkkitehtuurimme piti pystyä käsittelemään valtavia kuormia, ja sen piti olla saatavilla maailmanlaajuisesti, jotta kävijöiden ei tarvitsisi odottaa bottia latautuvaksi yli 100 ms. Toisin sanoen sen piti toimia reunalla.
Koska käytimme jo AWS:ää, harkitsimme ensin lambdojen käyttöä. Lambdat ovat hyviä, mutta ne eivät tue WebSocket-yhteyksiä, ellei teet monimutkaisia kiertotapoja.
Päätimme tarkastella CloudFlare Durable Objects -ratkaisua tarkemmin ja huomasimme nopeasti, että se sopisi täydellisesti tarpeisiimme. Jos Durable Objects ei ole sinulle tuttu, ajattele niitä pitkäkestoisina lambdoina, joilla on tila ja oma WebSocket.
Kahdelta insinööriltä kului muutama kuukausi botin moottorin uudelleenkirjoittamiseen tätä arkkitehtuuria varten. Osana tätä työtä otimme myös käyttöön Cloudflare KV:n keskusteludatan tallentamiseen Postgresin sijaan.

Aina kun uusi kävijä aloittaa keskustelun, Cloudflare käynnistää välittömästi uuden Durable Objectin keskustelun käsittelyä varten. Meidän ei enää tarvitse huolehtia skaalaamisesta.
Tähän asti Cloudflare-pino on ollut erinomainen työskennellä. Se ei ainoastaan skaalaudu erittäin hyvin, vaan tarjoaa myös erinomaisen kehittäjäkokemuksen (DX), joten voimme käyttää enemmän aikaa ohjelmiston rakentamiseen ja vähemmän infrastruktuurin hallintaan.
Meillä on satoja automatisoituja testejä, jotka suoritetaan noin kahdessa sekunnissa, joten iterointi ja kokeilu on äärimmäisen nopeaa.
Tämän arkkitehtuurin ansiosta olemme hyvin asemissa aloittamaan uuden koneoppimismallimme rakentamisen, jonka liitämme kaikkiin näihin pieniin aivoihin. Se käyttää bayesilaista päättelyä valitakseen reunat virtauskaavioissamme. Kerron siitä lisää tulevassa blogikirjoituksessa.
SMOC.AI rekrytoi. Etsimme full stack -kehittäjiä, joilla on ML-kokemusta. Jos olet kiinnostunut kuulemaan lisää, lähetä sähköpostia osoitteeseen [email protected].