[PHP] load-balancing voor downloads: pingen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Wim Leers
  • Registratie: Januari 2004
  • Laatst online: 09-09 08:00
Goedemiddag allemaal!

Voor m'n website - niet zo fantastisch groot - maar wel met 700-1000+ downloads van vaak zeer grote bestanden (tot zo'n 45 MegaByte) heb ik een load-balancing script nodig. Omdat er blijkbaar geen betaalbare oplossingen beschikbaar zijn, wou ik dit gewoon (even :+) zelf gaan schrijven.

Waar begin je mee als je een load-balancing script gaat schrijven? Juist, een gedeelte om te kijken of de servers wel online zijn... Ik heb nu al meer dan een uur gezocht, zowel dmv google als hier op GoT als op PHP.net als op phpfreakz.nl, zonder bevredigende resultaten. Wat ik heb gevonden: 1) scripts die werken dmv externe programma's ( bv. (system(ping arguments)) ), iets wat blijkbaar niet werkt op mijn shared hosting *nix server; 2) scripts die werken dmv sockets, meerbepaald ICMP requests en door middel van de fouten die deze requests retourneren. Blijkbaar werkt ook dát niet omwille van de een of andere duistere reden.

Mijn vraag dus: kent iemand een betrouwbare manier om te pingen onder PHP, die minstens werkt zonder externe programma's en liefst ook geen speciale eisen stelt?

P.S.: ik kan naar enkele voorbeelden linken indien nodig.

Acties:
  • 0 Henk 'm!

  • dajappie
  • Registratie: Januari 2005
  • Laatst online: 20:47
Moet dit per se met iets ping-achtigs? Als je downloadservers zelf ook iets van apache draaien kan je ook proberen met fopen een url op zo'n server te vragen, indien een nette reply komt istie up...

Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 20:38

alienfruit

the alien you never expected

Paar eigen server huren voor 93euro/maand :+

Acties:
  • 0 Henk 'm!

  • moto-moi
  • Registratie: Juli 2001
  • Laatst online: 09-06-2011

moto-moi

Ja, ik haat jou ook :w

ping is zinloos, als je apache geen requests meer aankan, kan een ICMP ping prima terugkomen.
Wat je wilt is dat je server gaat vertellen hoe 'ie ervoor staat, zoals wij dat doen @ tweakers.net :P

Leuk documentje daarover is deze :)

Verder zijn er genoeg oplossingen te vinden voor load balancing, atm gebruiken we een oplossing gebasseerd op Linux Virtual Server.

God, root, what is difference? | Talga Vassternich | IBM zuigt


Acties:
  • 0 Henk 'm!

  • Wim Leers
  • Registratie: Januari 2004
  • Laatst online: 09-09 08:00
@dajappie: dat is misschien nog wel de beste opl... thx!


@alienfruit: eh.... NAH }:O


@moto-moi: die round-robin DNS is geen optie, en hardwarematige load-balancing al helemaal niet :p Die Linux Virtual Server is... zeer interessant, maar jammer genoeg ook niet toepasbaar... alleen de optie 'Virtual Server via IP Tunneling' zou toepasbaar zijn (aangezien de servers verspreid staan over de hele wereld => verschillende subnetten...), ware het niet dat je hiervoor toegang moet hebben tot het beheer van de server, wat ik dus niet heb (soort van zware shared hosting accounts).

offtopic:
Nog een typootje in dat 'document' (T.net artikel over load-balancing):
[quote]De GUICC (Graphical User Interface Control Centre)[/quote]
... tenzij het Brits Engels is tuurijk :+



Ik denk dat ik dan maar voor dajappie's suggestie ga gaan!


Bedankt allemaal! _/-\o_ :)

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Lijkt alsof ik twee dingen door elkaar lees. Aan de ene kant heb je het over load-balancing, aan de andere kant wil je gewoon kijken of een server up is?

Load-balancing van deze omvang (vrij minimaal dus :+) zou ik gewoon eenvoudig oplossen door de mirrors 1 voor 1 aan te spreken en zo alles op een natuurlijke manier te verdelen. Of desnoods exact per bestandsgrootte bijhouden welke server die dag nog het minste te doen gehad heeft (per download). Zo kun je ook eenvoudig de 'load balancen' als je dus wilt.

Zo kun je afhankelijk van de beschikbare bandbreedte per server ook nog waarden aan koppelen van hoeveel je naar hen stuurt.

[ Voor 20% gewijzigd door Bosmonster op 20-07-2005 16:40 ]


Acties:
  • 0 Henk 'm!

  • iets
  • Registratie: Maart 2002
  • Laatst online: 19:16
Anders gebruik je een functie die de request random verdeeld over de servers? Als er wat snellere servers tussenzitten dan geef je die wat meer kans om een request te krijgen?

tvw


Acties:
  • 0 Henk 'm!

  • moto-moi
  • Registratie: Juli 2001
  • Laatst online: 09-06-2011

moto-moi

Ja, ik haat jou ook :w

Bosmonster schreef op woensdag 20 juli 2005 @ 16:38:
Lijkt alsof ik twee dingen door elkaar lees. Aan de ene kant heb je het over load-balancing, aan de andere kant wil je gewoon kijken of een server up is?
Dat heeft ook zeker met elkaar te maken :)
Stel dat een server uitvalt (en hoe meer je er hebt in je loadbalancing pool, des te meer kans dat dat gebeurt), dan zal je loadbalancingscript dat op moeten pakken, en dus de taken naar de overige servers overhevelen.
Bashrat schreef op woensdag 20 juli 2005 @ 16:00:
@moto-moi: die round-robin DNS is geen optie,
Waar heb ik het over rr dns :?
Da's pauper, en wil je niet gebruiken.
en hardwarematige load-balancing al helemaal niet :p Die Linux Virtual Server is... zeer interessant, maar jammer genoeg ook niet toepasbaar... alleen de optie 'Virtual Server via IP Tunneling' zou toepasbaar zijn (aangezien de servers verspreid staan over de hele wereld => verschillende subnetten...), ware het niet dat je hiervoor toegang moet hebben tot het beheer van de server, wat ik dus niet heb (soort van zware shared hosting accounts).
Tsja, dan houdt het op :P

God, root, what is difference? | Talga Vassternich | IBM zuigt


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

moto-moi schreef op woensdag 20 juli 2005 @ 20:52:
[...]

Dat heeft ook zeker met elkaar te maken :)
Stel dat een server uitvalt (en hoe meer je er hebt in je loadbalancing pool, des te meer kans dat dat gebeurt), dan zal je loadbalancingscript dat op moeten pakken, en dus de taken naar de overige servers overhevelen.
Ehm ja.. maar dat lijkt me niet zo'n probleem.. als je iedere paar minuten even een ping-cron laat lopen kun je natuurlijk eenvoudig die mirrors die niet reageren even uit je verdeel-queue halen.

Het is allemaal eenvoudig software matig op te lossen in ieder geval als het slechts gaat om downloads.

Acties:
  • 0 Henk 'm!

  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 17-09 17:05
Ik ben zelf ook bezig geweest het een ander uit te zoek mbt load balancing.

Even een situatie schets:
Een niet nader te noemen site is gemirrord op server verspreid over Europa en Amerika.
Er is contact met de mensen die de mirrors beheren en ze ondersteunen allen php.
De site 'hoofd' site (waar alle content managing op gebeurd) draait in Italie

Het idee wat wij hebben (en ooit nog een geimplementeerd moet worden :p) is als volgt:
De Italiaanse server draait een script dat we 'Server' noemen.
De mirrors draaien een script dat we 'Client' noemen.
De Server herkent waar bezoekers vandaan komen (Geo IP) en zoekt uit welke Clients het dichts bij bezoeker in de buurt zijn.
Server doet een RPC actige opdracht aan Client en Client geeft the load terug aan Server.
Server stuurt vervolgens bezoeker door naar een Cient die dicht in de buurt zit en weinig load te voorduren heeft (daarvoor is een berekening die met toleranties werkt).
Als Server geen antwoord krijgt dan is Client hoogstwaarschijnlijk down.

Een dergelijke oplossing is in het geval van TS werkbaar mits TS een 'Client' script op de mirrors kan draaien

[ Voor 3% gewijzigd door Suepahfly op 22-07-2005 00:11 ]

Pagina: 1