Was ist der Unterschied zwischen Actor Model und Microservices?

23

Beide scheinen ein paralleles MPI-Kommunikationsnetz von Prozessen zu sein. Ich identifiziere Schauspieler mit Dienstleistungen. Sind die Akteure dynamischer (Sie können sie erstellen und töten, während das Servicenetz statischer ist) oder was?

Kleiner Alien
quelle
1
speakerdeck.com/rore/…
Robert Harvey

Antworten:

11

Actor Model - ist ein mathematisches Modell für gleichzeitige Berechnungen und Microservices - eine Implementierung einer serviceorientierten Architektur. Die Ähnlichkeiten sind ganz zufällig.

Es ist sicherlich möglich, Microservices basierend auf einem Akteurmodell zu erstellen und eine Microservice-Architektur mit einem Akteurmodell zu modellieren, dies bedeutet jedoch nicht, dass diese äquivalent sind. Ersetzen Sie "microservice system" durch "email system" und es wird immer noch wahr sein. Ersetzen Sie "Actor Model" durch "Communicating Sequential Processes" (CSP), und es wird auch "true" sein, da CSP- und Actor Model-Systeme voneinander modelliert werden können.

Wenn Sie ein bestimmtes Darstellermodell haben, können Sie es mithilfe von Microservices, SOA oder sogar E-Mail implementieren. Dies bedeutet jedoch nicht, dass sie sich auf derselben Abstraktionsebene befinden, um wirklich zu vergleichen.

Das Akteurmodell betont auch die Puffer (kann als Nachrichtenwarteschlangen in der Microservices-Welt betrachtet werden), sodass einige Akteure / Microservices möglicherweise nicht bereit sind, während eine inhärent asynchrone Kommunikation weiterhin möglich ist.

Mit anderen Worten, der Vergleich mit dem Schauspielermodell kann einige kreative Einsichten auf einer sehr hohen Ebene bringen, aber meistens handelt es sich um Äpfel gegen Orangen.

Wenn das Ziel darin besteht, das mathematische Modell von SOA / Microservices mit dem Actor-Modell zu vergleichen, ist dies ebenfalls nicht trivial, da: 1) für SOA kein vereinbartes mathematisches Modell vorliegt, 2) das Modell normalerweise den Zweck enthält. Und die SOA / Microservices-Modellierung unterscheidet sich sehr wahrscheinlich vom Zweck des Akteurmodells. Ein Beispiel für den Versuch, hier SOA zu modellieren .

Natürlich kann man mit Microservices ein Akteurmodellsystem erstellen und jeden Dienst als Akteur bezeichnen (siehe strikte Definition des Akteurmodells). Dies bedeutet jedoch nicht, dass zwischen den beiden im Allgemeinen eine sinnvolle Beziehung besteht.

Roman Susi
quelle
Ich meine, dass das Schauspielermodell nicht mit Microservices auf der gleichen Ebene verglichen werden kann. Lassen Sie mich meine Antwort aktualisieren
Roman Susi
Ich sage das nicht. Microservices können den Actor-Modus ebenso implementieren wie Assembly- oder C-Programme. Aber ich sage nicht, dass sie es immer oder sogar oft tun. Und ja, Erlang ist auch ein Beispiel für die Implementierung eines Akteurmodells. Ich bin mir nicht sicher, ob ich dein Argument verstehe.
Roman Susi
Entschuldigung, ich habe zuerst gelesen, dass Actors ein mathematisches Modell sind und uServices implementieren (dieses Modell). Ich habe nicht bemerkt, dass sie Service Architecture implementieren. Meine Frage ist also, wie zwei mathematische Modelle, Actors und SOA, miteinander verglichen werden. Ein Dienst hat eine Nachrichtenschleife, die Anforderungen akzeptiert und Antwortnachrichten generiert. Dies ist, was der Schauspieler ist / tut. Was ist der Unterschied zu Microservice in SOA? In anderen Worten, wenn ich ein verteiltes Netzwerk von Diensten habe, sollte ich sie als Microservices oder Akteure bezeichnen?
Little Alien
Beachten Sie, dass dies eine Frage- und Antwortseite ist, kein Forum oder Newsfeed. Moniker wie UPDATE und EDIT sind nicht erforderlich. Jeder Beitrag auf Stack Exchange verfügt bereits über einen detaillierten Bearbeitungsverlauf, den jeder anzeigen kann.
Robert Harvey
1

Mit Microservices können Sie Software organisieren, indem Sie jeden betroffenen Bereich in ein eigenes implementierbares Artefakt (ausführbare Datei, Skript, JAR, WAR usw.) aufteilen. Dies gibt Ihnen Flexibilität, indem Sie beispielsweise die Skalierung ermöglichen, indem Sie mehr Instanzen dort bereitstellen, wo sie benötigt werden. Angenommen, Benutzer verbringen mehr Zeit mit dem Betrachten Ihres Katalogs als mit dem Hinzufügen von Dingen zu einem Warenkorb. Ein implementierbares Artefakt übernimmt die Katalogfunktionen, ein anderes die Warenkorbfunktionen. Sie können mehr Kopien der Katalogservices ausführen, um die Last zu bewältigen.

Es isoliert sie auch von internen Änderungen. Angenommen, Sie wechseln von einer relationalen Datenbank zu einer Dokumentendatenbank, um Produktdaten zu speichern - Ihre Warenkorbdienste müssen sich wahrscheinlich nicht ändern.

Das Akteurmodell ist eine niedrigere Ebene als das bereitstellbare Artefakt. Es handelt sich eher um die Objekttypen, mit denen Sie den Service implementiert haben. Wenn Sie mit dem obigen Beispiel fortfahren, werden die Einkaufswagen in Ihrem System möglicherweise von Akteuren dargestellt, sodass der Einkaufswagen jedes Benutzers ein eigener Akteur ist. In Nachrichten wird er aufgefordert, Artikel hinzuzufügen, Artikel zu entfernen, mit dem aktuellen Inhalt zu antworten, Versand hinzuzufügen und auszuchecken usw. In diesem Fall haben Sie immer noch einen Microservice, der mit dem Actor-Modell implementiert ist.

Rob Crawford
quelle
Wenn Sie gesagt haben, dass Sie mehrere Instanzen des gleichen Dienstes haben können, begann ich zu denken, dass es umgekehrt ist: Dienst ist ein Typ, während Akteure Objekte sind :)
Little Alien
Schauspieler können nicht einzeln eingesetzt werden? Bist du sicher? dotnet.github.io/orleans/Documentation/Grain-Versioning/…
Daffy Punk
Mir scheint, dass es, was die Implementierung betrifft, eine gewisse Konvergenz zwischen den beiden Konzepten gibt ...
Daffy Punk
1

Ich würde sagen, dass der Hauptunterschied in der Granularität liegt.

Für das Akteurmodell ist es relativ feinkörnig, da ein Akteur dazu neigt, das Äquivalent eines Objekts in OOP darzustellen.

Für Mikrodienste ist dies relativ grobkörnig, da ein einzelner Mikrodienst aus einer großen Anzahl von Akteuren oder Objekten bestehen kann.

Beachten Sie, dass Sie Ihre Vorstellungskraft nicht wirklich erweitern müssen, um zu behaupten, dass modernes Web bei noch größerer Granularität ("Makrodienste") dasselbe ist. und dass (z. B.) ein HTTP-Server ein Makrodienst, ein Datenbankserver ein Makrodienst, ein Webbrowser ein Makrodienst usw. ist.

Es ist alles in etwa dasselbe - isolierte Teile, die kommunizieren. Es ist nur die Größe der Teile (und damit die Anzahl der Teile), die sich ändern.

Brendan
quelle
Jede noch so große Java-Anwendung ist ein einzelnes Objekt. Objekte bestehen aus anderen Objekten und können unendlich größer werden. Ich denke, dass uServices auch Arten von Anwendungen sind, die aus anderen Objekten bestehen.
Little Alien
0

Microservices werden horizontal skaliert, indem mehrere Replikate erstellt werden, von denen jedes aufgrund des statusfreien Zustands des Dienstes Anforderungen bedienen kann. Sie sind aufgrund ihrer Staatenlosigkeit ausfallsicher.

Akteure werden skaliert, indem sie auf Partitionen mit weniger Last oder mehr verfügbaren Ressourcen verschoben werden. Sie sind staatlich . Sie sind ausfallsicher, da - je nach Akteur-Framework - ein anderer Akteur dynamisch hochgefahren werden kann oder jederzeit eine aktuelle Sicherung des Akteurs erstellt werden kann, um den Ausfall des primären Akteurs zu beheben.

Auch hier können Microservices zwar statusbehaftet sein, verstoßen jedoch gegen die Gestaltungsprinzipien von Microservices.

Sushant
quelle