Sto cercando di trovare la soluzione migliore per ridimensionare un servizio di chat in AWS. Mi è venuta in mente un paio di possibili soluzioni:Idee per ridimensionare la chat in AWS?
Redis Pub/Sub - Quando un utente stabilisce una connessione a un server che server di sottoscrive ID di quell'utente. Quando qualcuno invia un messaggio a quell'utente, un server eseguirà una pubblicazione sul canale con l'id dell'utente. Il server a cui l'utente è connesso riceverà il messaggio e lo sposterà sul client appropriato.
SQS - Ho pensato di creare una coda per ogni utente. Il server a cui è connesso l'utente eseguirà il polling (o utilizzerà il polling lungo SQS) in coda. Quando viene scoperto un nuovo messaggio, verrà inviato all'utente dal server.
SNS - Mi è piaciuto molto questa soluzione fino a quando ho scoperto il limite di 100 argomento. Avrei bisogno di creare un argomento per ogni utente, che supporterebbe solo 100 utenti.
I loro altri modi in cui la chat potrebbe essere ridimensionata utilizzando AWS? L'approccio SQS è fattibile? Quanto tempo impiega AWS per aggiungere un messaggio a una coda?
Grazie per questa risposta, un sacco di grandi informazioni! Il servizio di chat sarà costruito sul web. Il pensiero attuale è di usare una semplice soluzione a lungo polling per spingere i messaggi verso il basso nel browser. In termini di numero di utenti, è un nuovo prodotto quindi non abbiamo una buona stima. Vogliamo essere in grado di supportare tutti gli utenti che si registrano. Hai un'idea con SQS è interessante, la mia preoccupazione principale per SQS è la latenza tra i messaggi. Se un utente aggiunge un messaggio alla coda, quanto tempo ci vorrà per riceverlo? Potrebbe essere qualcosa che dovrò fare un prototipo di. –
Punti giusti, ma quell'impostazione (DB relazionale, ridimensionamento legato all'hardware e Java/C# per il controllo) sembra un modo "vecchio stile" di fare chat. In questi giorni, esaminerei i file flat per la memorizzazione a lungo termine (forse scaricando gli ultimi messaggi su S3 una volta al minuto?), SNS per Pub/Sub (con un argomento per "room"), un set di prestazioni elevate non -threaded event server come Twisted (Python) o Node.js (JavaScript), e infine Web Sockets e/o Server Sent Events per ottenere il carico più leggero possibile sui server mantenendo il flusso di messaggi in diretta su ciascun client. O mi sta sfuggendo qualcosa? –
@Roland. Sono d'accordo con te sul fatto che un grande DB relazionale sul retro e un gruppo di server front-end è il modo in cui la vecchia scuola lo fa. Se sviluppassi un servizio oggi, probabilmente utilizzerei una combinazione di RDS e DynamoDB. Il front-end che utilizza socket Web o polling lungo dipende dai tipi di client che abbiamo scelto come target. Ci sono molti modi per skinare questo gatto, e senza conoscere un bel po 'dei requisiti (Esegui su una lan privata? Nel cloud? Scala? Costo Preoccupazioni? Crescita? Tipi di client? Ciclo di vita dei dati? Ecc.) È difficile dire di più ... –