11.1 Prodotti moderni

I prodotti moderni non vengono più chiamati programmi. Un prodotto moderno può essere composto da decine di programmi, centinaia di servizi internet e una tonnellata di API che gli forniscono i cloud del data center in cui il prodotto è distribuito.
Molti prodotti moderni (se non tutti) funzionano secondo la paradigma Client-Server. Questo avviene quando sul tuo dispositivo (telefono, portatile, computer) c'è un programma che si occupa della comunicazione con te, ma tutte le funzionalità critiche sono ospitate su un server remoto, dove avviene tutto ciò che è importante.
A volte il tuo client può comunicare con diversi server indipendenti, oppure il server di un prodotto può comunicare con il server di un altro prodotto. Ne risulta una sorta di rete globale di client e server che lavorano insieme.
Pertanto, il modello moderno delle applicazioni potrebbe essere meglio descritto come la paradigma Client-Internet-Server. C'è una tale quantità di comunicazioni complesse ormai. Sono apparsi persino i cosiddetti "canali di comunicazione intelligenti", che decidono autonomamente a chi inviare la tua richiesta e quando farlo.
11.2 Client
I programmi client possono essere suddivisi in 4 categorie:
- Desktop client — programma che funziona su un computer
- Mobile client — app per iOS o Android
- Web client — sito/web app che funziona nel browser
- Server client — applicazione eseguita su un altro server
E ognuna di queste categorie può essere suddivisa ulteriormente. Ad esempio, un web client è un sito o un'applicazione web, il che significa che è composto da un Browser e Sito che viene caricato in esso. I browser non sono tutti uguali e possono funzionare in modi diversi.
Ma anche se prendiamo il browser più comune, c'è ancora il sito che viene caricato in esso. Un sito è di solito composto da tre cose:
- HTML
- CSS
- JavaScript
Non c'è niente di più semplice, si potrebbe dire, ma ormai nessuno scrive siti semplicemente in HTML e JavaScript. Ora per sviluppare un sito non usano nemmeno le librerie, ma veri e propri framework come React, Angular o Vue. E non sono più siti, ma vere e proprie applicazioni web. Con le loro build, test e paradigmi.
Anche il semplice CSS ormai non lo usa più nessuno: ci sono già pre-processori CSS che aiutano a generarlo, e persino interi framework CSS. Signore mio, ci sono persino interi framework CSS per le email, in modo che la tua lettera appaia bella se viene visualizzata nel browser o nella maggior parte dei client di posta.
Anche JavaScript ormai non lo scrive più nessuno: tutte le grandi applicazioni web sono scritte in TypeScript, che poi viene compilato in JavaScript. Beh, avete capito...
11.3 Internet e infrastruttura
La comunicazione tra client e server — cosa potrebbe essere più semplice? Ma anche qui ormai tutto è cambiato.
Innanzitutto, il tuo prodotto molto probabilmente sarà ospitato in uno dei moderni data center. Molte aziende in tutto il mondo offrono vari servizi di hosting dei tuoi prodotti sia sui loro server, sia sui tuoi server fisici. Qualsiasi capriccio per i tuoi soldi.

Un server fisico non è più un server fisico. Tutti i moderni data center ti offrono il noleggio di server virtuali. È un computer virtuale e su un server fisico possono essercene una dozzina. Tuttavia, è comodo per quanto riguarda l'aggiornamento del server. Se ti serve più memoria, puoi aggiungerla al tuo server virtuale in pochi minuti.
Ma anche questo approccio è in via di obsolescenza. Ora va di moda il trasferimento nel cloud — quando il tuo prodotto non è solo distribuito su un server virtuale nel data center, ma utilizza attivamente un ampio insieme di infrastrutture e servizi di questi data center.
Ti serve un server per lo storage dei backup: c'è tutta un'infrastruttura comoda nel cloud per questo. Ti serve un database con un'affidabilità del 99.9999999%? C'è anche questo. Kafka, RabbitMQ, NoSQL? Tutto è già disponibile e facile da configurare. Basta pagare.
Questi data center e cloud stanno diventando parte del tuo prodotto. Ad esempio, Amazon ha una marea di data center in tutto il mondo, quindi offrono un servizio CDN: il tuo contenuto pubblico sarà memorizzato in cache su tutti i data center Amazon, e i tuoi utenti in tutto il mondo lo riceveranno più velocemente.
Oppure, puoi far passare le chiamate API della tua applicazione attraverso il servizio Amazon Gateway API, che permette di configurare in modo molto flessibile il funzionamento con i tuoi servizi. Puoi distribuire il carico su diversi servizi, respingere attacchi DDoS, automatizzare il caricamento dei file, configurare il caching intelligente e molto altro.
Quindi tra l'applicazione client e i tuoi servizi nasce una quantità di "comunicazioni intelligenti" che possono essere configurate e devono essere configurate. Anche se non lo farai mai personalmente, dovresti sapere che esistono e possono influenzare significativamente il funzionamento del tuo programma.
E non abbiamo ancora toccato argomenti come router, antenne 5G, satelliti e cavi internet sul fondo dell'oceano. Invii un flusso video dal tuo server al tuo client, ma si blocca perché il client ha un brutto segnale e la connessione si interrompe costantemente. Indovina chi risolverà questo problema?
11.4 Server
Il termine server indica molte nozioni piuttosto diverse, quindi sarà utile sapere quali sono le più popolari.
Server fisico
Un server fisico è un'apparecchiatura rappresentata da un computer separato con risorse (processore, memoria, storage), che viene utilizzata per elaborare dati e garantire il funzionamento di varie applicazioni software. Questi server vengono installati nei data center, dove forniscono potenza per l'hosting di siti web, applicazioni, database e altri servizi.
Server virtuale
Un server virtuale è un server emulato software che funziona in un ambiente di server fisico. Con le tecnologie di virtualizzazione, un server fisico può essere suddiviso in diversi server virtuali isolati, ciascuno con il proprio sistema operativo e che può essere riavviato e configurato indipendentemente.
Programma-server (esempio Nginx)
Un programma-server, come Nginx, è un software server utilizzato per elaborare richieste a risorse web. Nginx è ampiamente conosciuto come web server, ma può anche svolgere funzioni di server proxy e bilanciatore di carico nelle architetture a microservizi.
Server di database
Un server di database è un server specializzato utilizzato per gestire database e elaborare richieste agli stessi. Fornisce archiviazione centralizzata dei dati e il loro trattamento, offrendo accesso ai dati tramite rete. I server di database supportano l'elaborazione delle transazioni, la ricerca e la modifica dei dati, garantendo al contempo l'affidabilità e la sicurezza dell'archiviazione delle informazioni. Esempi di server di database includono MySQL, PostgreSQL, Oracle Database e Microsoft SQL Server.
Ecco, in qualche data center, su uno dei server virtuali, girerà il tuo progetto su React e Node.js, che lavorerà con un database, riceverà richieste da NginX e invierà i log delle sue azioni a Splunk.
Ma è proprio grazie al tuo codice che milioni di utenti del tuo prodotto saranno felici. Useranno il prodotto, pagheranno per esso, e allora sarà felice anche il proprietario del prodotto. Le azioni dell'azienda aumenteranno, guadagnerai bonus sulle azioni, e sarai felice anche tu. Proprio un circolo della felicità in natura :)
GO TO FULL VERSION