Leicht und low-latency-Java-Netzwerk-Bibliothek?
Arbeite ich an einer client-server-paar, wo der Multithread-client führt Tausende Aufrufe der server pro Sekunde und die erste Priorität ist das erreichen einer minimalen Latenz. Der Durchsatz soll hoch sein, wie gut. Client und server sind in Java geschrieben, die Kommunikation Semantik ist ganz einfach (put/get-Operationen).
Welche ist die beste Java-Netzwerk-Bibliothek/framework für diese Anforderungen? Servern wie Tomacat/Steg scheint im Schwergewicht. Ich denke über MINA oder Netty, aber ich bin mir nicht sicher, dass diese asynchrone libs bieten eine stabile low-latency-unter starker Arbeitsbelastung.
- Sie sprechen über "die [..] client führt Tausende Aufrufe". Tun Sie wirklich nur einen (oder sehr wenige Kunden)? Frameworks auf Basis der java-nio (netty/mina) Leuchten, wenn Sie mit sehr vielen clients (simultanen verbindungen), aber das bedeutet nicht unbedingt, dass diese clients führen viele Aufrufe. tomcat-http verwendet, während mina/netty sind mehr darauf ausgerichtet, mithilfe von tcp direkt.
- Ja, ich habe nur ein paar client-Anwendungen, und jede Anwendung hat eine relativ kleine Anzahl von threads (~20). So, insgesamt die Anzahl der verbindungen ist nicht extrem hoch.
- Fast alle nicht-blockierende Netzwerk-Bibliotheken, die produzieren eine Menge Müll, wie Sie Nachrichten verarbeiten. Es wird sehr schwer sein Echtzeit, wenn Sie die GC-Störungen. Ich schlage vor, Sie nehmen einen Blick auf CoralReactor, die produziert keinerlei Abfall.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schlage ich vor, Sie versuchen kryonet Rahmen.
Wenn Sie kommunizieren wollen, auf der gleichen Maschine können Sie versuchen, so etwas wie Java-Chronik
die über eine million persistierten messages pro Sekunde mit sub-Mikrosekunden-round-trip-Zeiten.
Wenn Sie möchten, eine niedrige Latenzzeit zwischen Maschinen, müssen Sie sich sehr sorgfältig auf Ihre hardware. Für commodity-hardware, die Ihr round-trip-Latenz von 100 Mikro-Sekunden pro mehr. Mit Spezial-hardware, die Sie suchen, näher an 20 Mikro-Sekunden.
Oder Sie könnten die Kommunikation auf der gleichen box und bekommen viel geringere Latenzen. 😉
Können Sie auch versuchen,Jocket. Es teilt einige Konzepte mit Java-Chronik, sondern direkt gezielte, ersetzen die standard-Socket-Implementierung.
RTT-Latenz liegt unter einer Mikrosekunde für einen ping-pong zwischen Prozessen.
Wenn Sie brauchen, ultra-hohe performance und Durchsatz, empfehle ich die Verwendung von raw-sockets (check-out Socket-und ServerSocket - es kann ein nio-version). Dies befreit Sie von den Gemeinkosten enthalten in HTTP und anderen Protokollen