Webserver LAST aufteilen!

Apache, Lighttpd, nginx, Cherokee
Anonymous

Webserver LAST aufteilen!

Post by Anonymous » 2008-08-17 10:53

Hallo,

ich hab eine etwas komplizierte Frage.

Ich habe eine Webseite auf der User etwas hochladen können.
Nun habe ich das problem falls zu viele Leute auf die Webseite kommen der Upload elend lahm ist.
Desweiteren kann auch der ansturm manchmal von meinem Server nicht gedeckt werden.

Da hab ich diese AWS-Server von amazon.de gesehn die man einschalten kann, wenn man serverkapazität brauch.
Aber jetzt ist die Frage wie kann ich meinen Server so synchron halten das jeder user auf gleiche seite kommt
alle auf die datenbank zugreifen können aber dann auch wenns zu viel last ist auf die anderen server ausgewichen wird.
dabei aber kein datenwirrwar entsteht?
Diese Funktion hab ich schon öfter gesehn wie z.b. bei wer-kennt-wen.de dort sieht man dann immer www1... www2... usw.
Wenn zu viel last entsteht.

Könnt ihr mir da weiterhelfen?
(Oder meine Frage verstehen? *gg*)

Vielen lieben Dank im voraus
Christian

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

Re: Webserver LAST aufteilen!

Post by daemotron » 2008-08-17 11:43

Eine Site auf mehrere Server verteilen ist technisch gesehen kein Problem - da gibt es mehrere Möglichkeiten: Loadbalancing über einen Reverse Proxy, Verteilung der Anfragen via DNS (Round Robin) oder auch nur Entzerrung der einzelnen Dienste (separate Server für Webserver und Backend-Dienste wie DB oder File-Server). Was für Dich am besten wäre, hängt davon ab, wie Deine Anwendung funktioniert. Sobald Sessions ins Spiel kommen ist z. B. DNS-gesteuerte Lastverteilung keine gute Idee, weil eine Synchronisation der (temporären) Session-Daten über alle Server immens aufwändig wäre.

Wenn ich Dich richtig verstanden habe, unterhälst Du einen größeren File-Pool. Den synchron zu halten ist natürlich so eine Sache. Möglichkeit 1: Du benutzt ein zentrales Backend (schnelles NAS, iSCSI o. ä.) für alle Server und regelst die Konsistenz des Datenbestands z. B. über Namensräume. Damit hast Du auf allen Webservern synchrone Daten, hast aber einen gewissen Overhead in puncto Verwaltung (und brauchst wahscheinlich teure Hardware). Möglichkeit 2: Du synchronisierst die Daten zwischen den Servern zeitgesteuert (cron) per rsync o. ä. Bei zwei Servern noch leicht zu machen, bei n Servern musst Du entsprechend clevere Synchronisations-Sequenzen ausarbeiten, damit Du möglichst wenig Synchronisationsaufwand hast.

Die Frage ist jetzt natürlich, was bei Dir tatsächlich der Flaschenhals ist - ist es die Netzwerk-Bandbreite des Servers, sind die Platten zu lahm, ... wenn es tatsächlich Netzwerk- oder Plattenengpässe gibt, kannst Du tatsächlich eigentlich nur durch Parallelisierung etwas erreichen. Wenn aber CPU oder RAM der limitierende Faktor sind, könntest Du auch einfach einen größeren Server nehmen oder einzelne Dienste (Datenbank, Mailserver) auf separate Maschinen auslagern.