Frage zu der Synchronisierung von Daten mit verschiedenen Proxies und Spigot Servern.

  • Hey Leute,

    ich arbeite aktuell an einem Minecraft Minigame Netzwerk auf der 1.16.3.


    So ein Netzwerk muss natürlich viele Daten Verarbeiten und Synchronisieren.

    Da stellt sich jetzt die Frage wie ich das angehen sollte.


    Da ich in letzter Zeit weniger Zeit am PC verbringe will ich im späteren verlauf viel über ein Webpanel steuern können.

    Das sollte also schon mal eingeplant sein.


    Bei meinem alten Netzwerk habe ich einen Rest Server(Express auf NodeJS über NestJS) mit meinem Netzwerk verbunden.

    Grundsätzlich hätte ich nichts dagegen dies weiterhin zu benutzen. Aber jetzt geht es zum richtigen Thema.


    Synchronisieren


    Bei meinem alten Netzwerk wurde eigentlich nichts Synchronisiert. Dies hat große Probleme geschaffen.

    Vor allem will ich jetzt auch mehrere Proxies unterstützen. Da wird das von "naja" zu "extrem wichtig".


    Ich habe an einen Netty Server pro Service gedacht. Z. B. Friends Service, Party Service, Punishment Service usw.


    Die Probleme:

    • Wie verbinde ich jetzt meine Netty Server mit dem Web Panel?
    • Wie ist die Performance bei so vielen Netty Connections in einem Minecraft Server?


    Ich habe auch schon an folgendes gedacht:


    Man könnte einen Netty Server mit einem Modul System machen damit ich das Netzwerk schnell erweitern kann ohne das ganze Projekt neu zu compilen.


    Ich denke, dass das eine relativ gute Lösung ist.


    Was meint ihr? :/

    • Was sind eure Gedanken zu dem RestAPI Konzept?
    • Wie denkt ihr über die/den Netty Server?
    • Wie sollte ich diese mit dem WebPanel einbinden?


    MFG

    RazerToaster :)

  • Eine kleine Erweiterung:


    Sollte dieser Netty Server dann z.b bei einem Friends Packet über das Rest backend diese zur Datenbank hinzufügen?

    Oder über eine direkte Datenbank Verbindung?


    Diese hat den Nachteil das sie eben nicht auf dem selben Stand ist wie das Rest backend(von models usw.).


    Der Nachteil beim Rest-Backend:

    Ich fühle mich unwohl zwei Schnittstellen dafür zu haben.

    Sollte ich mal nicht mehr für das Netzwerk entwickeln bzw. nicht mehr alles verwalten kann es relativ schnell dazu kommen das jemand das Rest-Backend als Schnittstelle benutzt.

    Dann ist jedoch der Netty Server nicht mehr Synchronisiert.


    Eine andere Option währe:


    Websockets direkt im NodeJS Backend


    Hier fühle ich mich aber auch wieder unwohl...


    Ich weiß nicht so wirklich ob NodeJS das packt.

    Habe ja gehört das NodeJS zwar viel auf einmal packt aber eben keine langen und CPU heavy Tasks.

    Ich denke mal das so ein Websocket der die ganze Zeit diese Requests verwaltet da ein bisschen mehr braucht.


    Mit Java ein Rest Backend ist ja auch so ne Sache.


    Erstens: Ich wüsste nicht wie ich ein Rest Backend ohne Spring machen sollte. Ich habe jetzt nicht wirklich was zu Netty Server Kompatibilität gefunden. Wird aber schätze ich mal funktionieren.


    Zweitens: Wie ist es bei Java mit der Performance? Ich hab ja gehört, dass das nicht sooo gut funktioniert.


    Was währen eure Ideen?


    MFG

    RazerToaster :)


  • Websockets direkt im NodeJS Backend


    Hier fühle ich mich aber auch wieder unwohl...


    Ich weiß nicht so wirklich ob NodeJS das packt.

    Habe ja gehört das NodeJS zwar viel auf einmal packt aber eben keine langen und CPU heavy Tasks.

    Ich denke mal das so ein Websocket der die ganze Zeit diese Requests verwaltet da ein bisschen mehr braucht.

    Warum soll das ein Problem sein? Node.js arbeitet in den meisten Fällen asynchron mittels Event Handling. Die WebSockets nutzen ebenfalls das Event System von Node.js, somit wird auf eingehende Verbindungen, "Pakete" und Ähnliches auch asynchron reagiert. Wenn du jetzt irgendwelche Daten aus einer Datenbank auslesen willst oder auf eine Antwort von einem anderen Service wartest oder sowas, dann wird die Antwort darauf meist ebenfalls wieder asynchron (je nach Modul und Funktion) ausgeführt. So schafft es Node.js ja eben für genau solche Dinge dazu sein, und teilweise auch viele Anfragen gleichzeitig zu bearbeiten.