Ik zie geregeld situaties voorkomen, waarbij het handig is als er een achtergrondproces zou draaien die veel zaken afhandelt. Ik maak het liefst de situatie even concreet door voorbeelden te geven:
Ik zag iemand langskomen die een P2000-monitor aan het maken was voor op een website. Die data komt van een bron. De meest directe oplossing zou gewoon zijn om het hele proces van het parsen van die data te laten afhandelen door het .PHP-bestand dat de gebruiker opvraagt. Dan loopt je server wel dubbel werk te doen, omdat er bij iedere gebruiker weer informatie wordt opgehaald van de bron. Dat moet beter kunnen, door gewoon 1 proces headless te draaien die scheduled alle data ophaalt en het allemaal in een database wegzet, zodat er niet voor iedere gebruiker weer verbinding gemaakt hoeft te worden met de originele bron van de data.
Ander voorbeeld:
Ik ben nu een dagje bezig geweest met een scraper in Python die data ophaalt van een site met live voetbaluitslagen. Dat Pythonscript verwerkt het HTML-bestand, leest de wedstrijden en alle details ervan uit, en geeft me een JSON-bestand terug (dit alles met Flask). Met de kennis die ik nu heb, zou ik waarschijnlijk het JSONizen van de data eruit halen, en het Pythonscript vanaf de server die ik thuis heb staan, verbinding laten maken met de MySQL-database van de hosting waar ik bij zit (in dit geval Network Solutions), om de data zo weg te schrijven. Het lijkt me echter nog netter als het gewoon als een REST API met JSON blijft draaien, en de server op de een of andere manier gewoon ieder half uur oid. bij mijn Raspberry Pi komt vragen om de nieuwe data via die API.
Ik hoop dat mijn punt hiermee een beetje duidelijk is. Het knaagt aan me dat ik bij wijze van spreken een webapplicatie draaiend zou hebben bij Network Solutions, en ik de volgende constructie moet gebruiken:
- Data die van een externe bron komt wordt opgehaald door de Raspberry Pi bij mij thuis
- Die data wordt vervolgens opgeslagen in de MySQL-database bij Network Solutions
- De gebruiker krijgt data voorgeschoteld uit de MySQL-database bij Network Solutions
Het lelijkste in deze situatie vind ik, dat deze webapp bijvoorbeeld bij Network Solutions draait, die me tot op heden nog nooit downtime hebben bezorgd, maar dat de hele webapp keihard op zijn bek zou gaan wanneer mijn Raspberry Pi uitvalt of ik thuis even geen internet heb, en de server bij NS opeens geen toevoer van nieuwe data krijgt van de scraper. Het gaat nu wel, maar ik vind het niet prettig om een SPOF te hebben die zo 'kwetsbaar' is: als Ziggo eens onderhoud pleegt in mijn buurt zou de webapp al helemaal niet meer nieuwe data kunnen verkrijgen.
Ik verwacht ook niet dat ik bij Network Solutions gebruik kan maken van Python, in combinatie met o.a. Flask, BeautifulSoup, virtualenv en welke andere modules er nog meer aan te pas zouden kunnen komen, maar zelfs als ik het script omschrijf naar PHP zou het erg prettig zijn als er bij de server bij NS een proces kan draaien dat mijn PHP bestand met een vaste interval uitvoert (zodat de webapp 'zelfonderhoudend' is en niet afhankelijk is van een andere server (nu dus mijn Raspberry Pi)). Welke technieken zijn aan te raden om een dergelijk doel te bewerkstelligen, of is het enige middel om de betrouwbaarheid van de dienst in orde te houden simpelweg ervoor zorgen dat de server thuis nooit vastloopt en altijd een internetverbinding heeft?
Ik zag iemand langskomen die een P2000-monitor aan het maken was voor op een website. Die data komt van een bron. De meest directe oplossing zou gewoon zijn om het hele proces van het parsen van die data te laten afhandelen door het .PHP-bestand dat de gebruiker opvraagt. Dan loopt je server wel dubbel werk te doen, omdat er bij iedere gebruiker weer informatie wordt opgehaald van de bron. Dat moet beter kunnen, door gewoon 1 proces headless te draaien die scheduled alle data ophaalt en het allemaal in een database wegzet, zodat er niet voor iedere gebruiker weer verbinding gemaakt hoeft te worden met de originele bron van de data.
Ander voorbeeld:
Ik ben nu een dagje bezig geweest met een scraper in Python die data ophaalt van een site met live voetbaluitslagen. Dat Pythonscript verwerkt het HTML-bestand, leest de wedstrijden en alle details ervan uit, en geeft me een JSON-bestand terug (dit alles met Flask). Met de kennis die ik nu heb, zou ik waarschijnlijk het JSONizen van de data eruit halen, en het Pythonscript vanaf de server die ik thuis heb staan, verbinding laten maken met de MySQL-database van de hosting waar ik bij zit (in dit geval Network Solutions), om de data zo weg te schrijven. Het lijkt me echter nog netter als het gewoon als een REST API met JSON blijft draaien, en de server op de een of andere manier gewoon ieder half uur oid. bij mijn Raspberry Pi komt vragen om de nieuwe data via die API.
Ik hoop dat mijn punt hiermee een beetje duidelijk is. Het knaagt aan me dat ik bij wijze van spreken een webapplicatie draaiend zou hebben bij Network Solutions, en ik de volgende constructie moet gebruiken:
- Data die van een externe bron komt wordt opgehaald door de Raspberry Pi bij mij thuis
- Die data wordt vervolgens opgeslagen in de MySQL-database bij Network Solutions
- De gebruiker krijgt data voorgeschoteld uit de MySQL-database bij Network Solutions
Het lelijkste in deze situatie vind ik, dat deze webapp bijvoorbeeld bij Network Solutions draait, die me tot op heden nog nooit downtime hebben bezorgd, maar dat de hele webapp keihard op zijn bek zou gaan wanneer mijn Raspberry Pi uitvalt of ik thuis even geen internet heb, en de server bij NS opeens geen toevoer van nieuwe data krijgt van de scraper. Het gaat nu wel, maar ik vind het niet prettig om een SPOF te hebben die zo 'kwetsbaar' is: als Ziggo eens onderhoud pleegt in mijn buurt zou de webapp al helemaal niet meer nieuwe data kunnen verkrijgen.
Ik verwacht ook niet dat ik bij Network Solutions gebruik kan maken van Python, in combinatie met o.a. Flask, BeautifulSoup, virtualenv en welke andere modules er nog meer aan te pas zouden kunnen komen, maar zelfs als ik het script omschrijf naar PHP zou het erg prettig zijn als er bij de server bij NS een proces kan draaien dat mijn PHP bestand met een vaste interval uitvoert (zodat de webapp 'zelfonderhoudend' is en niet afhankelijk is van een andere server (nu dus mijn Raspberry Pi)). Welke technieken zijn aan te raden om een dergelijk doel te bewerkstelligen, of is het enige middel om de betrouwbaarheid van de dienst in orde te houden simpelweg ervoor zorgen dat de server thuis nooit vastloopt en altijd een internetverbinding heeft?