Ho un singolo server in esecuzione su rackspace che ospita una singola app web PHP.Come utilizzare AWS SQS/SNS come coda di notifica push per attività di elaborazione pesanti tramite PHP?
L'app web PHP accetta l'invio di un modulo che deve quindi eseguire un'attività in base alle voci del campo modulo.
L'attività (chiamiamola attività di generazione dei metadati) richiede molto tempo di elaborazione. Mi chiedevo come consentire all'invio del modulo di essere un semplice salvataggio nel database e mostrare immediatamente la pagina di successo all'utente mentre eseguivo l'attività di generazione dei metadati in background.
Ho installato "aws/aws-sdk-php": "~3.11"
utilizzando il compositore nella stessa app Web.
Il mio piano è inizialmente questo:
codice che gestisce l'invio del modulo
$result = $model->save($_POST);
// this code will send the information to either SQS or SNS
$awsClient->sendsMessage($_POST);
if ($result) {
$this->redirect('success.html');
}
Ho letto circa la fanout architecture dichiarato da AWS.
I miei problemi con l'esempio di architettura fan-out (se ho capito bene) sono questo:
- il server che invia il messaggio a uno SQS o SNS sarà anche lo stesso server che elabora il compito di generare metadati. In effetti, è la stessa app web.
- SQS soddisfa la parte della coda (perché voglio eseguire le attività in una FIFO e le attività richiedono molto tempo per essere soddisfatte). Tuttavia, richiede che la mia app Web effettui il polling di SQS continuamente. Voglio una notifica push (da AWS alla mia app Web) piuttosto che la mia app Web che esegue il polling continuo di AWS per verificare l'esecuzione delle attività.
ho trovato una possibile soluzione suggerita here
La soluzione suggerita è:
inviare il messaggio ad un argomento SNS.
L'argomento SNS invia un messaggio sia alla coda SQS che alla mia app Web.
mio web app, dopo essere stato attivato, il polling la stessa coda SQS che ora è in coda il messaggio in modo continuo fino a quando la coda è vuota
Lo svantaggio che vedo da questo è che la mia web app eseguirà il polling della coda prima che la coda stessa abbia il messaggio.
Qual è il modo migliore per implementare le code di push utilizzando i servizi AWS?
Gee, grazie. Non pensavo così. Risposta fantastica! Ti do 50 punti extra per quello quando la taglia può essere aperta domani. –
Siamo spiacenti. Solo ora ti ho assegnato altri 50 punti –