In PHP, come si codifica con la scalabilità in mente?

8

So che questa può essere una domanda generica, ma che cosa va esattamente nel ridimensionamento per tutti gli utenti che incontrerai, anche se non nei prossimi mesi? Ho fatto qualche ricerca e la maggior parte di ciò che viene fatto è lato server, con cache e altre cose simili. Qualsiasi punto nella giusta direzione sarebbe utile.

    
posta Andy 17.01.2012 - 17:19
fonte

3 risposte

24

"Anche se non nei prossimi mesi" profuma di ottimizzazione prematura. Non farlo:

  • Non ne vale la pena. Molte persone, quando realizzano un progetto, credono che il loro progetto sarà il secondo Facebook. Poi lo rilasciano e poi notano che dieci visitatori al mese sono il meglio che possono fare. Spendere meno tempo e denaro per l'ottimizzazione per un'ulteriore scalabilità e più tempo per pensare al progetto stesso sarebbe di aiuto.

  • È come avere i colli di bottiglia e la profilazione: hai sempre l'impressione che tu sappia perfettamente dove si trova il collo di bottiglia e, nella maggior parte dei casi, scopri di aver sbagliato durante la profilazione. Fai prima la tua domanda. Guarda come viene usato. Profilalo Raccogli dati BI. Raccogliere le metriche sul rendimento. Analizzalo. Controlla se la tua analisi era giusta. Fai le previsioni sul futuro, basandoti sulle tue analisi, quindi ottimizza per la scalabilità ciò che hai veramente bisogno di ottimizzare.

Ad esempio, un'applicazione web scalabile deve poter essere ospitata su più server. L'ultimo progetto che ho realizzato per il mio cliente era concepito per essere scalabile. C'è stata una scelta: o passiamo 1,5 mesi in più per far funzionare l'app Web su diversi server, oppure il cliente acquista un server di alta qualità (solo una macchina) e l'app Web è ospitata solo su questa macchina. Era molto meno costoso acquistare un server costoso, contando sia il costo diretto (prezzo del server rispetto al prezzo di 1,5 mesi di lavoro) sia i risparmi a lungo termine (consumo di energia di un server di alta qualità rispetto al consumo di diversi bassi -end server). Ora l'app è in esecuzione da alcuni mesi e, in base alle metriche, se un giorno si presentasse un problema con la scalabilità, ciò riguarderebbe in primo luogo il database e in secondo luogo l'infrastruttura di rete (switch, router, ecc. ).

Ora un'applicazione può essere più o meno scalabile su più punti:

  • Database: in base alla mia esperienza personale, la maggior parte dei problemi relativi alla scalabilità provengono dal database. Speriamo che ci siano molti modi per rendere il database scalabile per ogni motore di database di livello industriale, e anche prima ci sono molti modi per migliorare la struttura del database e per ottimizzare le query . Il caching aiuta anche

  • Rete: la larghezza di banda può essere un problema reale in alcune configurazioni e, a volte, non puoi fare nulla senza fare spese che non ti puoi permettere. Per evitare di essere bloccato a questo livello, puoi ottimizzare il design visivo del sito web in modo da avere meno immagini o immagini compresse migliori , ottimizzare il layout della pagina, ridurre le richieste HTTP (tramite sprite CSS ), ridurre la quantità di codice HTML inviato (tramite AJAX ), ecc. Compressione HTTP è un must. Caching del browser , ma le tue metriche potrebbero mostrare che molti client hanno una cache vuota.

  • Utilizzo della CPU e della memoria: anche il porting di un'applicazione ospitata da diversi server può essere doloroso, sia a livello di infrastruttura (hardware) che a livello di applicazione (software). Per evitare ciò, utilizza la memorizzazione nella cache e profila l'applicazione, rimuovendo progressivamente i bottlenecks .

risposta data 17.01.2012 - 17:28
fonte
5

La scalabilità è molto indipendente dal linguaggio, quindi non esiste una specifica cosa per PHP. Il fattore chiave è di avere sottosistemi disaccoppiati, comunicando tramite protocolli agnostici linguistici (per esempio se devi chiamare webservice dal tuo codice PHP, non usare il serialize di PHP, ma piuttosto JSON, anche se entrambi i componenti sono attualmente entrambi implementati in PHP). Questo ti consentirà di sostituire i componenti con altre alternative, magari sviluppate in altre tecnologie.

Puoi trovare molti esempi di architetture scalabili implementate usando PHP su highscalability.com blog

    
risposta data 17.01.2012 - 17:29
fonte
1

Preoccuparsi della scalabilità ora probabilmente non vale la pena: se il tuo progetto decolla e colpisce nel punto da cui non puoi scalare aggiungendo altro hardware, avrai abbastanza soldi per implementare misure più approfondite; se non lo fa, allora qualsiasi sforzo che fai ora è uno spreco di tempo e risorse.

Detto questo, ci sono alcune cose che puoi e dovresti fare per mantenere l'applicazione mantenibile , e se segui queste linee guida, il factoring della scalabilità sarà molto più semplice in seguito nel gioco. Una soluzione ideale ti consentirà di scambiare l'intero codice di archiviazione dati con solo modifiche minime alla logica del programma e nessuna modifica al codice di presentazione.

    
risposta data 17.01.2012 - 17:41
fonte

Leggi altre domande sui tag