Redis
 sql >> Database >  >> NoSQL >> Redis

Idee per ridimensionare la chat in AWS?

Costruire un servizio di chat non è così facile come penseresti.

Ho creato server, client e SDK XMPP completi e posso testimoniare alcuni dei problemi sottili e difficili che sorgono. Un prototipo in cui gli utenti si vedono e chattano è facile. Un sistema completo di funzionalità con creazione di account, sicurezza, rilevamento, presenza, consegna offline ed elenchi di amici è molto più di una sfida. Ridimensionarlo su un numero arbitrario di server è particolarmente difficile.

PubSub è una funzionalità offerta da Chat Services (vedi XEP-60) piuttosto che un mezzo tradizionale per creare un servizio di chat. Posso vedere il fascino, ma PubSub può avere degli svantaggi.

Alcune domande per te:

  1. Lo stai facendo sul Web? Gli utenti si connetteranno e eseguiranno il long-poling o disponi di una soluzione Web Sockets?

  2. Quanti utenti? Quante connessioni per utente? Rapporto tra scritture e letture?

  3. La tua idea di utilizzare SQS in questo modo è interessante, ma probabilmente non sarà scalabile. Non è insolito avere 50k o più utenti su un server di chat. Se esegui il polling di ciascuna coda SQS per ciascun utente, non ti avvicinerai a questo. Sarebbe meglio avere una coda per ogni server e il server esegue il polling solo di quella coda. Quindi sta a te capire su quale server si trova un utente e inserire il messaggio nella coda giusta.

Sospetto che vorrai fare qualcosa del tipo:

  1. Un grande database RDS sul back-end.
  2. Un gruppo di server front-end che gestiscono le connessioni client.
  3. Alcuni codici Java/C# di livello intermedio che tengono traccia di tutto e instradano i messaggi nel posto giusto.

Per avere un'idea della complessità della creazione di un server di chat, leggere le RFC di XMPP:RFC 3920RFC 3921