Questo è il primo post di una serie sull’infrastruttura di D/Vision Lab.
L’infrastruttura è ovviamente un argomento vasto: c’è l’infrastruttura interna che utilizziamo per il nostro processo di sviluppo e c’è l’infrastruttura esterna che viene definita su base progettuale. Questo post si concentra sulla prima, fornendo una panoramica delle soluzioni utilizzate per supportare l’intero team.
Il nostro team in D/Vision Lab è composto da 8 persone, principalmente tecniche, con competenze ed esigenze diverse: c’è chi sviluppa interfacce utente nel browser con TypeScript e Vuejs, c’è chi si occupa di machine learning sulle immagini con Python e c’è chi sviluppa il back-end di un progetto usando PostgreSQL e JavaScript.
La tecnologia alla base di tutto questo è eterogenea e in continua evoluzione.
Infrastruttura hardware
In generale, forniamo un laptop a ciascuno in azienda e ognuno è libero di utilizzare il sistema operativo che preferisce, tenendo presente che non siamo un team numeroso e in caso di necessità, l’aiuto che ognuno può ottenere proviene dai colleghi e dalle loro competenze (e da internet, ovviamente). La maggior parte delle persone usa Windows sul proprio laptop con un’istanza virtualizzata di Ubuntu in WSL2, ma ci sono un paio di utenti che usano solo Linux, con Ubuntu e NixOS.
Mentre i laptop sono sufficienti per la maggior parte delle esigenze di sviluppo, utilizziamo hardware dedicato per i progetti computazionalmente più impegnativi. Ad esempio, non addestriamo le nostre reti neurali sui nostri laptop… No, nemmeno su quelli con GPU! Per questo, abbiamo alcuni computer utilizzati per calcoli di lunga durata, attività di build e training, servizi condivisi, ecc. Ad esempio, oltre ai nostri 8 laptop, abbiamo diversi host di appoggio che usiamo per vari task, come:
- Un Mac utilizzato per la creazione e il test di applicazioni
- Un computer ad alte prestazioni utilizzato per addestrare modelli di ML e realizzare rendering 3D
- Un server di virtualizzazione in cui le persone possono facilmente configurare VM per avere ambienti di sviluppo, build e test puliti
Infrastruttura software
Sebbene utilizziamo diversi servizi cloud, tendiamo anche ad avere alcuni servizi gestiti da noi che usa l’intera azienda. Ad esempio, abbiamo agenti CI/CD self-hosted: questo non solo ci consente di ridurre i costi, ma ci consente anche di essere più flessibili per quanto riguarda le configurazioni di build e
test.
Un elemento chiave della nostra infrastruttura, uno dei più vecchi e utilizzati, è senza dubbio la VPN: non è una sorpresa, essendo un team che lavora principalmente da remoto. Ci affidiamo a WireGuard per questo e siamo soddisfatti della scelta: le prestazioni sono buone e la distribuzione è semplice su tutte le piattaforme che utilizziamo (Linux, Mac e Windows).
Un altro elemento importante è il software che utilizziamo per il nostro lavoro quotidiano. Naturalmente ci sono diversi strumenti di sviluppo, che possono variare a seconda del progetto. Tuttavia, dobbiamo tutti svolgere attività comuni come leggere e inviare e-mail, archiviare e condividere documenti, fogli di calcolo e codice. Utilizziamo una combinazione di Google Workspace, Confluence, Jira e Github. Quest’ultimo ospita il codice, mentre i prodotti di Atlassian vengono utilizzati per gestire board di progetto e documenti correlati. Google Workspace viene infine utilizzato per e-mail, condivisione e archiviazione di documenti, oltre a Meet per le videoconferenze. La messaggistica istantanea avviene tramite Mattermost, almeno per la nostra comunicazione interna.
Infine, utilizziamo anche Wiki.js per la documentazione tecnica condivisa e n8n.io per alcune esigenze di automazione, come il supporto alla creazione di bot Mattermost personalizzati e funzioni correlate alle routine della nostra organizzazione. Ad esempio, teniamo traccia del tempo trascorso su diversi progetti e n8n viene utilizzato per calcolare alcune statistiche che utilizziamo per analizzare i nostri progressi.
Bene, se qualcuno dovesse entrare a far parte di D/Vision Lab come nuovo membro del team, questo articolo sarebbe una introduzione iniziale alla nostra infrastruttura e agli strumenti. Nei prossimi post del blog, descriveremo le cose in modo più dettagliato, ad esempio come tutti questi servizi possono essere distribuiti e mantenuti automaticamente (spoiler alert: con Ansible).