Ich habe mir z.B. mal http://www.linuxvirtualserver.org angeschaut. Die Methoden dort sind mir eigentlich klar geworden mit NAT oder sonst was einfach die eingehenden TCP/IP-Connection an die Nodes zu verteilen etc.
Allerdings setzt das ja irgendwie voraus, dass ich an den Nodes die gleichen Daten habe. Bei einer Webseite mag dies ja gehen, ich setze einfach mal 5 Webserver oder so auf und schmeisse überall die gleichen Dokumente drauf.
Wie ist das aber z.B. mit einem Datenbankserver? Wenn z.B. die Leistung eines einzelnen Rechners nicht für den DB-Server ausreicht, kann man sowas auch mit einfachen Mitteln skalieren? Ich kann ja nicht einfach die Requests verteilen, ich muss ja auch irgendwie sicherstellen, dass beide Systeme den gleichen Datenbestand haben. Muss man da auf kommerzielle Lösungen setzen? Ich kenne mich nicht genau aus, aber ich denke mal Oracle oder so werden da schon was im Angebot haben.
Aber ist es auch möglich jedem anderen Programm vorzugaukeln es ist eigentlich nur ein Rechner? Das heisst auch das Filesystem wird geteilt? Wie geht sowas? Also kann ich einfach n paar Rechner zusammenschliessen und sagen jetzt installier ich da mal ein programm und das merkt gar ned dass es es mit mehreren Maschinen zu tun hat?
hallo,
ich setzte die Rechner zwar nicht auf sondern Programmiere die Software, aber die uebliche Vorgehensweise ist das man einen Cluster von Servern hat auf die die Applicationen laufen die wiederum auf einen Datenbankserver zugreifen. Die einzelnen Datenbankzugriffe sind in den meisten Faellen nicht so zeitaufwendig wie die Aufbereitung der Daten.
Den Einsatz von mehreren Datenbankservern ist mir bisher nochnicht untergekommen, sehrwohl aber mehrere Applicationserver, auf denen wiederum mehrere Instancen laufen.
Oracle bietet hier sicher was an (DB-Clustering), das duerfe dann aber wiederum in einem Preissegment sein das ich nicht kenne, evtl. im Millionenbereich fuer Leute wie yahoo oder amazone. Weiss ja nicht was du vor hast, aber Oraclelizensen liegen leicht mal bei 10K DM und mehr.
stalt
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
ich setzte die Rechner zwar nicht auf sondern Programmiere die
Software, aber die uebliche Vorgehensweise ist das man einen
Cluster von Servern hat auf die die Applicationen laufen die
wiederum auf einen Datenbankserver zugreifen. Die einzelnen
Datenbankzugriffe sind in den meisten Faellen nicht so
zeitaufwendig wie die Aufbereitung der Daten.
Den Einsatz von mehreren Datenbankservern ist mir bisher
nochnicht untergekommen, sehrwohl aber mehrere
Applicationserver, auf denen wiederum mehrere Instancen
laufen.
Ja, da kenne ich Lösungen, allerdings sehe ich das Problem doch eher andersrum. Mir geht es um Webanwendugnen, bei denen es zum Teil zig Datenbankabfragen pro Sekunde gibt. Ein Webserver verkraftet die Aufrufe normalerweise problemlos, allerdings kommt die Datenbank eher nicht mit die Daten so schnell und oft abzuliefern.
Oracle bietet hier sicher was an (DB-Clustering), das duerfe
dann aber wiederum in einem Preissegment sein das ich nicht
kenne, evtl. im Millionenbereich fuer Leute wie yahoo oder
amazone. Weiss ja nicht was du vor hast, aber Oraclelizensen
liegen leicht mal bei 10K DM und mehr.
nee das ist für mich eher nciht interessant ich denke da auch eher an freie Software… momentan brauche ich sowas auch nicht, aber man muss sich ja rechtzeitig informieren
eine Loesung wäre, die Daten der DB auf eine externe Storage
Lösung auszulagern, so dass sich die DB-Server einen File-Storage
teilen. In einem deutschen Computermagazin (evtl. IX) habe ich
sowas vor einer Weile mal gesehen. Ein SCSI System an das mehrere
Rechner angeschlossen werden können. Mit dem entsprechenden RAID
und Datenübertragungswegen, dürfte auch die Geschwindigkeit
brauchbar bleiben.
ACHTUNG: Das ganze ist meinerseits gut fundiertes Halbwissen,
also nicht ungeprüft übernehmen.
Ja, da kenne ich Lösungen, allerdings sehe ich das Problem
doch eher andersrum. Mir geht es um Webanwendugnen, bei denen
es zum Teil zig Datenbankabfragen pro Sekunde gibt. Ein
Webserver verkraftet die Aufrufe normalerweise problemlos,
allerdings kommt die Datenbank eher nicht mit die Daten so
schnell und oft abzuliefern.
Ich habe mal irgendwo was von DB-Proxys gelesen, die DB-Abfragen (bzw. die Ergebnisse dieser) zwischenspeichern. Ist das was fuer dich ?
Auf dem Applikations Server. Die Queries werden hier zusammengestellt und in vielen Applicationen sehr einfach mit dem üblichen sql Sprachschatz.
a) Also ´select Feld from Tabelle where Feld = Wert.
b) Wenn jedoch in einer Application alle paar Sekunden eine Query abgesetzt wird, dann muss man die Query in form eines Oracle call interface zusammenstellen. Die Query lautet jetzt ´select feld from table where feld = :a´
Der Unterschied ist: wenn sich bei a der Wert ändert muss das Query neu geparst, optimiert und im Memory hinterlegt werden.
Bei b) wird das Query nur einmal geparst, optimiert und hinterlegt neue Werte werden einfach in die bind Variable :a gefüllt. Dieser kleine Unterschied kann für die performance bei komplizierten Querys bis zum faktor 1000 ausmachen. Besonders unangenehm ist das die Erweiterung des Memorys im ersten Fall kaum Effekt hat.
2)Nun zu dem 2. Teil des Problems. Natürlich gibt es bei Oracle den parallel server Betrieb. Jedoch wird er üblicherweise bei Datenbankservern unter VMS betrieben unter UNIX sehr selten weil immer noch sehr problematisch.
Der Grund ist folgender:
Auf jedem Server ist eine Instance und sie greifen auf einen gemeinsamen Datenbestand zu. Man braucht für so eine Architektur einen Lockmanager, damit z.B. die 1.Instanc der 2.Instance nicht die Daten weglöscht. Bisher hat VMS diesen Lockmanager den Oracleinstanzen zur Verfügung gestellt. Somit sorgt in einem VMS Cluster der Loadbalance für die Vergabe des Auftrages an die unterbeschäftigte Maschine. Unix HP oder Sun hat diesen Lockmanager nicht. Oracle muss selber einen schreiben und hat erst in Version 8 damit begonnen. Es tauchen dann Hilfskonstruktionen wie Rowdevices und dergleichen auf.
Bleibt die Application auf reines Query beschränkt, kann man diese Lösungen auch auf UNIX ernsthaft in Betracht ziehen.
Allerdings ehe ich einen so grossen Aufwand treiben würde, scheint mir die Unstellung von sql auf OCI (Call Interface ) als naheliegender und 1000 fach performanterer Ansatz aussichtsreich.
p.s.
Verwirrend ist das der Begriff Cluster in der UNIX und VMS sehr unterschiedliche Bedeutung hat.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]