2011-12-31 4 views
29

Abbiamo appena ricevuto nuovi server per il nostro nuovo sistema e voglio sapere cosa dovrei fare per rendere il mio nuovo codice il più efficiente possibile e come organizzarlo.organizzazione codice php

Voglio una buona soluzione, quindi non devo riorganizzarlo 1 anno da ora in avanti (ad esempio) e voglio le migliori pratiche e tecniche per assicurarmi che il mio codice sopravviva abbastanza a lungo per evitare di ridimensionarlo dopo. inutile quadro qui

Ecco il mio nuovo ENV:

  • 8 server web LAMP (apache2, php 5.3.5, cent os 5) - (Xeon E5645, 32g di RAM, RAID 10 1T 15k) - 1 di bilanciamento del carico gestirli
  • 12 database MySQL 5.5 server (come sopra) con la replica (4 maestro, 8 slave)
  • 1 server sVN (vecchio assistente usiamo)

La mia idea doveva rispecchiarli (i server web) e questi spingevano il codice dall'SVN a tutti i server. È buono questo?

+2

è il server svn sulla stessa rete dei server web? o hai svn ospitato in un dominio separato che non ti appartiene? –

+0

il server svn si trova nello stesso intervallo IP quindi sì sulla stessa rete dei server ma non accessibile dall'esterno –

risposta

36

È possibile centralizzare il codice in una cartella comune (creare uno script che copi tutto il codice sugli 8 server o utilizzare NFS).

Questo codice centralizzato può trovarsi in uno o più repository nel SVN. Quindi quando spingi, spingi solo ciò di cui hai bisogno per spingere.

Ad esempio, è possibile creare un repository per le proprie librerie PHP (classe database, xml, imap ecc.). In una struttura semplice e quando si chiama questi file è sufficiente fare:

require('/web/lib/DatabaseMySQL.class.php'); 

In questo modo, si sa tutti i file necessari al nello stesso posto e molto facile da mantenere. Specialmente se il tuo codice richiede file richiesti che richiedono file.

È possibile creare il numero di repository che si desidera e ripetere ciò se non si desidera mescolare i file, ad esempio di terze parti (Smarty, phpmailer) con il codice creato.

L'altra cosa è, non reinventare la ruota. C'è un sacco di buon codice là fuori che probabilmente fa ciò che hai già bisogno di fare. Come inviare e-mail (phpmailer o qualsiasi altro) o sistema di template (Smarty o altri). In questo modo hai lo stesso tempo di sviluppo e quando un aggiornamento, se disponibile, devi semplicemente scaricare, copiare (commit se ce l'hai in un repository) e premere.

Script VS NFS.

Creare uno script per inserire tutto il codice in 8 server Web è facile. Il lato negativo di questo è che è necessario assicurarsi che tutte le cartelle e tutti i file presenti su ciascun server siano identici per evitare errori. Inoltre, se c'è un ritardo sulla rete o la caduta della connessione durante il push, alcuni server non avranno lo stesso codice. Di nuovo, più errori. Questo è un po 'più veloce da eseguire rispetto alla soluzione NFS.

Creare un NFS risolvere il problema sopra poiché si utilizza solo 1 percorso, ma se tale posizione non tutti i server verranno eseguiti correttamente. Quindi, quando si preme il codice, si spinge solo su 1 posto e tutti gli altri server hanno automaticamente il nuovo codice. Qualcosa che devi sapere anche, questo sarà un po 'più lento di se il codice è direttamente sul disco rigido.

Ecco uno script di esempio è possibile utilizzare:

È possibile creare uno script sh che copierà il codice dal repository (per esempio, il codice hai estratto dal repository) per tutti i server in questo modo:

// file: pushcode.sh 
#!/bin/bash 
/usr/bin/rsync -avz --exclude='.svn' -e ssh /path/to/code/checkedout/ [email protected]:/path/to/code 
/usr/bin/rsync -avz --exclude='.svn' -e ssh /path/to/code/checkedout/ [email protected]:/path/to/code 

rendono questo script eseguibile ed eseguirlo:

./pushcode.sh 

per assicurarsi copia il codice correttamente senza richiedere la password ogni volta, si dovrà bypass the ssh login.

Ecco una buona come si potrebbe: https://serverfault.com/questions/195035/linux-nfs-performance-vs-other-fss

+0

grazie per questo, molto utile. penso che il malato debba andare con la sceneggiatura da avviare, sembrare più semplice all'inizio, qualsiasi raccomandazione sulla sceneggiatura? Come posso farlo? –

+0

Ho aggiornato la mia risposta –

+0

grazie mille per il vostro aiuto –