1 website, meerdere servers

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Ozzie PHP

Ozzie PHP

18/04/2015 18:17:22
Quote Anchor link
Hallo allemaal,

Ik vraag me iets af. Stel ik maak een website en op die website kan ik fotoalbums plaatsen. Nu is de server waar die website op staat slechts 10 mb (dit is slechts even als voorbeeld). Nu is na een paar albums die server dus al vol.

Ik kan nu (grofweg) 2 dingen doen. Ik vergroot de capaciteit op de server naar 20 mb, maar dan heb ik over een tijdje hetzelfde probleem. Nu vraag ik me af of het mogelijk is om servers "bij te prikken". Dus stel, de eerste 10 mb zijn vol, dan hang ik er een nieuwe server bij, waardoor ik dus 20 mb heb. Maar nu komt het. Ik heb maar 1 website url, en die kan niet bij 2 servers terecht komen. De servers moeten dus met elkaar "praten". Server 1 moet dus tegen server 2 zeggen dat hij een fotoalbum nodig heeft wat op server 2 staat. Volgens mij zijn hier hardwarematige oplossingen voor, maar wat ik me vooral afvraag is of je hier in je code op de een of andere manier rekening mee moet houden. Of gaat dat allemaal hardwarematig en merk je er eigenlijk helemaal niks van dat je met 2 servers werkt?
 
PHP hulp

PHP hulp

27/10/2020 07:08:46
 
Thomas van den Heuvel

Thomas van den Heuvel

18/04/2015 20:04:53
Quote Anchor link
Zijn de foto's voor iedereen vrij op te vragen?
 
Ozzie PHP

Ozzie PHP

18/04/2015 21:12:17
Quote Anchor link
>> Zijn de foto's voor iedereen vrij op te vragen?

Geen idee. Maakt dat wat uit? :)

Dit is puur een voorbeeld hè. De vraag is eigenlijk of je 1 website kunt "uitsmeren" over meerdere servers, en zo ja ... of je daar dan in de code op de een of andere manier rekening mee moet houden.
 
Thomas van den Heuvel

Thomas van den Heuvel

18/04/2015 21:57:26
Quote Anchor link
Je kunt media toch prima op een andere domein stallen?

vanaf domein A: <img src="http://domein.B/whatever.jpg" />

Mijn vraag is in die zin relevant dat je misschien een soort van laag moet schrijven om de afbeeldingen te ontsluiten voor specifieke gebruikers.

Volgens mij bestaat er ook hosting waarbij diskruimte etc. automatisch bijgeschaald kan worden? Maakt Microsoft niet al tijden reclame met zo'n platform (Azure?)?

Al gezocht op media server oplossingen?
 
Ozzie PHP

Ozzie PHP

18/04/2015 22:06:38
Quote Anchor link
>> vanaf domein A: <img src="http://domein.B/whatever.jpg" />

Maar dat is dus wat ik juist niet bedoel. Ik bedoel een hardware matige oplossing, die "weet" dat fotoalbum 9 op server 1 staat en fotoalbum 10 op server 2.

Ander voorbeeld dan. Stel ik maak één site, maar mijn profiel staat op server 1 en jouw profiel staat op server 2. Als ik surf naar www.eenofanderesite.nl/ozzie dan weet ie automatisch dat ie op server 1 moet kijken, en als ik surf naar www.eenofanderesite.nl/thomas, dan weet ie automatisch dat die gegevens op server 2 staan. Maar dus zonder dat ik dit in de code aangeef.
 
- Ariën -
Beheerder

- Ariën -

18/04/2015 22:37:57
Quote Anchor link
Volgens mij kan je meerdere (file)servers binnen een netwerk met elkaar koppelen zodat je /mnt/fileserver1 /mnt/fileserver2 hebt. Ik heb geen idee op welke manier dit precies gaat, hoewel een symlink mij iets te simpel lijkt.
 
Ozzie PHP

Ozzie PHP

18/04/2015 22:45:34
Quote Anchor link
Tja, ik ben ook wel benieuwd hoe dat werkt, maar eigenlijk zou ik dus willen weten of zoiets kan zonder dat je er in de code rekening mee hoeft te houden. Ik meen me vaag iets te herinneren van load balancers of iets dergelijks maar misschien heeft dat hier helemaal niks mee te maken.

Ander voorbeeld. Denk aan Facebook of een Instagram. Ik neem aan dat niet alle content op 1 fysieke server staat, maar dat alles is verspreid over meerdere servers. Stel nu Pietje logt in op Facebook. Hoe weet de server die de request ontvangt dan waar de server met map "pictures/pietje23532" te vinden is?
 
- Ariën -
Beheerder

- Ariën -

18/04/2015 22:51:25
Quote Anchor link
Ik zou zou haast denken dat de URL's eerst via een rewriterule via PHP gaan, waarna gekeken wordt op welke server ze staan, maar ik vraag me af of dat wel goed performance heeft.
 
Ozzie PHP

Ozzie PHP

18/04/2015 22:57:17
Quote Anchor link
Mja, kweet het ook niet eigenlijk :-/

Ik heb ooit een docu over Instagram of Facebook gezien en daar staan echt miljarden foto's op de servers. Dat gaat met een paar miljoen per uur. Dat kan nooit allemaal op 1 server, maar hoe weet men dan waar er plek vrij is? Ik hoop dat iemand dit eens kan toelichten. Lijkt me wel erg interessant.
 
Bart V B

Bart V B

19/04/2015 07:02:22
Quote Anchor link
Dat klopt dat dat load balance heet.
Hoe dat ongeveer werkt kan je hier lezen: http://tweakers.net/reviews/301/loadbalancing-bij-tweakers-punt-net.html
Misschien niet de meest nieuwe tekst maar het plaatje maakt het wel duidelijk.
 
Ozzie PHP

Ozzie PHP

19/04/2015 14:56:26
Quote Anchor link
Dankjewel Bart. Zo'n loadbalancer setup is dus een dure aangelegenheid zie ik. Voor de wat kleinere websites kun je dan dus beter gewoon je servercapaciteit opschroeven in plaats van met meerdere servers te werken?

Waar ik wel nog steeds benieuwd naar ben, is of je er in de code rekening mee moet houden. Dus stel jouw Facebook-foto's staan ergens op een server in de wereld in een mapje bartvb345345/pictures/. Hoe weet de primaire server die de request ontvangt dan op welke server jouw foto's zijn opgeslagen? Regelt de hardware dat? Of moet je daar in je code instructies voor geven? Dit laatste lijkt me namelijk haast ondoenlijk.
 
Yoop Overmaat

Yoop Overmaat

19/04/2015 15:01:18
Quote Anchor link
Zoiets is te doen onder php als dit, het is een afgeleide van het Linux/Unix verhaal genaamd df -h of diskfree human readable;
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
// $df contains the number of bytes available on "/"
$df = disk_free_space("/");

// On Windows:
$df_c = disk_free_space("C:");
$df_d = disk_free_space("D:");
?>
 
Ozzie PHP

Ozzie PHP

19/04/2015 15:29:11
Quote Anchor link
Thanks Yoop, maar is dat ook noodzakelijk om in je code te regelen? Dat is eigenlijk mijn vraag. Of regelt de hardware dit automatisch? Laat ik het anders vragen: kan hardware simuleren dat er maar 1 server is, terwijl het er in werkelijkheid honderden zijn? Kan je met hardware "faken" dat die honderden afzonderlijke servers als 1 server worden behandeld? Dus stel je wilt foto's ophalen uit het mapje yoopovermaat/pictures, dat die hardware dan automatisch ziet, aha ... dat mapje staat op server 68 in het serverpark in Los Angeles.
 
Ward van der Put
Moderator

Ward van der Put

19/04/2015 17:16:51
Quote Anchor link
Je kunt verschillende scenario's volgen.
Deze slideshare noemt de belangrijkste inclusief voor- en nadelen:

http://www.slideshare.net/nixnutz/load-balancing-for-php-and-mysql
 
Ozzie PHP

Ozzie PHP

19/04/2015 20:03:46
Quote Anchor link
Thanks Ward, nogal technisch allemaal terwijl ik eigenlijk maar 1 vraag heb, en dat is of je er in de code rekening mee moet houden, of is alles via de hardware te regelen?

Laat ik de vraag nog eens wat interessanter stellen. Stel je begint met een hele kleine website, en die website wordt dusdanig groot dat je met meerdere servers wilt gaan werken. Moet je dan al je PHP code gaan aanpassen?
 
Aad B

Aad B

19/04/2015 20:14:32
Quote Anchor link
==>> De servers moeten dus met elkaar "praten". Server 1 moet dus tegen server 2 zeggen dat hij een fotoalbum nodig heeft wat op server 2 staat.

In geval van Linux of Unix servers kan je storage op NFS protocol koppelen. Hier al eerder genoemd, mounten van de storage van server B op server A. Je moet dan wel root rechten hebben op beide servers. Heb je dat niet dan beland je in andere meer knullige oplossingen die feitelijk geen oplossing zijn. Het Network File System, of kortweg NFS, is een netwerkbestandssysteem dat oorspronkelijk werd ontworpen door Sun Microsystems in 1984 voor hun eigen Unix-werkstations. NFS maakt het mogelijk om bestanden op te vragen over het netwerk op dezelfde manier als men dit zou doen voor bestanden op de lokale schijf. NFS bestaat enkel uit een bestandssysteem en heeft niets te maken met procesbeheer of geheugenbeheer.

==>>Laat ik de vraag nog eens wat interessanter stellen. Stel je begint met een hele kleine website, en die website wordt dusdanig groot dat je met meerdere servers wilt gaan werken. Moet je dan al je PHP code gaan aanpassen?

In dit geval moet je echt gaan load balancen en met de juiste load balancing hoef je GEEN code aan te passen. Hierbij kan je denken aan een hardware loadbalancer op poort 80/433 die de load naar verschillende apache servers delegeert. De onderliggende storage kan via NFS lopen maar ook op andere redundante manieren zoals Business Continuity and Data Protection van EMC. Hetzelfde geldt grofweg voor MySQL maar komt iets meer bij kijken qua beheer.
Gewijzigd op 19/04/2015 21:35:56 door Aad B
 
Yoop Overmaat

Yoop Overmaat

19/04/2015 21:21:18
Quote Anchor link
Ozzie PHP op 19/04/2015 15:29:11:
Thanks Yoop, maar is dat ook noodzakelijk om in je code te regelen? Dat is eigenlijk mijn vraag. Of regelt de hardware dit automatisch? Laat ik het anders vragen: kan hardware simuleren dat er maar 1 server is, terwijl het er in werkelijkheid honderden zijn? Kan je met hardware "faken" dat die honderden afzonderlijke servers als 1 server worden behandeld? Dus stel je wilt foto's ophalen uit het mapje yoopovermaat/pictures, dat die hardware dan automatisch ziet, aha ... dat mapje staat op server 68 in het serverpark in Los Angeles.


Jup dat zul je in je code moeten regelen maar zo heel erg veel werk is het niet. Je hebt allereerst een toegangspunt nodig. Main entrance waar je je afbeelding upload.

Vanaf hier krijg je te maken met het df -h verhaal.

-> verbinding databases
-> query (welke server = het minst bezet qua schijfruimte) schrijf hem daar weg
-> wegschrijven van het plaatje in een directory
-> Adres van het plaatje wegschrijven in een database id, naam, serveradres
-> Opvragen van het plaatje via een link in html -> link -> php-> query....
 
Aad B

Aad B

19/04/2015 22:24:28
Quote Anchor link
@Yoop: Op een x moment is server A bezet qua schijfruimte en blijf je dan voor elke foto dan nog deze procedure uitvoeren of verander je dan je code weer omdat server A volledig bezet qua schijfruimte??
 
Ozzie PHP

Ozzie PHP

19/04/2015 22:41:04
Quote Anchor link
Yoop, wat Aad zegt is wat ik bedoelde. Dat lijkt me ook veel handiger. In je code maakt het dan niet uit op welke server iets staat. De code moet enkel zeggen: sla plaatje x op in map "pictures", en die load balancer die moet dan bepalen op welke server dat plaatje wordt gezet en waar het moet worden opgehaald.

Aad, beschrijf ik het bovenstaande zo goed? Klopt het wat ik zeg? Ik heb er zelf geen kaas van gegeten, maar het is fijn om te weten dat als ik ooit een site hebt die uit de klauwen groeit, ik niet alle code hoef aan te passen. Waarschijnlijk moet ik dan wel een expert inhuren om zo'n load balancer in te stellen :)
 
John D

John D

20/04/2015 09:38:52
Quote Anchor link
@Ozzie: Een load balancer plaats je doorgaans aan de voorkant, een load balancer (hardware) verdeelt het verkeer (http/https) over meerder apache servers (hardware). De apache servers spreken een gezamenlijke grote storage (disks/disk array) aan en slaan daar de plaatjes centraal op (storage server). De MySQL data wordt op zich weer bediend door een separate MySQL server met eigen storage (disks).

In jouw eerdere voorbeeld/vraag (server A server B) is het zinvol om een storage koppeling met een NFS mount te realiseren.
Gewijzigd op 20/04/2015 09:40:40 door John D
 
Ivo P

Ivo P

20/04/2015 09:41:24
Quote Anchor link
maar heb je het over een server die te klein wordt voor je site, of over een goedkoop hostingpakketje?

20MB, wat je als voorbeeld aanhaalt, is namelijk niet zo heel erg veel.

Had je het over 1TB wat niet voldoende is, is het wat anders. Want een server met maar 20MB aan boord: dat was iets uit de jaren 90.

En als je 20MB vol is, is het gewoon tijd voor een wat groter hostingpakket. Of gaat het erom dat de hosting voor 20MB gratis/1euro is?
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.