Ich entwerfe einen Server in Java, die verwendet werden würde, um Anleihen zu handeln. Dieser Server fungiert als Vermittler zwischen der Client-Benutzeroberfläche und dem Analyse-Server. Der analytische Server ist das Gehirn, mein Server wird einfach mit ihm interagieren (mit tcp-Sockets) und die Antworten an den Client weiterleiten.Kritik mein Server-Design bitte
Der Server soll ~ 500 Clients gleichzeitig verarbeiten. Und es muss skalierbar und effizient sein, um ~ 500 Nachrichten pro Sekunde zu verarbeiten.
Der Fluss von Nachrichten zwischen dem Client UI und dem analytischen Server ist dies:
1. Client through the UI requests for price.
2. My server accepts the message, formats it and then asynchronously
sends to the analytical server.
3. When the response from the analytical server arrives, format and send
the response to the client UI.
4. If the client likes the price, he/she will request to trade.
5. Repeat steps 2 & 3.
Es gibt einen bestehenden Rahmen, die ich Authentifizierung zur nutzen und Nachrichten zwischen meinem Server und dem Client UI zu senden. Ich habe das Messaging-Bit bereits zwischen meinem Server und dem analytischen Server codiert.
So weit wie den Rest meines Servers entwerfen, denke ich an 4 blockierende Warteschlangen. Wenn die Preisanfrage kommt, füge ich die Anfrage sofort in eine Warteschlange ein (Queue1). Ich habe dann einen Prozessor, der Nachrichten aus der Warteschlange 1 herausnimmt, formatiert und in eine andere Warteschlange stellt (Warteschlange2). Die Prozessorklasse enthält intern einen Threadpool (Executors.fixedThreadpool) und die Formatierung jeder Nachricht erfolgt in einem separaten Thread.
Ich habe dann eine Dispatcher-Klasse, die einen anderen Thread-Pool enthält. Diese Dispatcher-Klasse ist dafür verantwortlich, Nachrichten von Queue2 entgegenzunehmen und sie auf den Analytical-Server zu schreiben.
Wenn ich die Nachricht vom analytischen Server erhalte, füge ich sie in eine andere Warteschlange ein (Queue3). Ich habe einen anderen Thread-Pool, der die Nachricht aus der Warteschlange nimmt und formatiert und sie in eine andere einfügt (Queue4). Und schließlich habe ich einen anderen Thread-Pool mit Nachrichten aus Warteschlange4 und veröffentlicht auf dem Client.
Ich Grund, ich wählte 4 verschiedene Warteschlangen ist, denn wenn ich will, kann ich ein Werkzeug schreiben, um die Größe dieser Warteschlangen zu beobachten. Die Informationen über die Größe dieser Warteschlangen werden
1. Allow me to tune the size of the thread pools.
2. Further, if needed, I can publish the messages contained in these queues
thus allowing me to monitor all the messages that flows through my server.
Also was denkst du? Irgendwelche Ideen, Tipps sind herzlich willkommen.
Prost
Keine Frage, die eine echte Antwort hat – Peter
Nun eine "fiktive" Antwort würde mir gut passen. Muss eine Frage eine allgemeingültige Antwort haben, damit sie eine Frage ist? – CaptainHastings