Seite 1 von 1
Netzwerk,maximale Verbindungen.
Verfasst: 24.02.2006 05:59
von Toshy
Hallo Leute,
ich würde gerne wissen ob es ein Maximum an möglichen Verbindungen an einem Server gibt. Es gibt zwar betriebssystembedingte Einschränkungen, Windows98 erlaubt glaube ich nur ca. 200 Verbinden gleichzeitg, aber wie sieht das auf anderen Systemen aus?
Und wie sieht es real im aller schlimmsten Fall aus? Ich meine als Beispiel das eDonkey-P2P netz, bei Emule zum Beispiel gibt es Server die 1 Mio User online haben. Sind dies auch alles offenen Verbindungen, oder nur User die gerade verwaltet werden?
Bitte fangt jetzt nicht an mit einer P2P diskussion, darum geht es mir nicht, aber es war das einzige Beispiel was mir eingefallen ist wo so viele User online sind.
Mir geht es hier als Hauptgrund nur darum was die Server mit der meißten Verbindungsanzahl so an Verbinden verwalten müssen, einfach um zu schauen, wie ich eine DC-Verwaltung am besten aufbaue. Klar, das diese Werte nicht annähernd bei mir erreicht werden, aber es geht ums prinzipielle Verständnis.
Schließlich muß für jedes eingehende und ausgehende event (und das kann pro connection ja mehrmals in der Sekunde sein) die DC-Verwaltung angesprochen werden. Das ist natürlich die größte Bremse und da will ich halt alles gleich vernümpfig angehen.
Gruß
Toshy
Re: Netzwerk,maximale Verbindungen.
Verfasst: 24.02.2006 10:04
von Jason
Friedrichs hat geschrieben:
ich würde gerne wissen ob es ein Maximum an möglichen Verbindungen an einem Server gibt. Es gibt zwar betriebssystembedingte Einschränkungen, Windows98 erlaubt glaube ich nur ca. 200 Verbinden gleichzeitg, aber wie sieht das auf anderen Systemen aus?
Also Apache 2.0 ist default bei 250. Lässt sich aber mit MaxTreads
erhöhen. Jetzt sind aber 250 Verbindungen die eine HTML-Datei
lesen noch etwas anderes als 250 Verbindungen die mit maximaler
Bandbreite eine Datei saugen.
In grossen Netzwerken (viele zugriffen) wird die Last aber auf viele Server
verteilt (Load-Balancing). Merke, viele Verbindungen ist nicht gleich gute
Qualität. Wenn man auf einem Server z.B. 2000 Verbindungen zulässt und
die auch gleichzeitig stattfinden, werden sich je nach Ausbau der Maschine
die User, mehr oder weniger, über die tröpfelnden Daten bedanken.
Beim Atomic Web Server v1.0 (Coded by AlphaSND with PureBasic) steht:
Handle up to 255 connections simultaneously
Verfasst: 24.02.2006 11:01
von stbi
Verfasst: 24.02.2006 13:53
von PAMKKKKK
Ich setze hier ein MySQL Server mit ca. 2000 Usern ein.
Wenn die User morgens kommen und ihre Rechner einschalten, dann meldet sich der Rechner bei dem MySQL Server (Inventarisierung).
Das hat eine sehr hohe Last, in sehr kurzer Zeit zu folge.
Ich hatte den MySQL erst auf max 500 Conections stehen.
Da bekam ich im Logfile die Fehlermeldung "to much conections"
Dann habe ich die max Conections auf 1000 hochgesetzt, nun ist ruhe und es funzt.
Betrachtung der maximal möglichen Verbindungen eines Servers:
Software
Software mässig besteht eine IP-Adresse aus 32 Bit
Pro IP können beim TCP/IP Protokoll 65000 UDP (16 Bit) und 65000 TCP (16 Bit) Ports genutzt werden.
Das ergibt eine Theoretische Softwaregrenze von 32 hoch 32 Bit.
Ich betrachte das nun mal als unbegrenzt.
Dein Server benutzt zum Softwaremäßigen Verwalten der Verbindungen, Session IDs, wenn du diese Sessions mit einer 32Bit Integer Variablen verwaltest, so kannst du 4294967295 Verbindungen verwalten (ebensoviele wie WindowsXP), bei einer 64 Bit Variablen eben noch mehr…
Eine vernünftige Session Verwaltung bei vielen Verbindungen, bekommst du nur hin, wenn dein Server bei jeder neuen Verbindung eine Thread aufmacht und die Verbindung dann im Thread behandelt wird.
Der eigentliche Server reicht die Verbindungen also nur durch. Anhand der Session ID-Tabelle verwaltet der Server nur noch die Threads (erstellen und killen von Threads).
Dies ist die sogenannte Asynchrone Verarbeitung der Anforderungen.
Dabei ist darauf zu achten, das die Threads nicht auf andere Threads warten müssen (Die Threads nicht blockierend arbeiten)
Hier gelten dann die Beschränkungen des Betriebsystems für die max Anzahl von Threads (und dein Programmiergeschick).
Hardware
Hier gilt zuerst einmal das Verhältnis von zur Verfügung stehender Netzwerkbandbreite und CPU zu betrachten.
Wie viele Millisekunden braucht die CPU, um von einem Thread zum nächsten zu wechseln, um kein Netzwerkereignis zu verpassen.
Die Busgeschwindigkeit spielt hier auch eine rolle…..
Ist die zur Verfügung stehende Netzwerkbandbreite größer, als die Server Hardware verkraften kann, so müssen ein oder mehrere Hardwaremäßige Server auf gestellt werden. Diese Teilen sich die Verarbeitungslast durch Loadbalacing und einem Vorgeschalteten Netzwerkverteiler
Diese Berechnungen sind aber nur für Großrechner interessant……
Berechnungen für Normale Server:
Das IP-Paket ist theoretisch bis 65535 Bytes (64 kB) spezifiziert, wird aber selbst meist über Ethernet übertragen, und dort ist die Rahmengröße auf 1500 Bytes (12.000 Bit) festgelegt.
Ein TCP-Segment hat typischerweise also eine Größe von 1500 Bytes.
Wenn man ein heute übliches Netzwerk von 100Mbit/s (100.000.000 Bit/s) zugrunde legt, so hat man 8333,33 Verbindungen pro Sekunde (100.000.000 / 12.000 = 8333,333).
Diese 8333 Verbindungen pro Sekunde sind aber nur Theoretisch.
Durch Fehler im Netzwerk und Protokoll-Overhead liegt diese Zahl niedriger.
.
Fazit:
Du siehst es kommt hier weniger auf die Software an, wenn sie Optimal Programmiert ist.
Die Hardware muss in jedem fall auf die Last ausgelegt werden.