Come costruire applicazioni web scalabili
Un’applicazione web scalabile si chiama così perché è in grado di accettare un numero maggiore di richieste in modo lineare e con maggiore grazia. Con l’aggiunta di altro hardware, il sito web sarà in grado di gestire carichi di richieste in una sola volta. Dire che un sito web è scalabile significa semplicemente che, con l’aumento degli utenti e l’afflusso di richieste, il sito sarà in grado di gestirle tutte allo stesso modo.
Esempio di un sito web popolare che è stato scalato con successo.
Guardando alla crescita di Facebook, sarebbe sorprendente notare come sia cresciuto nel corso degli anni. Anche se non siete utenti abituali di Facebook, è difficile ignorare l’impatto che il canale dei social media ha su imprese e aziende. Secondo una statistica, ci sono più di
1,94 miliardi di utenti attivi di Facebook a marzo 2017
, registrando un aumento di oltre il 18% ogni anno. Per quanto riguarda gli utenti attivi giornalieri di telefonia mobile, i numeri sono impressionanti: 1,15 miliardi di utenti.
Facebook è scritto in PHP e il suo enorme successo risiede nella capacità di scalare fino a un milione di utenti, grazie a un’enorme architettura di applicazioni. L’architettura evita i colli di bottiglia, rendendola scalabile in qualsiasi linguaggio. La forma della curva (che mette in relazione il costo con l’utilizzo) determina l’architettura dell’applicazione. Quando un’applicazione è scalabile, la curva sarà più diagonale, ma quando si troverà di fronte a colli di bottiglia, diventerà quasi verticale.
Anche il linguaggio, il database o il compilatore utilizzati hanno un ruolo importante nella forma della curva non lineare. Se c’è un difetto di progettazione di fondo (più che un dettaglio di implementazione), la curva è destinata a salire rapidamente. L’architettura di Facebook, in continua evoluzione, è curata da alcuni dei migliori ingegneri del settore. Facebook ha una propria versione di PHP ottimizzata e ha sviluppato un software completamente nuovo come Apache Cassandra.
Ora arriva la domanda da un milione di dollari: come si costruiscono applicazioni web scalabili?
Ecco alcune semplici opzioni per scalare le applicazioni web:
1. Scalare
Quando il carico sulle gomme di back-end diventa troppo pesante da gestire, il sito web non può più funzionare. Un’opzione fattibile, ma probabilmente molto costosa, sarebbe quella di scalare le risorse su base individuale. La scala è anche in base ad altre dimensioni, come la velocità di rete, le IOP, la capacità di archiviazione e la memoria. Il motivo per cui questo diventa costoso è che non offre un’elasticità incorporata, quindi potrebbe diventare costoso quando il carico è basso.
Tuttavia, è importante notare che l’architettura di scaling out necessita di un bilanciatore di carico (richieste da parte degli utenti finali, confine tra reti esterne e internazionali.) in modo da poter gestire lo streaming delle connessioni di un particolare tipo e di un gruppo di scansione (per il monitoraggio del carico del sistema, lo spawn di nuove istanze della CPU e il monitoraggio dell’inventario delle istanze attive).
2. Caching
L’esigenza di scalare ha portato alla richiesta e all’implementazione dello scaling su larga scala. La cache può migliorare le prestazioni e ridurre il consumo di risorse. L’utilizzo delle risorse comprende la CPU, le tariffe S3, le tariffe dell’archivio dati, l’utilizzo di API esterne e il database. Per verificare dove è possibile applicare la cache, eseguire un’analisi dei dati per comprendere le distribuzioni delle richieste e le dimensioni dei dati, compreso il rapporto lettura-scrittura.
3. Il tipo di partizioni da realizzare
Lo scopo del ridimensionamento è ovviamente quello di aggiungere capacità. Questo può avvenire in due modi: in verticale o in orizzontale. Nel vertical scaling, si aggiungono più risorse, ad esempio unità più grandi o più dure a un singolo server. L’operazione di calcolo è più grande, con una memoria migliore e una CPU più veloce. Nel vertical scaling, si prende una singola risorsa e si aumenta la capacità di gestione. In scala orizzontale, è possibile aggiungere altri nodi. Il modo più comune per effettuare lo scaling orizzontale è quello di suddividere i servizi in partizioni o shard. Questi frammenti verrebbero assegnati per soddisfare funzionalità specifiche (ad esempio, per soddisfare gli interessi di diversi tipi di utenti). Il vantaggio degli shard è che possono fornire negozi di capacità aggiuntiva. Tuttavia, il problema è che il progetto iniziale deve prevedere il ridimensionamento orizzontale, perché aggiungerlo in seguito potrebbe essere un compito davvero difficile.
Cose da ricordare durante il ridimensionamento delle applicazioni, annotare questi punti durante l’attività
1. Nessun compromesso sul tempo di attività del sito web
Il sito web deve essere disponibile per gli utenti in qualsiasi momento. Immaginate di gestire un negozio di e-commence e di avere il server che va in tilt ogni volta che c’è un picco di richieste. Per questo il tempo di attività del sito web è molto importante, e scalare la vostra applicazione web in modo che sia sempre disponibile, indipendentemente da guasti e interruzioni del sistema.
2. Opzione di recupero
Gli utenti potrebbero tornare a visualizzare gli stessi dati, quindi dovrebbero avere un accesso immediato alla planimetria. A meno che, naturalmente, i dati non siano aggiornati. Potete ottenere la fiducia degli utenti se sanno che possono accedere ai dati del sito web in qualsiasi momento.
3. Prestazioni
L’obiettivo principale del ridimensionamento dell’applicazione è garantire prestazioni eccellenti. Una risposta rapida, con un recupero immediato e una bassa latenza, è estremamente importante.
4. Gestibilità
Dopo aver scalato il sito web, è molto importante verificarne la gestibilità, in modo che diventi facile da gestire, mantenere e aggiornare.
Conclusione
C’è un’idea sbagliata secondo cui il PHP non è scalabile. Come verrebbero gestiti altri siti PHP su larga scala? La scalabilità riguarda più l’architettura dell’applicazione che il linguaggio. Il tempo necessario per sviluppare applicazioni web scalabili dipende dalla complessità dell’applicazione e dal framework utilizzato. In un’applicazione scalabile esistono due diversi livelli di programmazione: Front end e Back end. Come suggerisce il nome, il front-end è qualcosa con cui l’utente interagisce e l’interfaccia può essere qualsiasi cosa, da Android a iOS. Il back end consiste in circa l’80% del lavoro totale, ma l’utente non è consapevole di questa parte della sua applicazione web. La funzionalità gioca un ruolo fondamentale nella scalabilità. Un utente potrebbe voler caricare immagini, quindi è necessario considerare la scalabilità dello storage perché potrebbe aver bisogno di recuperarle in qualsiasi momento. Per scaricare e richiedere meglio le immagini, la bassa latenza è molto importante.
Ecco alcune letture interessanti su questo tema:
7 Fasi di scalabilità delle applicazioni web, Strategie per gli architetti.
Come costruire applicazioni web scalabili?
Costruire applicazioni scalabili sulla piattaforma cloud di Google.
Flickr.com/ klarititemplateshop.com/ Blogtrepreneur
Informazioni sull’autore: Deepak è il responsabile di PHPBabu e lavora anche presso la società madre YUHIRO Technologies Private Limited come responsabile dell’ufficio.