php + servizio web [chiuso]

1

Qualcuno può confermare buone prestazioni usando PHP + Java webservice (per compiti pesanti) in esecuzione su NGINX (o Apache) perché PHP è lento nel completare alcune attività pesanti e voglio fare un servizio web in java per comunicare con PHP tramite SOAP o REAT o JSON.

Il fatto che sto facendo questa domanda è che conosco già PHP ad un buon livello (e Java e non voglio iniziare ad imparare ASP o Ruby) e HTML5, CSS3 e voglio sviluppare un grande portale che avrà un aumento del numero di richieste (1000/2000 request / sec) e non voglio codificare l'intera applicazione in Java (perché PHP ha più senso), ho solo bisogno di un lavoro pesante per essere fatto da un webservice.

Per il mio progetto, PHP è lento nel fare alcuni calcoli matematici e l'accesso ai file di I / O ogni secondo. Consuma molta memoria e molta CPU. Alla velocità di 1000 req / s quasi schiaccia.

Questa è una buona pratica? C'è un'altra soluzione?

    
posta pufos 17.02.2012 - 11:09
fonte

1 risposta

2

Se hai bisogno di prestazioni migliori con il tuo codice PHP, questi sono i passi che dovresti seguire, nell'ordine:

  1. Identifica i colli di bottiglia. Aggiungi qualche semplice profilazione per vedere dove trascorre la maggior parte del tempo il tuo codice. Concentrati su quella parte.
  2. Controlla la tua complessità algoritmica ("big-O"). Se puoi ridurre un algoritmo O (n ^ 3) a O (n ^ 2), fallo.
  3. Per tutto ciò che fai, controlla se c'è una funzione di libreria PHP che può fare la stessa cosa. Molti di questi sono implementati in C, e funzionano molto più velocemente di un codice PHP equivalente.
  4. Equilibrio tra CPU e RAM. Per la maggior parte dei problemi, puoi scambiare l'uno con l'altro: se usi troppa RAM, puoi generare alcuni dei tuoi dati proceduralmente quando necessario (scambi i cicli della CPU per la RAM), se sei legato alla CPU, puoi spesso precalcolare i risultati e riutilizzarli (utilizzando più RAM per risparmiare i cicli della CPU).
  5. Utilizza la cache. Un sacco. Se non stai già usando memcached, fallo e usalo per memorizzare nella cache i risultati finali, i risultati intermedi o qualsiasi altra cosa di cui avrai bisogno. Potresti persino voler memorizzare nella cache a diversi livelli, ad es., I risultati delle query del database della cache, i valori intermedi, i valori finali e le risposte non elaborate.
  6. Scrivi PHP più veloce. PHP e il suo interprete hanno qualche stranezza, quindi non è sempre ovvio se e perché una certa variazione di codice sia più veloce, quindi è necessario avere un profilo per poterlo sapere.
  7. Se necessario, implementare la parte più critica delle prestazioni del proprio codice in C e chiamare il codice C da PHP. Ci sono diversi modi per ottenere questo risultato: puoi scrivere un'estensione PHP, puoi semplicemente eseguire il bombardamento con il programma C, puoi eseguire il programma C come un binario CGI, oppure puoi progettare la parte C come demone e comunicare tramite nome tubi o prese locali. In caso di dubbio, il shellout è probabilmente l'opzione più semplice da implementare.
  8. Getta più hardware su di esso, cioè acquista un server più veloce.
  9. Distribuisci il carico su diversi server. Questo di solito richiede drastiche modifiche alla tua architettura, quindi dovresti investigare a fondo se questo è sia necessario che fattibile. Si noti inoltre che ci sono diverse strategie a questo.
risposta data 17.02.2012 - 12:03
fonte

Leggi altre domande sui tag