Vitesy, una startup tutta serverless
Una spiegazione dell'architettura serverless dietro Vitesy
by Marco Santonocito on 20 lug 2022
Ciao, sono Marco 👋
Sono Chief Product and Technology Officer in una growth stage company in Italia, dove guido i team product e tech per progettare, costruire e far crescere i nostri prodotti digitali
Ho lanciato questo sito per raccogliere tutto ciò che ho imparato, e continuo a imparare giorno dopo giorno.
Se vuoi seguirmi:
Sono stato per poco più di 4 anni Chief Technology Officer in Vitesy, un'azienda italiana nata nel 2016 con l'obiettivo di eliminare l’inquinamento dell'aria che ci circonda e farci vivere senza pericoli per la nostra salute.
Nel corso di questi anni abbiamo creato 3 prodotti che uniscono natura, tecnologia e design per analizzare e pulire l’aria all'interno di case e uffici: Clairy, Natede ed Eteria.
Questi prodotti possiedono un sistema di purificazione che, attraverso il fitorisanamento e la fotocatalisi, elimina composti organici volatili (VOCs), virus, odori e batteri. Ogni prodotto poi è fornito di un sistema di sensori che monitora temperatura, umidità e la quantità di VOCs, CO2 e polveri sottili (PM2.5) presenti all'interno della stanza e attraverso il WiFi comunica questi dati al nostro server in modo che ogni cliente possa tenere sott'occhio la qualità dell'aria e controllare i suoi prodotti.
L'architettura
Come in tutte le startup, nel momento in cui abbiamo iniziato a costruire questa azienda i fondi erano pochi e il team era formato da poche persone.
Se pensiamo puramente all'aspetto tecnico, questo è il periodo più critico. Risulta importante strutturare delle fondamenta solide che permettano alla startup di rispondere velocemente alle esigenze dettate dal mercato.
Il nostro tempo e la nostra concentrazione quindi dovevano essere dedicati interamente allo sviluppo del prodotto, non alla configurazione e al mantenimento dell'infrastruttura.
Così, quando ancora il termine serverless non era diffuso come lo è oggi, abbiamo deciso di seguire la strada no-ops e di essere fully-serverless.
☁️ Cloud Provider
Quando si inizia a lavorare su un nuovo progetto il compito di un Chief Technology Officer consiste nell'individuare la miglior soluzione possibile per l'azienda tenendo in considerazione tecnologia, costi, sicurezza, evoluzioni future, qualità del servizio e molto altro.
Nel nostro caso il servizio doveva essere in grado di sostenere una flotta di prodotti di dimensione variabile, direttamente proporzionale al successo che la startup avrebbe avuto. Per di più il costo doveva essere accessibile ad una startup che stava compiendo i suoi primi passi... una bella sfida! 😅
Dopo svariati confronti e test tra i vari Cloud Provider, abbiamo deciso di utilizzare i servizi di Amazon Web Services in quanto è il cloud più moderno, accessibile (💵) e innovativo sul mercato.
💡 Internet of Things
Come anticipato, i prodotti di Vitesy offrono un sistema di monitoraggio e purificazione dell'aria e devono essere in grado di fornire le seguenti funzionalità:
- Salvataggio dei dati raccolti dai sensori
- Lettura real-time di questi valori
- Accensione e spegnimento del prodotto
- Selezione del programma di funzionamento (automatico, silenzioso, standard e high performance)
Tra i servizi offerti da AWS ci siamo subito resi conto di come AWS IoT ci potesse permettere di rispondere a tutte queste esigenze.
AWS IoT è una piattaforma cloud che consente a dispositivi connessi di interagire con applicazioni nel cloud e altri dispositivi sostenendo un numero immenso di dispositivi e di messaggi. Supporta MQTT, uno dei protocolli di comunicazione più utilizzati. Inoltre i prezzi e i costi di manutenzione sono accessibili.
🔧 Setup
Dopo un periodo passato a ricercare l'approccio migliore per strutturare la nostra architettura e aver testato una varietà di servizi, siamo arrivati a definire i seguenti componenti:
- AWS IoT per l'acquisizione di dati e la gestione dei dispositivi,
- DynamoDB per l'archiviazione dei documenti in modo da rendere persistenti le letture dei dati,
- AWS Lambda per l'elaborazione dati,
- API Gateway per l'accesso ai dati,
- AWS Cognito per l'autenticazione degli utenti,
- Netlify per ospitare il nostro ecommerce.
🏛 Amazon Web Services
Lo schema mostra una sintesi della nostra architettura cloud. Funziona nel modo seguente:
- I nostri prodotti inviano un messaggio contenente i dati raccolti dai sensori ad AWS IoT attraverso un topic MQTT
- Le regole IoT (IoT rules) che abbiamo impostato si occupano di elaborare tali dati. Una regola, ad esempio, archivia i dati in una tabella su DynamoDB, un'altra invia una notifica all'utente nel caso in cui vengano superati dei valori soglia, ecc.
- API Gateway espone al mondo alcune funzioni Lambda tramite API REST e le richieste vengono autenticate da AWS Cognito.
Grazie a questo tipo di architettura siamo riusciti ad ottenere una soluzione:
- Economica. Il costo per device attualmente è di 0.03$/mese (questo calcolo non tiene conto di lambda, storage, gateway API che tuttavia hanno un costo irrisorio e, perciò, trascurabile).
- Scalabile. AWS IoT Core è in grado di supportare miliardi di dispositivi e migliaia di miliardi di messaggi in modo sicuro e affidabile. Quindi che l'azienda venda un prodotto al giorno o un milione, l'architettura è in grado di sostenere la mole di dati generati.
- Lean. Le risorse per costruire e mantenere questo tipo di infrastruttura sono minime e le figure del team possono concentrarsi principalmente sullo sviluppo di nuove funzionalità.
🕸 Web
Apro una piccola parentesi riguardante le nostre piattaforme web ovvero il nostro ecommerce e la dashboard attraverso cui gli utenti B2B possono accedere ai loro prodotti e visualizzare i dati raccolti.
Queste applicazioni sono state sviluppate utilizzando Vue.js che, combinato a Nuxt e Netlify, ci permette di generare una versione statica dell'applicazione.
Questa soluzione ci ha permesso di avere una piattaforma più veloce, più affidabile, estremamente sicura e che non richiede alcuna infrastruttura in quanto le risorse statiche vengono ospitate nella CDN di Netlify. Così facendo abbiamo aumentato di 10 volte le prestazioni della nostra piattaforma, riducendone sensibilmente anche i costi.
Conclusione
Con questo approccio deleghiamo la responsabilità delle operazioni a qualcun altro (nel nostro caso Amazon Web Services) e, anche se ne perdiamo in flessibilità, sicuramente acquisiamo molto in funzionalità, elasticità e capacità di concentrare le nostre energie sul prodotto. Senza considerare la riduzione dei costi e delle tempistiche di sviluppo con una conseguente riduzione del time to market.
La decisione di seguire la strada no-ops e di essere fully-serverless è stata, senza ombra di dubbio, la migliore che potessimo prendere.
Disclaimer. Ogni progetto ha i suoi requisiti e la soluzione implementata da noi non si adatta a qualsiasi situazione. Ad esempio, se il vostro prodotto richiede una trasmissione frequente di dati al cloud, i costi aumentano a dismisura e il suggerimento è quello di prendere in considerazione soluzioni IoT personalizzate oppure open source.