Ich habe studiert, wie ich eine verteilte Architektur entwickeln könnte, die die Protokollanfrage / Antwort unter Verwendung des Konzepts der Gleichzeitigkeit durch Akteure implementiert.
Ich kam zu dem Schluss, dass der beste Weg dazu besteht, ein Antwortsystem mit synchroner Behandlung von Futures / Promises zu erstellen, und bald nach der Antwort einen offenen Kanal zu hinterlassen, um Benachrichtigungen zu erhalten.
Also eine Architektur, die genau wie eine Posteingangsmeldung funktionieren würde.
Es hat einige Probleme.
Also müsste ich zwei Endpunkte (Akteure in den zwei Schichten) beibehalten?
Das Problem: Das Ansichtsmodul fordert an, dass ein bestimmtes Element verarbeitet wird. Sie sendet diesen Befehl zur Verarbeitung über RemoteActor auf dem Anwendungsserver. Dieser Server sollte sofort das Versprechen zurückgeben, dass er Sie benachrichtigt, wenn das Element verarbeitet wird. Danach wartet das Ansichtsmodul auf die Benachrichtigung über den Abschluss der Verarbeitung.
Wie sehen Sie dieses Problem?
Ich benutze Scala, Akka und Google Guice.
Ich glaube, es ist ein generelles Problem, dass jeder seine Lösungen nutzen kann. Entschuldigung, wenn ich die Bedingungen der stackoverflow-Seite verletzen werde.
Vielen Dank im Voraus
Ich möchte nicht von irgendwelchen guten Antworten ablenken, die Sie auf Akka bekommen können, weil ich leider nicht viel über Akka weiß und es sind verteilte Schauspieler-Features, aber ich würde gerne fragen, ob Sie Alternativen in Betracht gezogen haben .
Es scheint, dass Sie grundsätzlich eine asynchrone RPC-Bibliothek benötigen. Es gibt zwei leistungsstarke Scala-Bibliotheken, von denen ich weiß, dass sie Ihre Anforderungen erfüllen können - Ссылка und Ссылка . Finagle bietet einige wirklich mächtige Kombinatoren, um Abhängigkeiten von asynchronen Berechnungen auszudrücken und Zuhörer auf Futures zu registrieren. Momentan behalte ich Norbert, das wir bei LinkedIn für einige unserer verteilten Systeme, wie z. B. die Suche, verwenden.
Warum nicht einfach einen der REQ-REP-Sockel von 0MQ benutzen?
Auf diese Weise lösen Sie Ihr unmittelbares Problem und lernen gleichzeitig eine Architektur kennen, die Sie sehr unterstützt und die Kommunikation mit Kunden unterstützt, die in vielen Sprachen geschrieben sind.
Ein Beispiel dafür, wohin dies führen könnte, finden Sie unter Ссылка
Beachten Sie, dass ich NICHT vorschlage, dass Sie heute AMQP verwenden, da ein RabbitMQ-Broker für Ihr unmittelbares Problem übertrieben wäre. Ich schlage vielmehr vor, dass Sie Ihre Zeit in die Nutzung einer Architektur investieren (Message Queuing), die Sie auf lange Sicht ausbezahlt.
Tags und Links scala architecture concurrency akka guice