none
Clustering RRS feed

  • Frage

  • Hallo, ich bin grade dabei eine Webanwendung zu machen und (auch wenn der Gedanke warscheinlich sehr weit vorgegriffen ist) würde mich mal interessieren was man so beachten sollte wenn irgendwann so viele Benutzer diese Webanwendung verwenden dass ein Server damit überfordert wäre. Wie würde das eigentlich ablaufen? Ok, man könnte statische Inhalte und den SQL Server auf andere Maschienen auslagern. Aber es gibt ja mein ich auch noch andere Methoden, oder? Ich wage zum Beispiel zu bezweifeln dass dieses Forum nur auf einem Server läuft :) Mir geht es jetzt nicht so sehr um die Einrichtung eines Clusters (wie auch immer der aussehen mag) sondern um das was ich beim programmieren (VB.Net/MSSQL) beachten muss. Vielen Dank schonmal :)
    Donnerstag, 29. Dezember 2011 10:34

Antworten

  • Hallo Tommy,

    wenn Du noch gar keine Ahnung hast wie ein Design aussehen könnte, fang erstmal an und schau ob deine Seite überhaupt soviele Aufrufe bekommen würde das es sich lohnt diese zu Clustern. Grundsätzlich solltest Du nur einfache Datentypen in der Session ablegen, dann kannst Du später deine Website einfach auf einem zweiten IIS hosten, einen Loadbalancer davor schalten und den beiden IIS sagen, dass sie die Session replizieren sollen (direkt oder über eine Datenbank, wobei letzteres Last auf dieser erzeugt), so dass es egal ist ob der Request auf IIS1 oder IIS2 eintrifft. Die SQL Server werden auch später "per Knopfdruck" geclustered, ein besonderes Design wüsste ich jetzt nicht. Bei deiner Applikation kommt es sicher auch darauf an, wie viel dynamischen und wie viel statischen Content Du hast, so dass du bereits bei der Programmierung sagen kannst, was gecached werden soll und was nicht (http://msdn.microsoft.com/de-de/library/d59zceh7.aspx und http://msdn.microsoft.com/de-de/library/hdxfb6cy.aspx) Es kann sicher nicht schaden sich dazu Gedanken zu machen.

    Den SQL Server auf eine "andere Maschine" (oder eben mehrere) auszulagern ist durchaus sinnvoll. Zudem sollte er schnelle Platten haben, was beim Webserver - der ja eher selten Dateien liest oder schreibt da das meiste gecached ist - nicht so eine große Rolle spielt.

    MfG
    asymetrixs 

    Donnerstag, 29. Dezember 2011 16:00
  • Hi,
    Mir geht es jetzt nicht so sehr um die Einrichtung eines Clusters (wie auch immer der aussehen mag) sondern um das was ich beim programmieren (VB.Net/MSSQL) beachten muss.

    wenn es rein ums clustern bzw. die Lastverteilung geht, brauchst Du bei der ASP.NET Entwicklung selbst eigentlich nur wenig bis gar nichts zu beachten. Die wichtigen Punkte hast Du schon selbst genannt. Auslagern statischer Inhalte, Komprimierung und Caching aktivieren, SQL Server verwenden. Dass man resourcenschonenden und performanten Code schreiben sollte, versteht sich aber hoffentlich eh von selbst :)

    Einzig bei der Session könnte man ggfs. schon von vornherein vorsehen, dass man nicht "InProc" (eigentlich besser "InMemory" genannt) arbeitet, da ein LoadBalancer dann relativ performanceintensiv bis auf Sitzungsebene arbeiten muss, um zu wissen, auf welchen der Backendserver er den Request routen muss.

    Grundsätzlich ist für die Lastverteilung eher auf die Server (IIS, SQL Server, ...) und natürlich ggfs. vorhandene LoadBalancer, ... zu achten. Schau mal hier, da findest Du einen kleinen Einstieg in die Materie:

      http://learn.iis.net/page.aspx/486/http-load-balancing-using-application-request-routing/

      http://learn.iis.net/page.aspx/510/achieving-high-availability-and-scalability---arr-and-hardware-load-balancer/

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Samstag, 7. Januar 2012 17:45
    Moderator

Alle Antworten

  • Hallo Tommy,

    wenn Du noch gar keine Ahnung hast wie ein Design aussehen könnte, fang erstmal an und schau ob deine Seite überhaupt soviele Aufrufe bekommen würde das es sich lohnt diese zu Clustern. Grundsätzlich solltest Du nur einfache Datentypen in der Session ablegen, dann kannst Du später deine Website einfach auf einem zweiten IIS hosten, einen Loadbalancer davor schalten und den beiden IIS sagen, dass sie die Session replizieren sollen (direkt oder über eine Datenbank, wobei letzteres Last auf dieser erzeugt), so dass es egal ist ob der Request auf IIS1 oder IIS2 eintrifft. Die SQL Server werden auch später "per Knopfdruck" geclustered, ein besonderes Design wüsste ich jetzt nicht. Bei deiner Applikation kommt es sicher auch darauf an, wie viel dynamischen und wie viel statischen Content Du hast, so dass du bereits bei der Programmierung sagen kannst, was gecached werden soll und was nicht (http://msdn.microsoft.com/de-de/library/d59zceh7.aspx und http://msdn.microsoft.com/de-de/library/hdxfb6cy.aspx) Es kann sicher nicht schaden sich dazu Gedanken zu machen.

    Den SQL Server auf eine "andere Maschine" (oder eben mehrere) auszulagern ist durchaus sinnvoll. Zudem sollte er schnelle Platten haben, was beim Webserver - der ja eher selten Dateien liest oder schreibt da das meiste gecached ist - nicht so eine große Rolle spielt.

    MfG
    asymetrixs 

    Donnerstag, 29. Dezember 2011 16:00
  • Naja das ist ja das Problem. Ich bin nahezu nie zufrieden zu stellen. Ich hab schon einige Webseiten mit ASP.Net realisiert aber glaub mal jah nicht dass ich die asp:form verwende ;) Viewstate ist das beste Streitthema... Da unser Server (ich teil mir einen VServer mit einem Freund) ein Windows Server ist und ich mehrmals erlebt hab wie schlampig das PHP für Windows ist... Würd jetzt zu weit führen. Auf jeden Fall ist das Problem das Forum. Wir wollten eins, aber es gibt ja nur 3 einigermaßen vernünftige. CommunityServer was wie ein alter Branch des YAF aussieht und nicht grade billig ist, dann InstantForum was auch Geld kostet, und da bleibt nur noch YetAnotherForum, was (traurig aber wahr) in kaum einer Version wirklich fehlerfrei funktioniert. Daher die Idee ein Forum zu programmieren. Für uns bräuchte ich auf sowas nicht achten. Es wäre eh nur ein Support Forum mit vielleicht ein bisschen SmallTalk, mehr nicht. Aber wer weiß wo das später eventuell eingesetzt wird. Und ich würde gerne sowas schon mit bedenken statt ewig den halben Quelltext über den Haufen zu werfen :)
    Freitag, 30. Dezember 2011 00:25
  • Hi,
    Mir geht es jetzt nicht so sehr um die Einrichtung eines Clusters (wie auch immer der aussehen mag) sondern um das was ich beim programmieren (VB.Net/MSSQL) beachten muss.

    wenn es rein ums clustern bzw. die Lastverteilung geht, brauchst Du bei der ASP.NET Entwicklung selbst eigentlich nur wenig bis gar nichts zu beachten. Die wichtigen Punkte hast Du schon selbst genannt. Auslagern statischer Inhalte, Komprimierung und Caching aktivieren, SQL Server verwenden. Dass man resourcenschonenden und performanten Code schreiben sollte, versteht sich aber hoffentlich eh von selbst :)

    Einzig bei der Session könnte man ggfs. schon von vornherein vorsehen, dass man nicht "InProc" (eigentlich besser "InMemory" genannt) arbeitet, da ein LoadBalancer dann relativ performanceintensiv bis auf Sitzungsebene arbeiten muss, um zu wissen, auf welchen der Backendserver er den Request routen muss.

    Grundsätzlich ist für die Lastverteilung eher auf die Server (IIS, SQL Server, ...) und natürlich ggfs. vorhandene LoadBalancer, ... zu achten. Schau mal hier, da findest Du einen kleinen Einstieg in die Materie:

      http://learn.iis.net/page.aspx/486/http-load-balancing-using-application-request-routing/

      http://learn.iis.net/page.aspx/510/achieving-high-availability-and-scalability---arr-and-hardware-load-balancer/

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Samstag, 7. Januar 2012 17:45
    Moderator