Frage zur Server-Infrakstruktur (Skalierung) für meine PHP/MySQL Anwendung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Frage zur Server-Infrakstruktur (Skalierung) für meine PHP/MySQL Anwendung

    Hallo zusammen,

    ich bin neu hier, habe in der Vergangenheit aber viel gelesen und gelernt.

    In den letzten Monaten habe ich meine eigene PHP-MySQL Anwendung geschrieben, mit der ich Rechnungen schreiben und diese sehr detailliert auswerten kann. Dazu werden viele Datenbankabfragen ausgeführt.

    Für diese Anwendung wurde ich jetzt gefragt, ob ich diese mehreren Vereinen zur Verfügung stellen kann.
    Ich soll dazu jetzt ein Serverkonzept aufstellen, wie die Anwendung am besten installiert werden kann (Geld spielt dort jetzt keine so große Rolle).

    Folgende Konstellation, die ich mir überlegt habe mit folgender Ausgangslage.
    Es sollen ca. 100 Installationen des gleichen Systems vorgenommen werden, wobei das Programm immer das gleich ist.

    Ich würde (aus Datenschutzgründen) jetzt 100 Datenbank-Instanzen (mit jeweils einem eigenen Port und einer eigenen Datenbank) anlegen und einen Apache Webserver laufen lassen. Dazu hätte ich einen wirklich großen Server (den man dann spiegeln könnte).
    Es würde im htdocs-Ordner also verschiedene Ordner geben:
    /system1/
    /system2/
    /system3/,
    die sich dann jeweils über einen Port (3306,3307,3308) auf eine Datenbank verbinden.

    Ist das so gut oder sollte man das alles in einer Datenbank ablegen (kommen sich dann die mysql-Prozesse in den Weg, da die Anwendung so datenbanklastig ist)?
    Kann man die Datenbanken irgendwie besser skalieren/verteilen?

    Ist ein Webserver dafür OK, oder sollte ich dafür auch verschiedene Webserver aufsetzen?

    Meine Idee ist es, nur EINEN Server zu haben, damit ich nicht so viel Wartung vornehmen müsste...


    Vielen Dank für Eure Tipps/Anregungen.

    Stefan

  • #2
    Was ist "viel"? Welche Dimensionen hast du hier im Kopf. Denn ganz ehrlich, wenn Leute "viel" sagen, ist es meistens eigentlich doch ziemlich wenig, wenn man es mal im Verhältnis sieht. Da überschätzt man gerne mal die eigene Applikation.

    Mach dir nicht so einen Kopf drum. MySQL kann locker sehr viele Abfragen pro Sekunde auf die gleiche (!) Datenbank verkraften ohne annähernd ins Straucheln zu geraten. Diese Systeme sind dafür gemacht, sowas zu können.

    Benutz apache, den mysql-daemon und verschiedene Datenbanken. Als Trennung dazwischen reicht es, für jeden Verein jeweils einen eigenen Datenbanknutzer zu erstellen, der nur Rechte auf die jeweilige für ihn erstellte Datenbank hat.

    Da du auf der Hosterseite sitzt, ist mit verschiedenen Virtual Hosts im Apache-DocumentRoot eigentlich auch schon alles getan. Wenn du den Kunden Zugang zum Server ermöglichen willst, wird es schon komplizierter, da dann ein richtiges User/Rechte-Management her muss.
    This is what happens when an unstoppable force meets an immovable object.

    Kommentar


    • #3
      danke schon einmal für die Antwort.

      Ich meine aber wirklich "viel" :-)
      In einer Datenbank sind durchaus 4 Mio. Rechnungen und auch mal 200.000 Kunden. In der Summe ist die DB dann ca. 2-4GB groß.
      Da die Anwender die Möglichkeit haben auch sebst abfragen über einen Wizzard zu erstellen (z.B. alle Rechnungen mit dem Text "Bleistift"), kann so eine Abfrage (da ich sie nicht beiflussen kann und will) schon mal ein paar Sekunden dauern.
      Daher habe ich Angst, dass die DB dann für die anderen Anwender gesperrt ist.


      Wenn das eine 24 Prozessor-Maschine ist, würden Apache/PHP/Mysql ja jeweils einen eigenen Prozess aufmachen und sich somit auch auf die Prozessorkerne verteilen können, oder?


      Danke
      Stefan

      Kommentar


      • #4
        Gut, das ist sagen wir mal "klein bis mittlere" Größe. "Viel" sind Terabyte Gesamtgrößen und Millionen konkurrierender rechenaufwendigen Abfragen pro Sekunde... zumindest in meinem Sprachgebrauch^^

        Wie dem auch sei; Sowohl apache als auch MySQL sind absolut dafür gemacht, große Applikationen unterstüzuen zu können. Ich kann dir keine definitiven Zahlen oder Quellen nennen, aber da musst du schon auch für dich selbst ein bisschen recherchieren. Das MySQL-Forum wäre hier wahrscheinlich die beste Anlaufstelle.
        Zuletzt geändert von ApoY2k; 17.10.2012, 16:18.
        This is what happens when an unstoppable force meets an immovable object.

        Kommentar


        • #5
          ok, vielen Dank :-)

          Kommentar


          • #6
            Eine schöne "kommt drauf an"-Frage

            So wirklich voraussehen kann das mit den gegebenen Infos glaub ich keiner. Neben dem Umfang des Datenbestandes ist insbesondere die Häufigkeit der Zugriffe ein nicht unwesentlicher Faktor für den Resourcenhunger.

            Du scheinst jedenfalls kein vollkommen Ahnungsloser zu sein, der eben mal was zusammengeklöppelt hat und sich jetzt mal nebenbei fragt, wo den die Belastbarkeitsgrenzen bei einer gegebenen Hardware sind. Letztlich steht trotzdem die Frage offen, inwieweit deine DB sinnvoll designed und indiziert ist, die entsprechenden Abfragen daraufhin optimiert sind usw.

            Apache/PHP/mySql lassen sich vielfältig konfigurieren und aufeinander abstimmen. Nicht selten lässt sich die Belastbarkeitsgrenzen der Hardware dadurch deutlich nach oben verschieben.

            Da kann man jetzt noch einiges anhängen zu dem Thema - aber klare Aussagen wie die optimale Lösung aussehen würde kann man eigentlich nicht treffen.

            Dir wird nicht sehr viel anderes übrig bleiben, als damit loszulegen und dann zu gucken ob es läuft und falls nicht ob es Flaschenhälse in der Anwendung gibt und diese ggf. zu beheben. Wenn dein Clientel kein Problem damit hat, dass es gerade zu Beginn hier und dort mal etwas hakt, dann kannst du auch so verfahren. Falls dein Clientel aber gewisse Ansprüche an Verfügbarkeit/Verlässlichkeit usw. hat, dann sollten Sie sich nach etwas umsehen, was sich in der Vergangenheit bereits bewährt hat.
            Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
            Schön - etwas Geschichte kann ja nicht schaden.
            Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

            Kommentar

            Lädt...
            X