Baby Steps mit Akka. Dr. Stefan Schlott BeOne Stuttgart GmbH



Ähnliche Dokumente
Schedulingund Thread-Ausführer

Objektorientierte Programmierung

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

Java Kurs für Anfänger Einheit 5 Methoden

3. Stored Procedures und PL/SQL

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Übungen zur Softwaretechnik

Software-Architektur Actors

Entwicklungen bei der Linux Clustersoftware

Integriertes Wissensmanagement an Hochschulen und Bibliotheken

Gesicherte Prozeduren

Lizenzen auschecken. Was ist zu tun?

Internet online Update (Internet Explorer)

Einführung in die Java- Programmierung

Code-Erzeugung aus UML-Klassendiagrammen

Installation von horizont 4 bei Verwendung mehrerer Datenbanken

Handbuch. timecard Connector Version: REINER SCT Kartengeräte GmbH & Co. KG Goethestr Furtwangen

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Übersicht. Nebenläufige Programmierung. Praxis und Semantik. Einleitung. Sequentielle und nebenläufige Programmierung. Warum ist. interessant?

Step by Step Webserver unter Windows Server von Christian Bartl

.procmailrc HOWTO. zur Mailfilterung und Verteilung. Stand:

Client-Server-Beziehungen

Internetnutzung nach Nutzungsart (Teil 1) 1)

Marketing-Leitfaden zum. Evoko Room Manager. Touch. Schedule. Meet.

Sehr geehrte Faktor-IPS Anwender,

Effiziente Administration Ihrer Netzwerkumgebung

Javakurs 2013 Objektorientierung

Benachrichtigungsmöglichkeiten in SMC 2.6

Vorkurs C++ Programmierung

Updatehinweise für die Version forma 5.5.5

Internet Explorer Version 6

Programmieren II. Timer. Vorlesung 11. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester Timer. Sockets.

Avira Professional Security/ Avira Server Security Version 2014 Release-Informationen

Stand vr bank Südthüringen eg 1 von 10. Smart TAN plus Umstellungsanleitung VR-NetWorld Software

Karten-Freischaltung mit dem UNLOCK MANAGER

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Übung: Verwendung von Java-Threads

Möglichkeiten des Parallelbetriebs der VR-NetWorld Software Parallelbetrieb VR-NetWorld Software 4.4x und Version 5.0 ab der 2. Beta!

SharePoint Demonstration

EasyWk DAS Schwimmwettkampfprogramm

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Einstieg in die Informatik mit Java

v2.2 Die innovative Softwarelösung für kundenspezifisches Anrufmanagement Administrator-Handbuch

Grundlagen von Python

Tacx Trainer-Software Version 3.6 Bedienung

Helmut Kleinschmidt. Pflicht ab

YouTube: Video-Untertitel übersetzen

Einführung in die Java- Programmierung

ARAkoll 2013 Dokumentation. Datum:

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

Hinweise zur Installation der USB Treiber für Windows XP 32bit

Teil 1: IT- und Medientechnik

Benutzung der LS-Miniscanner

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2

CMS.R. Bedienungsanleitung. Modul Cron. Copyright CMS.R Revision 1

Man liest sich: POP3/IMAP

Benutzeranleitung Kontoverwaltung

Internet online Update (Mozilla Firefox)

Informationen zur Lizenzierung von Windows Server 2008 R2

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Objektbasierte Entwicklung

Installationsanleitung zu den Programmpaketen MVT und TVT

REACH-CLP-Helpdesk. Zulassung in der Lieferkette. Matti Sander, Bundesanstalt für Arbeitsschutz und Arbeitsmedizin

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

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Version 1.0 [Wiederherstellung der Active Directory] Stand: Professionelle Datensicherung mit SafeUndSave.com. Beschreibung.

Persönliches Adressbuch

Eine Anwendung mit InstantRails 1.7

Basisanforderungen: EVA-Prinzips. Erweiterte Anforderungen: wirtschaftlichen und privaten Alltag.

SEP 114. Design by Contract

Programmablauf für die Batch Wlan Komplettpakete mit Windows CE

Web Interface für Anwender

Grundbegriffe der Informatik

RT Request Tracker. Benutzerhandbuch V2.0. Inhalte

LimeSurvey -Anbindung

Kurzanleitung zur Softwareverteilung von BitDefender Produkten...2

Wir machen neue Politik für Baden-Württemberg

Lexware professional und premium setzen bis einschließlich Version 2012 den Sybase SQL-Datenbankserver

IEA-Passwort-Manager

Computeria Solothurn

SJ OFFICE - Update 3.0

Zustandsgebundene Webservices

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert:

Programmieren in Java

Anleitung zur Software-Installation. ENDEAVOUR 1001 Version Deutsch

Tutorial Moodle 2 Gruppen, Gruppenschlüssel und Gruppierungen

Programmierung mit NQC: Kommunikation zwischen zwei RCX

Technische Alternative elektronische Steuerungsgerätegesellschaft mbh. A-3872 Amaliendorf, Langestr. 124 Tel +43 (0)

Tutorial -

Branching und Merging mit Visual Studio Team System

PowerWeiss Synchronisation

Der Check_MK Micro Core. 22. Oktober 2014

Anleitung zur Inbetriebnahme einer FHZ2000 mit der homeputer CL-Software

Erklärung zum Internet-Bestellschein

Senioren ans Netz. schreiben kurze Texte. Lektion 9 in Themen aktuell 2, nach Übung 7

RESTful Web. Representational State Transfer

INHALT 1. INSTALLATION DES V-MODELL XT UNTER WINDOWS 7 2. INSTALLATION DES V-MODELL XT UNTER WINDOWS VISTA

Ihren Kundendienst effektiver machen

plus Flickerfeld bewegt sich nicht

Effiziente Administration Ihrer Netzwerkumgebung

Transkript:

Baby Steps mit Akka Dr. Stefan Schlott BeOne Stuttgart GmbH

Ordnung am Anfang

Ein Projekt entwickelt sich...

Wird bei uns nie passieren!

Java 5: Executioner Threadpool-Verwaltung Bringt Arbeitspakete zur Ausführung Runnable: Fire and forget Callable: Rückgabewert als Future

Java 7: Fork/Join Ähnlich Executioner, nur mit Work Stealing Statt Blockieren: Abarbeiten anderer Tasks Ideal für Divide-and-Conquer

Keine Kommunikation nach außen Funktioniert prima für in sich abgeschlossene Aufgaben Kommunikation nach außen: Locking...

STM erkennt Änderungen, die in Konflikt stehen STM = Software Transactional Memory Idee: Transaktionen ähnlich wie bei Datenbanken Im Konfliktfall: Abbruch, Rollback, keine Änderungen exponiert Problem bei simpler Retry-Strategie

Dataflow parallelisiert Zugriffe nach Bedarf Idee: Dataflow-Variablen Nur 1x zuweisen Berechnung: Kein mutable State, Zugriff nur auf Konstanten oder andere DataflowVariablen Parallelisierbar, äquivalent zur seriellen Ausführung

Aktoren: Leichtgewichtige, Nachrichten-basierte Prozesse Aktoren: Abgeschlossene Einheit, kein Zugriff auf Interna von außen Kommunikation mit (unveränderbaren!) Nachrichten Immer nur eine Nachricht in Bearbeitung, keine Nebenläufigkeit Mailbox

...schon mal dagewesen?

Akka: Mischung mehrerer Ansätze Kernansatz: Aktoren, Nachrichten STM und Transaktoren Ökosystem 'drumherum, z.b.: Logging Scheduler Event Bus Agents

Akka: All-in-one Skalierungslösung Scale Up Scale Out

Beispiel: Verzeichnisbaum lesen Synchronisation zwischen Laptop und Desktop Verzeichnisse rekursiv abarbieten Manche Verzeichnisse besonders behandeln (z.b. git-repos)

Framework-Rumpf: ActorSystem Initialisieren von Akka: ActorSystem erzeugen ActorSystem system = ActorSystem.create("actors"); (theoretisch mehrere möglich)

Context/System kreiert Aktoren Aktor erzeugen (programmatisch): ActorRef ref = system.actorof( new Props(MyActor.class), "myactor"); Props Factory für Actor-Instanz Aktoren bilden Hierarchie Zugriff immer über ActorRef

Aktoren behandeln Nachrichten UntypedActor Einzelne onreceive -Methode TypedActor Interface-Implementierungs-Paar Aktoren-untypisch, aber schöne Schnittstelle nach außen

Nachrichten senden Ohne Rückgabewert actorref.tell(msg, getself()); Mit Rückgabewert Future<Object> reply = Patterns.ask(actor, msg, timout); getsender().tell(msg); Antwort (auch im Fehlerfall!) muß selbst generiert werden

Code! https://github.com/beone-stuttgart/jfs2012-akka step0 und step1 Untyped Actor Nachrichten senden Aktor-Neustart bei Exception

Akka startet im Fehlerfall Aktoren neu One-for-One (default): Aktor (und dessen Kinder) werden neu gestartet All-for-One: Zusätzlich Neustart der Geschwister Aktuelle Nachricht wird verworfen, restliche Mailbox bleibt erhalten

Lifecycle-Methoden von Aktoren prestart, poststop prerestart: Auf der alten Instanz postrestart: Auf der neuen Instanz

Aktoren-Referenzen immer gültig Referenz: Kein direkter Zugriff auf Instanz!...auch gültig nach Aktor-Restart...auch gültig nach Aktor-Stop (führt dann zum DeadLetter-Aktor)

Verbesserung der Implementierung Trennen zwischen Koordination und eigentlichen Workern Shutdown der Akka-Bibliothek Saubere Nachrichtenobjekte tostring hilft beim Debuggen ungemein

Code! https://github.com/beone-stuttgart/jfs2012-akka step2 Funktioniert prinzipiell Ist aber noch nicht schneller!

Router: (Fast) Aktoren ohne Nachrichten-Behandlung Router: Leiten Nachrichten an untergeordnete Aktoren weiter Nicht transparent: Sind in der Hierarchie sichtbar actorref = getcontext().actorof( new Props(MyActor.class).withRouter( new SmallestMailboxRouter(5)), "myactors");

Aktoren ohne Standardkonstruktor actorref = system.actorof(new Props( new UntypedActorFactory() { @Override public Actor create() { return new MyActor(1,2,3); } }), "myactor"); Mögliche Alternative: akkakonfigurations-datei

Code! https://github.com/beone-stuttgart/jfs2012-akka step3 Speed! \o/

Logging: Blockierende Operation Aufrufe in Logging-Framework: Synchrone Operation...auch System.out blockiert unnötig LoggingAdapter log = Logging.getLogger( getcontext().system(), this); Logging über Nachrichten Handler hierfür austauschbar (z.b. slf4j)

Aktoren sollen nicht blockieren Blockierende Operationen: Durch Nachrichten und Antworten ersetzen Lang dauernde Aktionen: Außerhalb von Akka abhandeln Was tun mit der eigentlichen Synchronisation im Beispiel?

Dispatcher führen Aktoren aus Dispatcher: Motor von Akka Dispatcher (Threads, Message Queues) Default Dispatcher: Wird auch für Interna von Akka verwendet Aktor Aktor Bringt Aktoren zur Ausführung Aktor Verwaltet Nachrichten

Separater Dispatcher für Sync Konfiguration über Akka-Config-File: workerdispatcher { type = PinnedDispatcher executor = "thread-pool-executor" } Auswahl beim Erzeugen des Aktors: actorref = getcontext().actorof( new Props(SyncActor.class). withdispatcher("workerdispatcher"), "sync");

Scheduler für verzögerten / wiederholten Nachrichtenversand Nachricht verzögert senden: system.scheduler().schedule(duration.create(250, TimeUnit.MILLISECONDS), actorref, msg); Nachrichten wiederholt senden: system.scheduler().schedule(duration.zero(), Duration.create(250, TimeUnit.MILLISECONDS), actorref, msg); Regelmäßige Fortschrittsanzeige

Code! https://github.com/beone-stuttgart/jfs2012-akka step4

Ausblick Weitere Features: Definition von Aktoren in Akka-Config Remoting: Lediglich Änderung der URI in Akka-Config! STM/Transaktoren Agents, State Machines, Behavior-Change uvm.

Fazit: Ein Blick auf Akka lohnt! Abstraktion der Parallelisierung Testbare (lineare) Programmierung Definierte Punkte zur Behandlung von Parallelisierungsproblemen Je nach Bedarf: Sehr systemnah bis hoher Abstraktionslevel Akka Cluster, Integration mit nio, etc. läßt auf eine große Zukunft hoffen

Dr. Stefan Schlott Senior Consultant, BeOne Stuttgart GmbH http://www.beone-group.com/ Mail: stefan.schlott@beone-group.com Twitter: @_skyr

Bildnachweise Logos: (C) der entsprechenden Firmen "Linn going for a walk" http://www.flickr.com/photos/tlman/4861217206/ by Tilman Zitzmann CC BY-NC "Wool gathering" http://www.flickr.com/photos/jimmead/6832246175/ by Jim Mead CC BY-SA "after" http://www.flickr.com/photos/crumpart/3158169788/ by crumpart CC BY-NC "P4030004" http://www.flickr.com/photos/chiacomo/2385647786/ by Nathan CC BY "executioner's day off" http://www.flickr.com/photos/54459164@n00/6207683991/ by Johnson Cameraface CC BY-NC-SA "Forks" http://www.flickr.com/photos/harshwcam3/3444273878/ by HarshWCAM3 CC BY-SA "disconnected" http://www.flickr.com/photos/mrdarkroom/5357276454/ by Michael CC BY-NC-ND "DeLorean Time Machine" http://www.flickr.com/photos/animenut/6046397402/ by Alan CC BY-NC-ND "ST 486 DX4" http://www.flickr.com/photos/wimox/5209368794/ by Henry Mühlpfordt CC BY-SA "Server room at CERN" http://www.flickr.com/photos/torkildr/3462606643/ by Torkild Retvedt CC BY-SA "Computer PC Tower Desktop" http://www.flickr.com/photos/jul3sg33/581464364/ by jules:g CC BY-NCSA "Piece of code" http://www.flickr.com/photos/nox_noctis_silentium/2829906581/ by Timitrius CC BY-SA "Matrix Core" http://www.flickr.com/photos/bobloo17/188697388/ by Sourabh Rath CC BY-NC-SA

Lizenz Dieser Foliensatz steht unter einer Creative Commons Namensnennung-Nicht-kommerziell-Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz: http://creativecommons.org/licenses/by-nc-sa/3.0/de/