Modello di prodotto IT
1. Prodotti moderni
Nessuno chiama più i prodotti moderni semplicemente programmi. Un prodotto moderno può includere decine di programmi, centinaia di servizi Internet e molte API fornite da un data center cloud (detti anche centri di elaborazione dati), dove è distribuito.
Molti prodotti moderni (se non tutti) funzionano secondo la paradigma Cliente-Server. È quando sul vostro dispositivo (telefono, laptop, computer) c'è un programma che si occupa della comunicazione con l'utente (voi), mentre la funzionalità critica risiede su un server remoto, dove avviene tutto ciò che è importante ➡️🖥️
Talvolta il vostro client può comunicare con più server indipendenti, oppure il server di un prodotto può chiamare il server di un altro prodotto. Si crea così una rete globale di client e server che interagiscono tra loro.
Perciò il modello moderno delle applicazioni forse è meglio descriverlo come paradigma Cliente-Internet-Server. C'è ormai una grande varietà di comunicazioni complesse. Sono nati persino i cosiddetti "canali di comunicazione intelligenti", che decidono autonomamente a chi e quando inviare la vostra richiesta.🛰️📡
2. Client
I programmi client si possono grosso modo dividere in 4 categorie:
- 🖥️ Client desktop — programma che gira sul computer.
- 📲 Client mobile — app per iOS o Android.
- 🌐 Client web — sito/web app che funzionano nel browser.
- 🌍 Client server — applicazione eseguita su un altro server.
Ognuna di queste categorie può a sua volta essere scomposta in parti più piccole. Per esempio, un client web è un sito o una web app, quindi è composto da browser e sito che viene caricato al suo interno. Anche i browser non sono tutti uguali e possono comportarsi in modo diverso.
Ma anche prendendo il browser più diffuso, resta comunque il sito che viene caricato. Un sito di solito è composto da tre elementi:
- 📄 HTML
- 🎨 CSS
- ⚡ JavaScript
"Niente di più semplice", direte voi. Solo che oggi nessuno scrive siti solo con HTML e JavaScript. Per sviluppare siti si usano non solo librerie, ma framework completi come React, Angular o Vue ⚛️. E ormai non si tratta più solo di siti, ma di vere e proprie web app con build, test e paradigmi propri.
Neanche il CSS puro è più così usato. Esistono preprocessori CSS che aiutano a generarlo, e interi framework CSS. Persino per le email ci sono framework CSS speciali, così che la vostra email appaia bella sia nel browser che nella maggior parte dei client di posta 💌.
Anche il JavaScript "puro" è sempre meno usato — le grandi web app sono sviluppate in TypeScript, che poi viene compilato in JavaScript. Avete capito il senso...
3. Internet e infrastruttura
La comunicazione tra client e server — cosa può essere più semplice? Ma anche in questo ambito tutto è cambiato.
Il vostro prodotto molto probabilmente sarà ospitato in uno dei data center moderni. Molte aziende nel mondo offrono vari servizi di hosting per i vostri prodotti, sia sui loro server sia su vostri server fisici. Qualsiasi capriccio a pagamento.
Il server fisico non è più semplicemente "fisico". Tutti i data center moderni offrono il noleggio di server virtuali. Un server virtuale è un computer virtuale, e su un server fisico possono essercene decine. Questo è comodo per l'upgrade. Se avete bisogno di più memoria, potete aggiungerla al vostro server virtuale in pochi minuti ⏱️.
Ma anche questo approccio sta invecchiando: oggi è di moda migrare al cloud — cioè il prodotto non è solo distribuito su un server virtuale nel data center, ma usa attivamente un ampio insieme di infrastrutture e servizi di quel data center.
Vi serve un server per conservare i backup? In cloud esistono infrastrutture pronte e comode per questo. Vi serve un database con affidabilità del 99.9999999%? Anche quello esiste. Kafka, RabbitMQ, NoSQL? Tutto è disponibile e facilmente configurabile. Basta pagare.
E questi data center e il cloud diventano parte del vostro prodotto. Per esempio, Amazon ha moltissimi data center nel mondo, perciò offre il servizio CDN: i vostri contenuti pubblici saranno memorizzati in cache in tutti i data center di Amazon, e i vostri utenti nel mondo li riceveranno più velocemente 🛰️.
Oppure le chiamate alle API della vostra applicazione possono passare attraverso il servizio Amazon API Gateway, che permette di configurare in modo molto flessibile l'interazione con i vostri servizi. Si possono distribuire carichi su servizi diversi, mitigare attacchi DDoS, automatizzare l'upload di file, impostare caching intelligente, e molto altro 🛡️.
In questo modo, tra l'app client e i vostri servizi emergono molte "comunicazioni intelligenti" che è possibile e necessario configurare. Anche se non le gestirete personalmente, dovete sapere che esistono e che possono influire significativamente sul funzionamento della vostra applicazione.
E non abbiamo neppure toccato temi come router, torri 5G, satelliti e cavi sottomarini. Inviate uno stream video dal vostro server al client e questo si interrompe perché il client ha una connessione scadente e il collegamento cade continuamente. Indovinate chi risolverà il problema? Voi 😅
4. Server
Dietro la parola «server» possono celarsi concetti molto diversi. Vi sarà utile conoscere i più comuni.
🖥️ Server fisico
Un server fisico è un dispositivo, un computer separato con risorse (CPU, memoria, storage) utilizzato per elaborare dati e per eseguire applicazioni software. Questi server sono collocati nei data center, dove forniscono capacità per il hosting di siti web, applicazioni, database e altri servizi.
🪐 Server virtuale
Un server virtuale è un server emulato via software che gira su un server fisico. Grazie alla virtualizzazione, un server fisico può essere suddiviso in più server virtuali isolati, ognuno con il proprio sistema operativo, che può essere riavviato e configurato in modo indipendente.
🕹️ Software server (per esempio, Nginx)
Un software server, come Nginx, è un programma server usato per gestire le richieste verso risorse web. Nginx è noto come web server, ma può anche svolgere il ruolo di proxy per posta, reverse proxy in architetture a microservizi e come bilanciatore di carico.
💾 Server di database
Un server di database è un server specializzato per la gestione di database e per l'elaborazione delle relative richieste. Fornisce archiviazione centralizzata dei dati e il loro processamento, consentendo l'accesso tramite rete. I server di database supportano transazioni, ricerche e modifiche dei dati, garantendo affidabilità e sicurezza. Esempi includono MySQL, PostgreSQL, Oracle Database e Microsoft SQL Server.
E così, da qualche parte in un data center, su uno dei server virtuali, girerà il vostro progetto in C++ 23 e STL. Lavorerà con un database, riceverà richieste tramite Nginx, Apache HTTP Server o un bilanciatore di carico in AWS Elastic Load Balancing o Google Cloud Load Balancer e invierà i suoi log a sistemi di monitoraggio come Prometheus + Grafana, Elastic Stack o Splunk 📈.
Ma è proprio grazie al vostro codice che milioni di utenti saranno soddisfatti del prodotto. Useranno il servizio, pagheranno per esso, e alla fine sarà soddisfatto anche il proprietario del prodotto. Le azioni dell'azienda saliranno, riceverete bonus in azioni — e sarete felici 💸. Il vero circolo della felicità nell'industria :)
GO TO FULL VERSION