We draaien een cluster van meerdere webservers (nginx/fpm-php en node.js) en daarachter een database (MySQL) server.
We hebben duizenden gebruikers die vooral de volgende actie doen:
Ook willen we andere gebruikers de mogelijkheid geven een live-stream van de opgeslagen json-data-objects te ontvangen. Voor deze stream hadden we node.js en socket.io in gedachten.
De vraag is nu wat de beste setup hiervoor zou zijn, waarbij de database het meest ontzien wordt. Mijn voorstel zou zijn:
We hebben duizenden gebruikers die vooral de volgende actie doen:
- Sturen een json-data-object naar de server
- PHP voegt de user_id toe aan de hand van de sessie van de gebruiker
- PHP doet een MySQL query om te kijken hoe dit object beoordeeld moet worden.
- PHP beoordeelt het json-data-object en geeft er een score aan
- PHP slaat het json-data-object inclusief de score op in de MySQL database
- PHP laat de gebruiker weten dat het object goed is opgeslagen.
Ook willen we andere gebruikers de mogelijkheid geven een live-stream van de opgeslagen json-data-objects te ontvangen. Voor deze stream hadden we node.js en socket.io in gedachten.
De vraag is nu wat de beste setup hiervoor zou zijn, waarbij de database het meest ontzien wordt. Mijn voorstel zou zijn:
- Gebruiker stuurt json-data-object naar de server
- PHP voegt de user_id toe aan de hand van de sessie van de gebruiker
- PHP slaat json-data-object in Redis op
- PHP laat de gebruiker weten dat het object goed is opgeslagen.
- Node.js draait een process dat geregeld kijkt of redis nog json-data-objecten bevat die nog niet zijn behandeld.
- Node.js doet een MySQL query om te kijken hoe dit object beoordeeld moet worden.
- Node.js beoordeelt het json-data-object en geeft er een score aan
- Node.js slaat het json-data-object inclusief de score op in de MySQL database
- Node.js stuurt het json-data-object naar alle gebruikers die aangemeld zijn voor de stream.