Software-Architektur Actors

Ähnliche Dokumente
Serviceanweisung Austausch Globalsign Ausstellerzertifikate

Nebenläufige und verteilte Programme CS2301

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Stapelverarbeitung Teil 1

Backup der Progress Datenbank

Import des persönlichen Zertifikats in Outlook 2003

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Programmieren in Java

Übung: Verwendung von Java-Threads

Navigieren auf dem Desktop

Java: Vererbung. Teil 3: super()

Java Einführung Collections

SWT II Projekt. Chat - Anwendung. Pflichtenheft 2000 SWT

Grundlagen von Python

Enigmail Konfiguration

Powermanager Server- Client- Installation

Software Engineering Klassendiagramme Assoziationen

Import des persönlichen Zertifikats in Outlook2007

Programmierkurs Java

Erstellen einer in OWA (Outlook Web App)

1 Einleitung. Lernziele. automatische Antworten bei Abwesenheit senden. Einstellungen für automatische Antworten Lerndauer. 4 Minuten.

Formular»Fragenkatalog BIM-Server«

macs Support Ticket System

dpa-infocom - Datenlieferung

Anton Ochsenkühn. amac BUCH VERLAG. Ecxel für Mac. amac-buch Verlag

Abschnitt 12: Strukturierung von Java-Programmen: Packages

Tutorial -

Mail-Signierung und Verschlüsselung

Adressen der BA Leipzig

White Paper. Konfiguration und Verwendung des Auditlogs Winter Release

ecaros-update 8.2 Update 8.2 procar informatik AG 1 Stand: DP 02/2014 Eschenweg Weiterstadt

AUTOMATISCHE -ARCHIVIERUNG. 10/07/28 BMD Systemhaus GmbH, Steyr Vervielfältigung bedarf der ausdrücklichen Genehmigung durch BMD!

2. Hintergrundverarbeitung in Android: Services und Notifications

Anleitung zum erstellen einer PDF-Datei aus Microsoft Word

The ToolChain.com. Grafisches Debugging mit der QtCreator Entwicklungsumgebung

Applet Firewall und Freigabe der Objekte

Teamlike Administratorenhandbuch

Tipps und Tricks zu Netop Vision und Vision Pro

MESONIC WINLine Jahreswechsel. Umstellung des Wirtschaftsjahres SMC IT AG

Zentrale Installation

Benutzerhandbuch. Leitfaden zur Benutzung der Anwendung für sicheren Dateitransfer.

Objektorientierte Programmierung

1 Einleitung Anmelden und Abmelden Mail-Adresse einrichten Versenden von SMS Zusätzliche Einstellungen...

THEMA: "SAS STORED PROCESSES - SCHNELL GEZAUBERT" HELENE SCHMITZ

Import des persönlichen Zertifikats in Outlook Express

Import und Export von Übergängern

Whitepaper. Produkt: combit Relationship Manager 7. combit Relationship Manager -rückläufer Script. combit GmbH Untere Laube Konstanz

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Übersicht... 2 Dateiupload... 3 Administratorfunktionen... 4

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Zugriff auf OWA Auf OWA kann über folgende URLs zugegriffen werden:

Das Modul Hilfsmittel ermöglicht den Anwender die Verwaltung der internen Nachrichten, Notizen, Kontakte, Aufgaben und Termine.

Automatisches Beantworten von - Nachrichten mit einem Exchange Server-Konto

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

A585 Mailserver. IKT-Standard. Ausgabedatum: Version: Ersetzt: Genehmigt durch: Informatiksteuerungsorgan Bund, am

Referenzen Typo3. Blog der Internetagentur Irma Berscheid-Kimeridze Stand: Juni 2015

Seriendruck mit der Codex-Software

Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge

easysolution GmbH easynet Bessere Kommunikation durch die Weiterleitung von easynet-nachrichten per nach Hause

Einstieg in die Informatik mit Java

Konzept zur Push Notification/GCM für das LP System (vormals BDS System)

ERSTE SCHRITTE.

SMS/ MMS Multimedia Center

DELFI. Benutzeranleitung Dateiversand für unsere Kunden. Grontmij GmbH. Postfach Bremen. Friedrich-Mißler-Straße Bremen

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

FastViewer Remote Edition 2.X

Java Kurs für Anfänger Einheit 5 Methoden

Delegieren von Terminen, Jobs oder Notizen aus dem Kalenderlayout auf Seite 111

nessbase Projekte Über Projekte I

Hier finden Sie häufig gestellte Fragen und die Antworten darauf.

Delegatesund Ereignisse

Updatebeschreibung JAVA Version 3.6 und Internet Version 1.2

Scala kann auch faul sein

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

teamsync Kurzanleitung

Sichere Anleitung Zertifikate / Schlüssel für Kunden der Sparkasse Germersheim-Kandel. Sichere . der

Vgl. Oestereich Kap 2.7 Seiten

ICS-Addin. Benutzerhandbuch. Version: 1.0

Anleitung für die Teilnahme an den Platzvergaben "Studio II, Studio IV und Studio VI" im Studiengang Bachelor Architektur SS15

Lindenbaum Schrittanleitung. Telefonkonferenz durchführen Anleitung für Moderatoren

Lokale Installation von DotNetNuke 4 ohne IIS

Schnellstartanleitung Excitor DME (Android)

IAWWeb PDFManager. - Kurzanleitung -

Support-Tipp Mai Release Management in Altium Designer

Adressen und Kontaktinformationen

System-Update Addendum

Aktivieren Sie die Checkbox um von jedem Mail eine Kopie an den -absender (gemäss Einstellungen Absender) zu senden.

Javakurs zu Informatik I. Henning Heitkötter

Modul 2: Automatisierung des Posteingangs - Regel- und Abwesenheits-Assistent

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER

Funktions-Postfach (Shared Mailbox) in Outlook 2010/2013 einrichten

Übung 8: Semaphore in Java (eigene Implementierung)

Java Virtual Machine (JVM) Bytecode

Leitfaden zur Einrichtung za-mail mit IMAP auf dem iphone

Erstellen von Mailboxen

Algorithmische Kryptographie

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

INSTALLATION DES V-MODELL XT UNTER WINDOWS VISTA

managed PGP Gateway Anwenderdokumentation

Transkript:

Actors Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München SS 2015 Actor Model 1973 von Carl Hewitt, Peter Bishop und Richard Steiger vorgeschlagenes Modell für nebenläufige Berechnungen Carl Hewitt, Peter Bishop, Richard Steiger: A Universal Modular Actor Formalism for Artificial Intelligence. In: Proceeding IJCAI 73 Proceedings of the 3rd international joint conference on Artificial intelligence. 1973, S. 235 245 Actors sind ein wesentlicher Bestandteil der Programmiersprache Erlang in den 80er Jahren von der Firma Ericsson für Telefonswitche entwickelte funktionale Programmiersprache die Sprache in der WhatsApp auf FreeBSD-Servern Milliarden von Messages täglich verarbeitet Actors sind auch in Scala und Java über Akka nutzbar Actors Actors sind unabhängige, nebenläufige Einheiten Sie kommunizieren über Messages, die in einer Mailbox abgelegt werden der Actor kann sich eine Message aus der Mailbox holen und darauf reagieren: er kann Nachrichten an sich oder andere (ihm bekannte) Actors senden 1

er kann neue Actors erzeugen er kann das eigene Verhalten ändern Der Actor in Akka ein Actor kapselt Zustand und Verhalten er kommuniziert ausschließlich über asynchrone Nachrichten und besitzt für den Empfang eine Mailbox ActorRef der Actor kann nur über eine Actor-Referenz angesprochen werden diese Objekte können als Parameter weiter gegeben werden sie verhindern den direkten Zugriff auf den Actor und seinen Zustand Zustand ein Actor hat einen Zustand den er verwaltet (Objektvariablen) um den Zugriff anderer Actors auf seinen Zustand zu verhindern, läuft jeder Akka- Actor in einem eigenen, abgeschirmten, leichtgewichtigen Thread wenn ein Actor abstürzt wird er von seinem Supervisor neu gestartet mit initialem Zustand oder Replay von persistierten Messages Verhalten jedes mal, wenn eine Nachricht verarbeitet wird, wird Sie gegen das Verhalten des Actors gematcht das Verhalten ist eine Funktion/Methode des Actors das Verhalten kann über die Methoden become und unbecome geändert werden ein Restart setzt zunächst wieder das Anfangsverhalten ein 2015 Oliver Braun 2

Mailbox Kommunikation findet nur asynchron statt, in dem einer ActorRef eine Message geschickt wird diese landet in der Mailbox des dazugehörigen Actors die einzige Garantie über die Reihenfolge ist, dass Nachrichten vom gleichen Sender zeitlich geordnet sind verschiedene Mailbox-Implementierungen FIFO (default) priorisierte Mailbox in Akka muss immer die nächste Nachricht verarbeitet werden in manchen Actor-Framework gibt es die Möglichkeit nach der nächsten passenden Nachricht zu suchen Children jeder Actor kann weitere Actors erzeugen für die er automatisch Supervisor ist die Liste der Kinder wird im Kontext des Actors verwaltet Erzeugung und Stoppen der Kinder erfolgt asynchron die Supervisor Strategie legt fest, wie ein Actor auf das Abstürzen seiner Kinder reagiert Supervision wenn ein Actor abstürzt, kann sein Supervisor auf verschiedene Arten reagieren er startet ihn wieder mit dem letzten Zustand er startet ihn wieder mit einem neuen initialen Zustand er stoppt ihn permanent er eskaliert den Fehler in dem er sich selbst abstürzen läßt 2015 Oliver Braun 3

Supervisor-Hierarchie /user: der Guardian Actor Wurzel der von der Anwendung erzeugten Actors /system: der System Guardian Wurzel der System Support Hierarchy /: der Root Guardian Supervisor von /system und /user Supervising Strategies OneForOneStrategy es wird nur der betroffene Actor neu gestartet AllForOneStrategy es werden alle Kinder neu gestartet ActorRefs und Actor-Paths eine Actor-Referenz referenziert einen konkreten Actor über dessen Lebenszyklus ein Actor-Pfad repräsentiert einen Namen hinter dem sich ein Actor verbergen kann kann ohne dazugehörigen Actor erzeugt werden kann nacheinander verschiedene Actors repräsentieren Beispiele für Pfade "akka://my-sys/user/service-a/worker1" "akka.tcp://my-sys@host.example.com:5678/user/service-b" Erzeugen und Finden von Actors Erzeugen direkt unterhalb von /user mit ActorSystem.actorOf Erzeugen unterhalb des aktuellen Actors mit ActorContext.actorOf Zugriff über den Pfad mit ActorSystem.actorSelection bzw. context.actorselection z.b. context.actorselection("../brother") context.actorselection("/user/servicea") 2015 Oliver Braun 4

Actors und das Java Memory Model Zugriff durch mehrere Threads auf Shared Memory auf zwei Weisen wenn eine Nachricht an einen Actor gesendet wird solange Nachrichten unveränderlich sind (und das sollen sie sein), gibt es keine Probleme wenn Nachrichten nicht richtig unveränderlich implementiert sind, kann es vorkommen, dass der Empfänger partiell initialisierte Nachrichten sieht wenn ein Actor beim Verarbeiten einer Nachricht seinen Zustand verändert und kurz darauf, beim Verarbeiten einer weiteren Nachricht, wieder darauf zugreift es ist nicht sichergestellt, dass ein Actor immer im selben Thread ausgeführt wird Eine Actor-Klasse import akka.actor.{actor, ActorLogging, ActorSystem, Props class MyActor extends Actor with ActorLogging { def receive = { case "test" => log.info("received test") case _ => log.info("received unknown message") Props für Actors Props ist eine Konfigurationsklasse um Optionen für die Actor-Erzeugung zu spezifizieren Beispielnutzung: import akka.actor.props val props1 = Props[MyActor] // NO! val props2 = Props(new ActorWithArgs("arg")) val props3 = Props(classOf[ActorWithArgs], "arg") 2015 Oliver Braun 5

Version 2 nur außerhalb von einem Actor nutzen, oder besser: gar nicht Empfohlenes Vorgehen object DemoActor { def props(magicnumber: Int): Props = Props(new DemoActor(magicNumber)) class DemoActor(magicNumber: Int) extends Actor { def receive = { case x: Int => sender()! (x + magicnumber) class SomeOtherActor extends Actor { // Props(new DemoActor(42)) would not be safe context.actorof(demoactor.props(42), "demo") //... Actor API der Actor-Trait definiert eine abstrakte Methode: receive wenn eine Message in receive nicht matcht, wird unhandled aufgerufen (nützlich z.b. zum debuggen) self = Referenz auf die ActorRef des Actors sender = Referenz auf den Sender der letzten Message supervisorstrategy ist redefinierbar context Kinder erzeugen (actorof) Referenzen auf ActorSystem, Vater/Mutter-Actor, Kinder, Actor Lifecycle Unveränderliche Nachrichten Messages können grundsätzlich beliebige Objekte sein Messages müssen unveränderbar (immutable) sein 2015 Oliver Braun 6

Abbildung 1: Quelle: http://akka.io/ 2015 Oliver Braun 7

dies kann der Scala-Compiler nicht überprüfen! daher ist dies eine einzuhaltende Konvention veränderbarer Zustand in Messages würde zu unvorhersehbarem Verhalten führen primitive Datentypen und Strings sind unveränderlich Collections in Scala auch (wenn nicht explizit veränderliche importiert) mit Case-Klassen eigene Messages definieren Nachrichten senden zwei Arten Nachrichten zu senden: 1.! aka tell: fire-and-forget 2.? aka ask: gibt ein Future für die Antwort zurück Tell: Fire-forget bevorzugte Nachrichtenübermittlung blockiert nicht skalierbar Beispiel actorref! msg wenn das von einem Actor gesendet wurde, kann mit sender()! reply einfach geantwortet werden Ask: Send-And-Receive-Future der Sender sendet z.b. val future = actorref? msg der Aufruf blockiert nicht der Empfänger muss eine Antwort mit sender()! reply senden um das Future mit einem Wert zu füllen 2015 Oliver Braun 8

Timeouts für ask wird ein interner Actor erzeugt, der die Antwort behandelt um keine Ressource Leaks zu erzeugen muss ein Timeout gesetzt werden wenn der Timeout abläuft, wird der interne Actor zerstört und eine AskTimeoutException geworfen der Timeout kann explizit oder implizit gesetzt werden import scala.concurrent.duration._ import akka.pattern.ask val future = myactor.ask("hello")(5 seconds) import scala.concurrent.duration._ import akka.util.timeout import akka.pattern.ask implicit val timeout = Timeout(5 seconds) val future = myactor? "hello" Forward Messages Messages mit tell weiter senden, setzt den Absender auf den aktuellen Sender Absender erhalten mit actorref forward msg Actors stoppen stop von system oder context aufrufen, z.b. context stop otheractor an den Actor eine PoisonPill schicken otheractor! PoisonPill akka.pattern.gracefulstop gibt Future zurück Warten auf Stopp möglich Verhalten ändern mit become Ersetzen des Verhaltens auf dem behavior stack. 2015 Oliver Braun 9

class HotSwapActor extends Actor { import context._ def angry: Receive = { case "foo" => sender()! "I am already angry?" case "bar" => become(happy) def happy: Receive = { case "bar" => sender()! "I am already happy :-)" case "foo" => become(angry) def receive = { case "foo" => become(angry) case "bar" => become(happy) Hin und zurück mit become und unbecome Auf den behavior stack pushen und wieder poppen. case object Swap class Swapper extends Actor with ActorLogging { import context._ def receive = { case Swap => log.info("hi") become({ case Swap => log.info("ho") unbecome(), discardold = false) object SwapperApp extends App { val system = ActorSystem("SwapperSystem") val swap = system.actorof(props[swapper], name = "swapper") swap! Swap // logs Hi 2015 Oliver Braun 10

swap! Swap // logs Ho swap! Swap // logs Hi swap! Swap // logs Ho swap! Swap // logs Hi swap! Swap // logs Ho Weiteres Beispiel siehe Livecoding-Repo erzeugt mit activator new Akka minimal-akka-scala-seed und weiter angepasst 2015 Oliver Braun 11