Announcement

Collapse
No announcement yet.

Auslastung auf mehrere Servern verteilen (Java Servlets / JSP / MySQL)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Auslastung auf mehrere Servern verteilen (Java Servlets / JSP / MySQL)

    Hallo alle zusammen,

    ich habe meinen Beitrag mal in zwei Bereiche aufgeteilt, um es ein wenig übersichtlicher zu machen.

    1. Wie kann man bei einer dynamische Webseite (geschrieben in JSP / Java Servlets) mit hoher Besucherzahl die Besucher auf mehrere Server aufteilen, um eine Überlastung der einzelnen Server zu verhindern? Zählt man die Anzahl Benutzer, die an den jeweiligen Servern angemeldet sind und leitet neue Benutzer auf den Server mit den wenigsten Benutzern weiter oder gibt es intelligentere Lösungen, die Auslastungen der Server zu ermitteln?

    2. Desweiteren würde mich noch interessieren, wie man das ganze mit der Datenbank löst, die für alle Server erreichbar sein muss. Aus meinem persönlichen Empfinden heraus würde ich die Datenbank auf einem eigenen Server laufen zu lassen. Rentiert es sich für die Datenbank einen eigenen Server zu mieten? Dafür wäre folgendes wichtig zu wissen: Wenn ein Servlet (auf Server A) eine Anfrage an die Datenbank (auf Server B) sendet, welcher Server sucht dann die passenden Einträge der Datenbankabfrage aus?

    Vielen Dank schon einmal im Voraus!

    Gruß Stip

  • #2
    1. LoadBalancer
    2. ist mir unverständlich. Wohl der Server auf dem die DB ist
    Rentiert es sich für die Datenbank einen eigenen Server zu mieten?
    Das sollte ein Performancetest der DB ergeben. Wozu dient die DB. Hält sie nur die Daten? Ist Logik in der DB oder gibt sie nur die Daten aus?
    Zuletzt editiert von Christian Marquardt; 26.05.2010, 07:14.
    Christian

    Comment


    • #3
      Danke für die Antwort. Die erste hat mir schon einmal weitergeholfen

      Datenbankfunktion in ein anschauliches Beispiel umgeändert:
      Ich habe Positionsdaten (etwa 150.000 Stück) in x- und y-Koordinaten (als Integerwerte) in der Datenbank vorliegen und im Java Servlet gibt es einen aktuellen Punkt (aktuelle Position). Jetzt möchte ich aus der Datenbank alle Einträge haben, die maximal eine bestimmte Entfernung zu dem Punkt haben. Die Entfernung kann variabel angegeben werden, es handelt sich um einen Quadratbereich als Entfernung, kein Kreis. Die Komplexität der Abfrage zeigt folgendes Beispiel:

      SELECT {Spalten} FROM {Tabelle} WHERE
      x < pos.x + 30 AND
      x > pos.x - 30 AND
      y < pos.y + 30 AND
      y > pos.y - 30

      x und y sind aus der Tabelle der Datenbank; pos.x und pos.y kommen aus dem Programm

      Wenn ich von dem Java Servlet aus (das sich auf Server A befindet), die Anfrage an die Datenbank starte (die sich auf Server B befindet), dann wird diese Anfrage komplett von dem Server B verarbeitet und nur das Ergebnis wieder an Server A übertragen. Ist das so korrekt?

      Da wir auf etwa 1000 Anfragen / Sekunde kommen werden (oder eventuell sogar etwas mehr), bedeutet das 1ms Zeit für jede Anfrage (also den Vergleich von etwa 150.000 Daten ...).
      Das bedeutet, sofern alles von dem Datenbankserver bearbeitet wird, benötigen wir wahrscheinlich weitere Datenbankserver, um alle Abfragen abarbeiten zu können. Deswegen ist die korrekte Antwort für mich wichtig, welcher Server die Rechenarbeit hat.

      Gruß Stip

      Comment


      • #4
        Server B der die Datenbank hat, wird die DB-Abfrage ausführen.Beantworten wird den Request Server A
        Christian

        Comment


        • #5
          Danke für die Antwort.

          Gibt es eine Möglichkeit die häufig abgefragten Tabellen im Arbeitsspeicher des Servers zu cachen, damit es keinen Engpass durch die Geschwindigkeit der Festplatte gibt?

          Comment


          • #6
            Originally posted by Stip View Post
            Danke für die Antwort.

            Gibt es eine Möglichkeit die häufig abgefragten Tabellen im Arbeitsspeicher des Servers zu cachen, damit es keinen Engpass durch die Geschwindigkeit der Festplatte gibt?
            Hallo Stip,

            Das macht das DB-System eigentlich von selbst. Möglicherweise kannst Du die von Dir eingesetzte DB etwas feintunen, aber ich glaub, dass das garnicht nötig ist. Ein wenig nachhelfen kannst Du auch, indem Du beim Erstellen der Tabelle auf die Spalten x und y jeweils einen Index setzt.

            Ansonsten aus Java heraus mit einem sog. Prepared Statement arbeiten. Dann sollte das ganze schnell genug sein.

            Gruß ngomo
            http://www.winfonet.eu

            Comment


            • #7
              Ok, ich werde mich mal darüber informieren.

              Vielen Dank an alle für die Unterstützung!

              Comment

              Working...
              X