# Skallierbare Serverumgebung - Gute Idee?



## Volvagia (23. Apr 2012)

Derzeit sieht es etwa so aus:







Der Server stellt derzeit Dienste wie z. B. Datenspeicherung und ein Nachrichtensystem (ähnlich dem PM-System in Foren etc.) zu Verfügung.
Nur ich hätte gerne, dass das etwas skalliert werden kann. Meine Idee war also das:







Die eigendlich Frage ist, ob das eine gute und umsetzbare Idee ist. Ich habe nämlich einen leichten Hang zur Übertreibung. (Besser bekannt als 'Größenwahn')

Der Grund warum ich dachte noch weitere Server (müssen ja keine physikalischen sein) zwischen den eigendlichen Dienservern zwischenzuschalten war, dass die Daten getrennt auf verschiedene Server abgelegt werden können. Also eine Nachricht an Benutzer A an Mailserver A und eine andere an Mailserver B. Falls z. B. die Benutzer 1 MB Speicherplatz haben, und ich plötzlich allen Benutzern 5 MB geben möchte (Verfünfachung des Speicherplatzverbrauches!) müssten eventuell die Benutzer neu aufgeteilt werden, damit für alle genug Platz da ist. So muss einfach nur, falls der Speicher nicht mehr ausreicht der nächste Server gewählt werden.

Und falls das eine gute Idee ist: Wäre es besser, wenn der Client nur mit dem Hauptserver kommuniziert, der als Zugriffspunkt für die Dienste dient, oder wenn die Indexserver den Clienten nur die IPs von den Servern mitteilen die sie brauchen und direkt mit diesen kommuniziert wird?


----------



## Empire Phoenix (24. Apr 2012)

Da stellen sich erstmal direkt folgende fragen:

Wieviele user sind es derzeit?
Wie skalierbar soll das ganze sein (geschätze maximale Zahl die jemals erreicht werden kann)
Derzeitige Serverlast?
Sind die subsysteme skalierbar?
Wäre es nicht günstiger statt stunden arbeit zu investieren, einfach 5 2 tb platten in den mailserver einzubauen und gut is (Oder ein zentralen netzspeicher für alles zur verfügung zu stellen)?

Ansonsten wirkt das son bischen nach ner privatecloud. Könnte man zb mit Eucalyptus (computing) - Wikipedia, the free encyclopedia umsetzen und die ganzen module von oben als vm laufen lassen. Die unterliegende Serverstruktur kann dann eine ganz andere sein.


----------



## Spacerat (24. Apr 2012)

Solche Strukturen gibt es doch schon und natürlich sind sie auch sinnvoll - okay, erst ab 'ner gewissen Anzahl an Usern, glaub' kaum, das EBay, Facebook, YouTube und Konsorten jeweils auf nur einem Server laufen. Und wahrhaftig... schaut man sich diverse Facebook-Profile mal genauer an, fallen einem möglicheweise auch diverse verschiedene FB-Domainnamen auf. Domains, die auf Multiserver-Systeme schliessen lassen.
So was lässt sich also realisieren, also sprich aufbauen und konfigurieren.
Entwickel doch mal was neues: z.B. ein Protokoll, in welchem sich diese ganzen Verbindungen zwischen Index-, Zwischen- und Datenservern automatisch konfigurieren, so 'ne Art PnG (Plug and Go) Protokoll. 
Ach ja... bei steigender Anzahl an Nutzern wird auch dern Index (Haupt) Server irgendwann ausgelastet sein. Dann müsste ein anderer einspringen und weitere Anfragen zwischenspeichern.


----------



## Volvagia (24. Apr 2012)

Im Moment gibt es nur einen User, mich. Der Server läuft die meiste Zeit im Leerlauf, ist derzeit nur ein kleiner Test(v)server, vor allem um die Serveranwendung auch auf einer anderen Umgebung als den localhost zu testen. Aber ich weiß ja nicht, was am Ende sein wird. Wenn 5 Benutzer gleichzeitig eingeloggt sind ist das etwas anderes als wenn 5.000 Benutzer gleichzeitig Dateien lesen und schreiben (ein wenig übertrieben). Das steht zwar gegen das "You ain't gonna need it"-Prinzip, aber im Gegensatz dazu muss bei Vorrausplanung später nicht allzu viel umgeschrieben werden.

Außerdem denke ich, dass mehrere Server die sich nur um eine Aufgabe kümmern am Ende viel durchschaubarer sind als einer, der Daten enthält, oder irre ich mich da?


----------



## Spacerat (24. Apr 2012)

Volvagia hat gesagt.:


> Außerdem denke ich, dass mehrere Server die sich nur um eine Aufgabe kümmern am Ende viel durchschaubarer sind als einer, der Daten enthält, oder irre ich mich da?


Durchschaubar ist gut für die Konfiguration aber schlecht für die gleichmässige Verteilung von Netzlasten, je gleichmässiger die Verteilung von Netzlasten ist, desto schlechter konfigurier- bzw. wartbar wird es. Fällt ein Server aus, ist bei einfachen Strukturen gleich alles hin, bei ausgeklügelteren geht der Betrieb weiter.


----------



## Volvagia (25. Apr 2012)

Ok, danke. Da keine gröberen Einwände gegen die Planung gekommen sind werde ich es mal so versuchen. Falls es schief geht hab ich dann wenigstens etwas gelernt. ^^

Bei der Verfügbarkeit müsste ich wohl die Daten redundant anlegen, was ich mir sehr kompliziert vorstelle. Außerdem schadet das wohl auch der Netzlast, da die Server auch untereinander kommunizieren müssen. In dem Entwurf würde, je weiter "hinten" der Server steht, immer weniger Dinge ausfallen. Beim Hauptserver das komplette System, bei einem Indexserver der Services das Service, bei einen Speicherserver nur die jeweiligen Daten, die darauf liegen. Durch die Trennung würden aber alle anderen Services online bleiben, sofern sie von den Ausfall nicht betroffen sind.

Noch eine Frage: Gibt es einen Weg, Server möglichst zuverlässung untereinander zu authentizieren, so dass wirklich (oder beinahe, 100 % Sicherheit kann man ja leider nicht erreichen) nur mit dem Index/"Eingangs"server des Subnetzes des jeweiligen Dienstes kommuniziert werden kann? Also dass sich wenn möglich niemand direkt mit dem Mailindexserver o. a. verbinden kann.


----------



## TheDarkRose (25. Apr 2012)

Volvagia hat gesagt.:


> Bei der Verfügbarkeit müsste ich wohl die Daten redundant anlegen, was ich mir sehr kompliziert vorstelle. Außerdem schadet das wohl auch der Netzlast, da die Server auch untereinander kommunizieren müssen.



Dafür gibt es so Sachen wie DRBD


----------



## timbeau (25. Apr 2012)

Ich würde selbst zu Übungszwecken, schauen was es schon alles gibt. Es ist mE viel wichtiger aus bestehenden Komponenten und geringen Anpassungen (die meist schon so komplex werden) so ein System aufzubauen als alles selber zu machen. 

Hab letzten mal nen Stormcluster aufgesetzt, da geht schon einiges an Zeit drauf bis alles läuft ohne, dass ich da selbst was programmiert hätte.


----------



## Spacerat (25. Apr 2012)

Das ist lustig... Da gibt es so Sachen wie... dafür gibt es dies und jenes und was anderes machst du mit anderen APIs. Aber stets alles mit mehr oder weniger gut durchdachten aber vor allem mit bereits vorhandenem, dafür wurde es ja gemacht...
...leider dauert das Konfigurieren je nach Struktur immer ein wenig länger, aber das ist halt so.

Ist eigentlich schon mal irgendjemandem aufgefallen, das wir hier nicht mehr mit Papier und Bleistift schreiben? Nein, wir machen das jetzt mit Computern, wie fortschrittlich. Und da wir einen Computer haben, brauchen wir ja nichts anderes mehr... schon gar nicht weiter voranschreiten, indem wir stets nur Dinge verwenden, die es schon gibt... wo bleibt die Innovation? Also testen was geht, egal womit.


----------



## timbeau (25. Apr 2012)

Falls du dich auf mich beziehst: 

Du wirst mir doch zustimmen, dass es sinnvoller ist für 99% der Unternehmen bestehende Grundkonstrukte wie Programmiersprachen, Server etc zu verwenden als alles von Grund auf neu zu erfinden. 

Klar entwickelt eine Firma wie z.B. Apache viele tolle neue Dinge, die haben aber auch viel Geld und Manpower. Als 1-Personen Team einen Server neu zu schreiben und sich dann später darüber zu ärgern, dass der Tomcat alles viel besser macht und in 10Minuten installiert werden kann, halte ich für unsinnig, wenn auch nicht gänzlich sinnlos.


----------



## Spacerat (25. Apr 2012)

[OT]@timbeau: Nee, nicht nur auf dich. Z.B. auch ein Beitrag davor... oder oder oder...
Wenn alle ausschliesslich in Effizienz denken und deswegen nur bewährtes verwenden, gibt es ein Problem - Stagnation. Und dann komm mir noch mal mit Effizienz. Effizienz geht anders. Ich bin im Prinzip genau so ein "Frickler" wie Volvagia. Mein "Grössenwahn" ist es, einen Mechanismus zu entwickeln, der es ermöglicht beliebige Dateiformate mit nur einem Methodenaufruf zu lesen. Das ist Effizienz . Nicht dieses blödsinnige, dafür brauchst du dies und dafür jenes, mit zusätzlichem Ballast den eigentlich überhaupt niemand mehr braucht (JAI, JMF, OMG :lol, um damit mehr oder weniger komfortabel die ein oder andere Datei mehr verarbeiten zu können. Vergesst ImageIO, es gibt DataTypes, vergesst die Java-Sound-API und anderen ähnlichen Shit (ausgenommen JavaFX), denn es gibt DataTypes... Ein neuer Hammer, für den es über kurz oder lang kaum genug Nägel gibt. Beschäftigt sich von euch zufällig noch jemand mit 3D? JOGL, LWJGL, Java3D? Wenn ja, hat einer von euch zufällig ein API, mit welchem er seine Objekte (DirectX, WaveFront, 3DSMax) unabhängig von der verwendeten 3D-Umgebung laden kann? Nein? Nun, Ich kann das. Okay, besser gesagt konnte. Das 3D-Interface erfreut sich gerade einer gründlichen Überarbeitung, aber so in etwa stell' ich mir Effizienz vor. Als 1-Mann-Team ist man aber leider immer recht ausgelastet, vor allem wenn man nur nebenbei programmiert und das mehr oder weniger ohne Konzept (das Goal ist das Konzept) weil man noch 'nen anderen Job hat. Wenn's Spruchreif ist, wirds bei Google-Code geupped.[/OT]


----------

