2 websites/servers delen één database met gecachte output?

Pagina: 1
Acties:

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06-2025

Gerwin

Ik ben er klaar voor!

Topicstarter
Ik ben nu al een tijd bezig met een grote website. Op die site staat dagelijke veel informatie die uit een Mysql database getrookken word, maar om de serverload zo minimaal te maken heb ik die in *.dat bestandjes gechacht op de server in een afgeschermde directory. Deze bestandjes worden geïncluded in de websites, bij elke bezoeker word er nu gekeken of bepaalde bestandjes (van die dag) al op de server aanwezig zijn dit doe ik met
PHP:
1
if (!file_exists($strFilename0)) {


zo heb ik op een website een stuk of 4 tot 5 dingen staan die allemaal kijken of er al een recent bestandje op de server gecacht is, zo niet dan moet hij die uit de database trekken. Dit werkt allemaal heel erg aardig, maar ik vroeg en vraag me toch af of ik zoiets niet nog simpeler kan maken dan nu, om zo de serverload nog lager te maken?

Dit komt voort uit dat ik nu op een complete andere url en op een andere server opnieuw een nieuwe site gemaakt heb, deze heeft gemiddeld net zoveel hits als die eerste website, en ik wil bepaalde dingen uit die eerste database ook op de andere website gebruiken. Nu heb ik zitten denken dat ik een bestandje op server 1 kan erop kan laten zetten met z'n geweldige "if (!file_exists($strFilename0))" en dan met server 2 kijken of dat bestandje er inderdaad is bij elke bezoeker. Mocht die aanwezig zijn dan moet hij hem kopieren naar zichzelf en in een eigen directory staan. Maar daarvoor moet ik dan opnieuw een "if (!file_exists($strFilename0)) " gebruiken, dus nog voordat hij gaat kijken of het bestand al gecacht is moet hij kijken of hij 'm al niet heeft.

Ik vind het allemaal heel ingewikkeld worden. Ik heb ook al zitten te denken om zelf handmatig al die .dat bestandjes te genereren en vervolgens over te kopieren naar server 2 maar dat is onbegonnen werk, en ik zou dit zo graag willen hebben dat ik er geen omkeken naar heb en me kan richten op de inhoud van de site's in plaats van of de bestandjes wel goed staan.

Kan ik op een hele simpele manier gegevens uit een Mysql database op een server op een andere server ophalen? Is er een manier dat ik niet weet ik het hoeveel keer "if (!file_exists($strFilename0)) " moet gebruiken?

Station van Gerwin Prins op Apple Music


  • jurri@n
  • Registratie: Maart 2000
  • Laatst online: 21-08 12:49
Zelf genereren: een Perl of PHP-script laten uitvoeren door de cron (linux) of taakplanner (windows) die 1x per uur alle .dat-files genereerd... heb je er geen omkijken meer naar. Bovendien kun je er dan zeker van zijn dat je files bestaan en hoef je ook niet meer te controleren of ze bestaan (scheelt weer wat in de load).

En dit proces kun je op iedere server apart een keer laten uitvoeren... beiden laat je gewoon naar dezelfde mysql-server connecten (ene zal gewoon localhost blijven gebruiken, andere gebruikt andere.server.xx).

Overigens: waarom .dat-files genereren en niet meteen je hele pagina in HTML-vorm?

[ Voor 24% gewijzigd door jurri@n op 07-09-2003 08:22 ]


  • Stewie!
  • Registratie: September 2001
  • Laatst online: 07:43

Stewie!

Keen must die!

Gerwin schreef op 07 September 2003 @ 07:43:

Kan ik op een hele simpele manier gegevens uit een Mysql database op een server op een andere server ophalen?
Ja, niet connecten met localhost maar met dat ip-adres 8)7

Hee spider, lang niet meer gesproken, misschien nog eens bij een mob?

[ Voor 14% gewijzigd door Stewie! op 07-09-2003 11:23 ]


Strava: https://www.strava.com/athletes/149347154


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

In de eerste plaats zou je eens naar optimalisatie van je code kunnen gaan kijken; maar het kan natuurlijk zo zijn dat dat niet het probleem is waar je tegenaan loopt. Wat je dan zou kunnen doen is (zoals jurri@n al zegt) alle dynamische pagina's met cron laten uitspugen en dan door de webserver laten oppakken. Mocht de load verder willen verlagen dan kun je deze uitgespuugte bestanden met bijvoorbeeld RSYNC synchroniseren met een andere webserver. Ook kun je gaan kijken of je de taken kan scheiden tussen 1 database server; en 1 webserver. :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • slm
  • Registratie: Januari 2003
  • Laatst online: 25-06 12:45

slm

Het beste (qua doorzichtigheid en gemak) is natuurlijk als je de mysql server kan bereiken vanaf de andere server zoals DaMorpheus zei. Het is uiteraard wel een stuk minder veilig.

Als dat niet mogelijk is, zou ik gaan voor het volgende:

hoofdbestand:
include *.php bestand

Inhoud *.php bestand:
1. check of [idemnaam].dat bestaat, zo ja include en einde, anders
2. trek het uit de database, maak de betreffende .dat aan en echo het tevens naar de client

Inhoud *.php bestand op server 2:
1. check of [idemnaam].dat op server 2 bestaat, zo ja include en einde, anders
2. fread de .php file op server 1 (zal alleen de benodigde output opleveren in een variabele)
3. maak [idemnaam].dat op server 2 aan en echo het tevens naar de client

(eventueel kan je punt 3 laten vallen, maar dat zorgt voor meer verkeer en langere wachttijden)

Zoals je ziet een stuk omslachtiger.

EDIT/
Vergezocht misschien voor extern gehoste sites (zeker bij 2 verschillende providers), maar misschien kan je hen zover krijgen de ene database te laten replicaten met de andere.

[ Voor 10% gewijzigd door slm op 07-09-2003 15:55 ]

To study and not think is a waste. To think and not study is dangerous.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:56
Is alleen (een deel van) je content statisch, of zijn al je pagina's statisch? In het laatste geval is het ook een goede strategie om je caching headers goed in te stellen en een proxy server te installeren, die de gecachede content voor je serveert. Het voordeel van deze oplossing boven je eigen implementatie, is dat je gebruik kunt maken van gestandaardiseerde voorzieningen waarvoor kwalitatief hoogstaande implementaties beschikbaar zijn. De oplossing is dus waarschijnlijk efficiënter dan wannneer je 'm zelf in PHP zou moeten programmeren.

Als je slechts een deel van je content kan cachen, dan ontkom je er helaas niet aan om het op te lossen zoals je nu al doet. Verschillende fysieke servers moeten dan hun eigen cache aanleggen.

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06-2025

Gerwin

Ik ben er klaar voor!

Topicstarter
jurri@n schreef op 07 september 2003 @ 08:21:
Zelf genereren: een Perl of PHP-script laten uitvoeren door de cron (linux) of taakplanner (windows) die 1x per uur alle .dat-files genereerd... heb je er geen omkijken meer naar. Bovendien kun je er dan zeker van zijn dat je files bestaan en hoef je ook niet meer te controleren of ze bestaan (scheelt weer wat in de load).

En dit proces kun je op iedere server apart een keer laten uitvoeren... beiden laat je gewoon naar dezelfde mysql-server connecten (ene zal gewoon localhost blijven gebruiken, andere gebruikt andere.server.xx).

Overigens: waarom .dat-files genereren en niet meteen je hele pagina in HTML-vorm?
Die CRON heb ik aan zitten denken, het schijnt wel mogelijk te zijn, maar daarmee ben ik dan nog niet klaar als bestandjes op de server niet bestaan op het moment dat de website opgevraagd word. Stel nu dat de bestanden niet bestaan en de CRON nog niet gelopen heeft. Of dat de bestandjes weg zijn en de pagina opgevraagd word? Of zijn dit zorgen die niet nodig zijn?

Die HTML direct genereren is een mogelijkheid, daar ga ik zeker over nadenken, maar ik heb ook dynamische dingen op de pagina staan die elk uur veranderd worden (nieuwsberichten, updatetracker). Ik wil die dingen cachen in die .dat zoals ik dat nu ook doe, maar ik heb de indruk dat zoals ik het nu doe het erg veel load vergt van de server. Daarbij komt dat ik bepaalde categorieren van de updatetracker niet op die andere server kan krijgen.
DaMorpheus schreef op 07 september 2003 @ 08:22:
[...]

Ja, niet connecten met localhost maar met dat ip-adres 8)7

Hee spider, lang niet meer gesproken, misschien nog eens bij een mob?
En kan je met dat IP nummer zonder meer connecten dan?
De ene website is als Virtual Host op server 1 met database en de andere zit op Virtual Host op de server 2 en wil dus de database van server 1 gebruiken.
Spider.007 schreef op 07 september 2003 @ 09:19:
In de eerste plaats zou je eens naar optimalisatie van je code kunnen gaan kijken; maar het kan natuurlijk zo zijn dat dat niet het probleem is waar je tegenaan loopt. Wat je dan zou kunnen doen is (zoals jurri@n al zegt) alle dynamische pagina's met cron laten uitspugen en dan door de webserver laten oppakken. Mocht de load verder willen verlagen dan kun je deze uitgespuugte bestanden met bijvoorbeeld RSYNC synchroniseren met een andere webserver. Ook kun je gaan kijken of je de taken kan scheiden tussen 1 database server; en 1 webserver. :)
Daar kan ik aan gaan denken, maar als ik het voor elkaar kan krijgen dat die output van mysql (die slechts eens per uur ofzo veranderd) gecacht word op beide servers dan is een database server beetje overbodig denk ik. Tis niet zo dat er elke seconden dingen veranderen in de database.
slm schreef op 07 september 2003 @ 15:35:
Het beste (qua doorzichtigheid en gemak) is natuurlijk als je de mysql server kan bereiken vanaf de andere server zoals DaMorpheus zei. Het is uiteraard wel een stuk minder veilig.

Als dat niet mogelijk is, zou ik gaan voor het volgende:

hoofdbestand:
include *.php bestand

Inhoud *.php bestand:
1. check of [idemnaam].dat bestaat, zo ja include en einde, anders
2. trek het uit de database, maak de betreffende .dat aan en echo het tevens naar de client

Inhoud *.php bestand op server 2:
1. check of [idemnaam].dat op server 2 bestaat, zo ja include en einde, anders
2. fread de .php file op server 1 (zal alleen de benodigde output opleveren in een variabele)
3. maak [idemnaam].dat op server 2 aan en echo het tevens naar de client

(eventueel kan je punt 3 laten vallen, maar dat zorgt voor meer verkeer en langere wachttijden)

Zoals je ziet een stuk omslachtiger.

EDIT/
Vergezocht misschien voor extern gehoste sites (zeker bij 2 verschillende providers), maar misschien kan je hen zover krijgen de ene database te laten replicaten met de andere.
Zo zat ik ook te denken, maar het is erg omslachtig, nu lees ik hierboven dat het mogelijk is toch een Mysql database op een andere server te raadplegen. Echter dan loop ik nog steeds tegen het probleem op dat ik bij elk bezoek aan de website, moet kijken of bestandjes nu dan wel of niet bestaan. Iemand enig idee hoeveel performance die file_exits is?
Soultaker schreef op 07 september 2003 @ 17:27:
Is alleen (een deel van) je content statisch, of zijn al je pagina's statisch? In het laatste geval is het ook een goede strategie om je caching headers goed in te stellen en een proxy server te installeren, die de gecachede content voor je serveert. Het voordeel van deze oplossing boven je eigen implementatie, is dat je gebruik kunt maken van gestandaardiseerde voorzieningen waarvoor kwalitatief hoogstaande implementaties beschikbaar zijn. De oplossing is dus waarschijnlijk efficiënter dan wannneer je 'm zelf in PHP zou moeten programmeren.

Als je slechts een deel van je content kan cachen, dan ontkom je er helaas niet aan om het op te lossen zoals je nu al doet. Verschillende fysieke servers moeten dan hun eigen cache aanleggen.
Op website 1 word elke uur een update gedaan van wat er te zien is op de site. Bij elk bezoek check ik nu of bepaalde bestandjes bestaan op de server (bijvoorbeeld bestandje 200309010900.dat voor 1 september 2003 09:00 uur. Bestaat die dan laat ik ook nog de vorige verwijderen mocht die bestaan. Dit zijn aardig wat opdrachten als je ervanuitgaat dat ik dit 6 keer per bezoek doe.

Station van Gerwin Prins op Apple Music


  • slm
  • Registratie: Januari 2003
  • Laatst online: 25-06 12:45

slm

Gerwin schreef op 07 September 2003 @ 22:28:
[...]
[...]
[...]
[...]
Zo zat ik ook te denken, maar het is erg omslachtig, nu lees ik hierboven dat het mogelijk is toch een Mysql database op een andere server te raadplegen. Echter dan loop ik nog steeds tegen het probleem op dat ik bij elk bezoek aan de website, moet kijken of bestandjes nu dan wel of niet bestaan. Iemand enig idee hoeveel performance die file_exits is?
The results of this function are cached. See clearstatcache() for more details
[...]
Op website 1 word elke uur een update gedaan van wat er te zien is op de site. Bij elk bezoek check ik nu of bepaalde bestandjes bestaan op de server (bijvoorbeeld bestandje 200309010900.dat voor 1 september 2003 09:00 uur. Bestaat die dan laat ik ook nog de vorige verwijderen mocht die bestaan. Dit zijn aardig wat opdrachten als je ervanuitgaat dat ik dit 6 keer per bezoek doe.
Dit is wel heel erg omslachtig. Kan je niet gewoon steeds hetzelfde .dat bestand be/overschrijven?

To study and not think is a waste. To think and not study is dangerous.

Pagina: 1