Vitesy, una startup tutta serverless

In questo post racconto le scelte che abbiamo fatto per costruire l'architettura che c'è dietro Vitesy, la startup in cui lavoro come Chief Technology Officer.


Ciao, sono Marco 👋

Ogni due mercoledì scrivo un articolo con brevi consigli per migliorare il proprio product mindset, attraverso esperienze, ricerche e casi studio 🚀

Non dimenticare di iscriverti per accedere all'intero articolo e non perdere le prossime uscite.


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:

  1. I nostri prodotti inviano un messaggio contenente i dati raccolti dai sensori ad AWS IoT attraverso un topic MQTT
  2. 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.
  3. 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.