Ankündigung

Einklappen
Keine Ankündigung bisher.

Anwendung für mehrere Server entwickeln

Einklappen

Neue Werbung 2019

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

  • Anwendung für mehrere Server entwickeln

    Hi,

    meine Anwendungen liefen bisher immer nuf ein einem Server. Quasi ein HTTP und ein MySQL Server.

    Nun Frage ich mich wie es ausschaut, wenn man eine Anwendung entwickelt, die auf mehreren Servern läuft.

    Ich hätte bisher folgende Vorstellung:

    1. Es gibt mehrere MySQL Server, die sich alle permanent abbgleichen. Bekommt MySQL Server 1 neue Daten, kommen diese auch automatisch in MySQL Server 2 und MySQL Server 3. Wenn ein neuer User auf die Seite kommt, würde ich halt schauen welcher MySQL Server die kleinste Auslastung hat und dann diesen immer nehmen.

    2. Beim HTTP Server, würde jeder User erstmal auf Domain.de - Domains registrieren und verwalten - Ihre Online-Plattform für Domains und Webhosting kommen. Dann würde ich auch hier die Auslastung messen und den User dann auf www1, www2 und www3 verteilen, sofern eine auch keine Suchmaschine ist.

    Demnach müsste die Scripts aber nicht besonders anders programmiert werden. Ich finde leider keine passende Infoquellen im Internet über dieses Thema. Auch ein Buch wäre interessant, gibt es vermutlich auch nicht.

    Hat hier jemand Erfahrung oder kennt Quellen?

    Smilla

  • #2
    Ich kann dir dazu nicht allzusehr weiterhelfen aber ich werfe mal ein paar Stichworte in den Raum:
    • Load balancing (wie dein 2. quasi)
    • Content Delivery Networks
    • Aufpassen mit Sessions und Cookies
    • Deine Idee unter 1. klingt nach extrem viel Last wenn du hoch skalierst (stell dir 100 mysql server vor, ein update triggert 100 Querys), dazu vielleicht mal sowas wie memcached ansehen
    • Wenn du deine Application von Beginn an modular hälst dürfte das Umsteigen auf eine andere Datenquelle (z.b. von einem mysql Server auf memcached/3 mysql server und von php Sessions auf eigenes Session Management) problemlos gehen, ja.


    Gruß

    Kommentar


    • #3
      Solche Sachen werden meist transparent gegenüber der Software durch tiefere Softwarelayer oder Hardware abgebildet. Wie kommst Du darauf, dass es darüber keine Bücher gibt?
      [COLOR="#F5F5FF"]--[/COLOR]
      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
      [COLOR="#F5F5FF"]
      --[/COLOR]

      Kommentar


      • #4
        Suchbegriffe für den mySQL Teil wären "MySQL Cluster" oder "MySQL Replication". Meist wird das so gelöst, dass ein fester Server die Schreibzugriffe verarbeitet wärend das Lesen von Datensätzen über einen Cluster läuft. Damit spart man sich diverse Probleme beim synchronisieren mehrerer Server.

        Für den HTML / PHP Teil ist das Stichwort wie schon erwähnt wurde "Load Balancing". Funktioniert völlig automatisch durch meist dedizierte Hardware, die vor deiner Server-Farm sitzt.

        Kommentar


        • #5
          Hat hier jemand Erfahrung
          Ja. Lastverteilung kannst du - wie du schon beschrieben hast - per DNS mit gleicher Gewichtung der Subdomains oder per dediziertem Routing (LVS) erledigen. Letzteres mit einem Squid davor ist ein Garant für gute Skalierbarkeit und Performance.
          Viele Grüße,
          Dr.E.

          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          1. Think about software design [B]before[/B] you start to write code!
          2. Discuss and review it together with [B]experts[/B]!
          3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
          4. Write [I][B]clean and reusable[/B][/I] software only!
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

          Kommentar


          • #6
            Subdomains sind vielleicht nicht so gut wegen Cookies (Oder greifen die Beschänkungen nur bei 2nd-Level-Domains?). Sessions kann man ebenfalls auf einem (oder mehreren) DB-Servern verwalten.

            Kommentar


            • #7
              Zitat von smilla Beitrag anzeigen
              Hi,

              2. Beim HTTP Server, würde jeder User erstmal auf Domain.de - Domains registrieren und verwalten - Ihre Online-Plattform für Domains und Webhosting kommen. Dann würde ich auch hier die Auslastung messen und den User dann auf www1, www2 und www3 verteilen, sofern eine auch keine Suchmaschine ist.
              Smilla
              Die frage ist, wie willst Du die Auslastungen messen?
              Wenn du in grössenordnungen von mehreren Webservern planst, kommst du um den Einsatz eines professionellen Loadbalancers nicht herum.

              Kommentar


              • #8
                Wenn du in grössenordnungen von mehreren Webservern planst, kommst du um den Einsatz eines professionellen Loadbalancers nicht herum.
                Was verstehst du darunter? Eine BIG IP? Einen LVS-Router?
                Viele Grüße,
                Dr.E.

                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                1. Think about software design [B]before[/B] you start to write code!
                2. Discuss and review it together with [B]experts[/B]!
                3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
                4. Write [I][B]clean and reusable[/B][/I] software only!
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                Kommentar


                • #9
                  Beim Messen dachte ich an uptime und damit die Server Auslastung auslesen, dies dann z.B. alle 1 min als cron laufen lassen, abspeichern und diese Daten dann verarbeiten (entscheiden welcher Server genutzt wird).

                  Kommentar


                  • #10
                    Dazu sollte man besser Tools verwenden, die das schon können. -> Keepalived for Linux - Linux High Availability
                    Viele Grüße,
                    Dr.E.

                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                    1. Think about software design [B]before[/B] you start to write code!
                    2. Discuss and review it together with [B]experts[/B]!
                    3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
                    4. Write [I][B]clean and reusable[/B][/I] software only!
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                    Kommentar


                    • #11
                      Also wenn Du wirklich vorhast, Cloud-fähige Anwendungen zu entwickeln, solltest Du Dich dringend mit memcached auseinandersetzen. Außerdem solltest Du, wenn Du nicht genau weisst wie die Systemlandschaft mal aussehen wird, von vorne herein die Verteilung von generierten Daten über verschiedene Transferwege wie FTP/sFTP/scp etc. mit einplanen. Gerade bei etwas kleineren Umgebungen sind shared SAN Konzepte eher selten anzutreffen und bei NFS hapert es in der Regel an der Performance. Aber auch in diesem Fall solltest Du auf verschiedene Speicherpfade vorbereitet sein.

                      Das Load Balancing über DNS ist natürlich Bullshitbingo. Das überlässt man dem ldirectorD/LVS. Bei mySQL musst Du Konsistenz beweisen. Ein "normales" Setup besteht aus einem Master und mehreren Slaves. Auf den Master wird geschrieben, von den Slaves wird gelesen. Diese Form der Replikation ist stabil und bewährt, während Master-Master Replikationen zwar einfach, dafür aber i.d.R. instabil sind. Und wo wir gerade bei replizierten mySQL sind: Im mySQL Manual findest Du hilfreiche Tips wie man Queries baut, welche die Replikation nicht zerstören.

                      Kommentar


                      • #12
                        Hallo,
                        sehe ich das richtig, dass man beim Serverclustering die normalen PHP $_SESSION['...'] nicht mehr nutzen kann?

                        Kommentar


                        • #13
                          Zitat von Curcio Beitrag anzeigen
                          Hallo,
                          sehe ich das richtig, dass man beim Serverclustering die normalen PHP $_SESSION['...'] nicht mehr nutzen kann?
                          Blödsinn! Sofern du ein transparentes Cluster aufsetzt, verhält sich eine Applikation auf einem Knoten exakt gleich wie auf einem 20 Knoten Cluster.
                          Viele Grüße,
                          Dr.E.

                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                          1. Think about software design [B]before[/B] you start to write code!
                          2. Discuss and review it together with [B]experts[/B]!
                          3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
                          4. Write [I][B]clean and reusable[/B][/I] software only!
                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                          Kommentar


                          • #14
                            Zitat von Curcio Beitrag anzeigen
                            Hallo,
                            sehe ich das richtig, dass man beim Serverclustering die normalen PHP $_SESSION['...'] nicht mehr nutzen kann?
                            Sessions laufen über den Session-Handler, da man problemlos eigene nutzen oder fertige, kann man hier auch alle möglichen externen storages nutzen oder die webserver teilen sich halt irgendwo ein verzeichnis für die Sessions.

                            Die Memcached-Extension bringt einen nativen in C geschriebenen Session-Handler mit den man direkt in der php.ini setzen kann

                            Das Joomla-Framework bietet fertige Implementierungen für andere Backends an (apc, xcache und co fallen bei mehreren servern natürlich raus)

                            Docs for class JSessionStorage

                            zu guter letzt lässt sich das auch selbst sehr einfach implementieren: PHP: session_set_save_handler - Manual
                            [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
                            | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

                            Kommentar


                            • #15
                              Hallo Robo,

                              diesen ganzen Overhead braucht man doch garnicht. Das lässt sich sehr einfach über ein shared storage realisieren, der auf jedem der Knoten verfügbar ist. Du kannst mit session.save_path definieren, wo deine Files gespeichert werden.

                              Man mounte dazu einfach ein NFS-, SMB/CIFS- oder GFS-Volume auf jedem der Knoten und lege dort den Session-Speicher hin - fertig. Sofern man die Möglichkeit hat, memcached-Server auf einer Infrastruktur zu installieren, hat man auch die Möglichkeit einen NFS-Server aufzusetzen.
                              Viele Grüße,
                              Dr.E.

                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                              1. Think about software design [B]before[/B] you start to write code!
                              2. Discuss and review it together with [B]experts[/B]!
                              3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
                              4. Write [I][B]clean and reusable[/B][/I] software only!
                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                              Kommentar

                              Lädt...
                              X