Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Hoe achtergrondprocessen draaien voor een website?

Pagina: 1
Acties:

  • iChaos
  • Registratie: December 2009
  • Nu online

iChaos

It's Lupus.

Topicstarter
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?

  • Icekiller2k6
  • Registratie: Februari 2005
  • Laatst online: 22-11 18:59
Umm... Cronjob?

PHP script dat opgeroepen wordt aan de hand van een cronjob @ NS Server.
Is redelijk basic mogelijkheid van hosting server. En dan rechtstreeks in MySQL storen.

Controleer als eerste uiteraard of PHP script niet al draait.

Dit hangt overigens af van hoelang het ongeveer gaat duren. Als je NS server Python ondersteunt zou ik dat aanraden (ivm timeouts etc)

[ Voor 110% gewijzigd door Icekiller2k6 op 06-01-2014 20:21 ]

MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000


  • hommer
  • Registratie: September 2000
  • Laatst online: 15-11 23:23
Als je geen cron jobs kunt draaien omdat je geen toegang hebt tot de betreffende server en het geld (belachelijk weinig) mag kosten kun je ook http://webcron.org/ gebruiken.

t.k.a. sig space t.e.a.b.


  • iChaos
  • Registratie: December 2009
  • Nu online

iChaos

It's Lupus.

Topicstarter
Hm, ik heb geen toegang tot een Pythonomgeving bij Network Solutions, maar een cron job kan wel ingesteld worden via het webpaneel zie ik net :) Had niet gedacht dat dat er in zou zitten (kom zelf nooit in het administratiepaneel, alleen in de FTP/MySQL/phpMyAdmin). Oké, dan is mijn probleem ook weer opgelost :) Bedankt heren!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Het mooie is ook nog dat bij het gebruik van een cronjob je script niet na x seconden wordt afgekapt vanwege een time-out en je dus ook grote(re) operaties kunt doen.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Icekiller2k6 schreef op maandag 06 januari 2014 @ 20:15:
Dit hangt overigens af van hoelang het ongeveer gaat duren. Als je NS server Python ondersteunt zou ik dat aanraden (ivm timeouts etc)
Een cronjob die een PHP-script gebruikt heeft ook geen last van timeouts als je het goed instelt? :) Je moet er geen daemon in schrijven maar een cronjob die maximaal een kwartiertje runtijd heeft kan best. Mits je natuurlijk sneller die job runt dan je server hem kan uitvoeren. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1