Beste Tweakers,
Ik ben werkzaam als developer en tevens student informatica. Ik heb een vraag over de beste implementatie voor een use-case. Ikzelf heb daarbij al enkele dingen geprobeerd maar ik vraag me af of dit daadwerkelijk the-way-to-go is.
UseCase:
Het bestaande programma is volledig geschreven in PHP met het framework Yii. Het programma verzamelt gegevens m.b.v. een API en schrijft deze weg in zijn database. Het idee is om het schaalbaar te maken door meerdere servers bij te kunnen plaatsen om het verzamelen van gegevens op te splitsen. Vervolgens wordt deze opgeslagen data weggeschreven naar een zogenaamde master-server omgeving. Via een simple round-robin wordt een server ip/adres gegeven van waaruit de API moet worden benaderd. Deze moet de gegevens dan afhandelen waarna later de gegevens worden weggeschreven naar de master omgeving. Het idee is dus dat de master server alleen gegevens gaat verwerken en opslaan en de ''tussen''-servers de gegevens verzamelen en alles wat daarbij komt kijken. De moeilijkheid zit hem in dat er ook gegevens moeten worden gecontroleerd bij de master server om te voorkomen dat er duplicaten ontstaan; Data verstrekt door de API moet altijd per tijdsperiode uniek zijn en niet uitgegeven aan een ander via een andere tussen-server.
Situatieschets:
Browser <--> n-Aantal Tussen-servers <--> Master-Server
Mijn gedachten:...
Omdat het huidige systeem volledig in PHP is geschreven ben ik eerst naar REST/SOAP gaan kijken en/of directe database verbindingen. Mijn (weinige) ervaring is echter dat REST niet de meest snelle manier is om servers met elkaar te laten praten. Het mag absoluut NIET voorkomen dat 2 verschillende tussen servers eenzelfde gegevens uitdelen d.m.v. de API. Dit zou met controles verholpen kunnen worden maar idealiter worden er zo min mogelijk controles gedaan en moeten servers zelf al kunnen bepalen of iets kan of niet.
Ik ben daarom gaan kijken naar websockets omdat deze ''instant'' zijn (niets is instant maar als iets in de buurt komt?)
Websockets
PHP en websockets, het kan
maar in plaats van PHP ben ik voor Java gegaan (simpelweg omdat deze taal mij het meest bekend is en er zo snel een proof of concept kon worden gemaakt). Het punt is dat wanneer je de communicatie volledig over websockets wilt laten gaan, je tussen-server voor zowel Client als Server moet laten spelen. Client: om met de Master-Websocket server te connecten en Server om het PHP gedeelte ermee te laten connecten. Vervolgens heb ik een soort 'facade/queue'-thread gebouwd die wordt geïnterrupt van een sleep wanneer er een nieuwe opdracht door de server vanuit het PHP gedeelte doorkomt. Deze voert hij uit / sync hij met master. Zodra er data door de tussen-server is uitgedeeld wordt direct naar alle andere online tussen-servers gestuurd dat deze data tot tijdsbestek X bezet is en er wat anders moet worden verstuurd.
Lang verhaal kort;
Wat is een algemeen aanvaarde techniek om een programma op te splitsen voor loadbalancing (want dat is het eigenlijk) maar data wel correct te houden. Mijn vraag is eigenlijk; zijn websockets hier wel voor bedoeld? Of ben ik nu iets leuks aan het maken wat wel werkt maar eigenlijk niet werkbaar is / om aan te zien. Is REST voor dit scenario wel de way-to-go? Of is er iets wat ik over het hoofd heb gezien?
Bedankt voor het lezen van deze muur van tekst, vraag gerust als er iets niet duidelijk is.
Ik ben werkzaam als developer en tevens student informatica. Ik heb een vraag over de beste implementatie voor een use-case. Ikzelf heb daarbij al enkele dingen geprobeerd maar ik vraag me af of dit daadwerkelijk the-way-to-go is.
UseCase:
Het bestaande programma is volledig geschreven in PHP met het framework Yii. Het programma verzamelt gegevens m.b.v. een API en schrijft deze weg in zijn database. Het idee is om het schaalbaar te maken door meerdere servers bij te kunnen plaatsen om het verzamelen van gegevens op te splitsen. Vervolgens wordt deze opgeslagen data weggeschreven naar een zogenaamde master-server omgeving. Via een simple round-robin wordt een server ip/adres gegeven van waaruit de API moet worden benaderd. Deze moet de gegevens dan afhandelen waarna later de gegevens worden weggeschreven naar de master omgeving. Het idee is dus dat de master server alleen gegevens gaat verwerken en opslaan en de ''tussen''-servers de gegevens verzamelen en alles wat daarbij komt kijken. De moeilijkheid zit hem in dat er ook gegevens moeten worden gecontroleerd bij de master server om te voorkomen dat er duplicaten ontstaan; Data verstrekt door de API moet altijd per tijdsperiode uniek zijn en niet uitgegeven aan een ander via een andere tussen-server.
Situatieschets:
Browser <--> n-Aantal Tussen-servers <--> Master-Server
Mijn gedachten:...
Omdat het huidige systeem volledig in PHP is geschreven ben ik eerst naar REST/SOAP gaan kijken en/of directe database verbindingen. Mijn (weinige) ervaring is echter dat REST niet de meest snelle manier is om servers met elkaar te laten praten. Het mag absoluut NIET voorkomen dat 2 verschillende tussen servers eenzelfde gegevens uitdelen d.m.v. de API. Dit zou met controles verholpen kunnen worden maar idealiter worden er zo min mogelijk controles gedaan en moeten servers zelf al kunnen bepalen of iets kan of niet.
Ik ben daarom gaan kijken naar websockets omdat deze ''instant'' zijn (niets is instant maar als iets in de buurt komt?)
Websockets
PHP en websockets, het kan
Lang verhaal kort;
Wat is een algemeen aanvaarde techniek om een programma op te splitsen voor loadbalancing (want dat is het eigenlijk) maar data wel correct te houden. Mijn vraag is eigenlijk; zijn websockets hier wel voor bedoeld? Of ben ik nu iets leuks aan het maken wat wel werkt maar eigenlijk niet werkbaar is / om aan te zien. Is REST voor dit scenario wel de way-to-go? Of is er iets wat ik over het hoofd heb gezien?
Bedankt voor het lezen van deze muur van tekst, vraag gerust als er iets niet duidelijk is.