Reactive Programming. Funktionale Programmierung. Christoph Knabe FB VI 10.12.2014

Ähnliche Dokumente
Reactive Programming. Funktionale Programmierung. Christoph Knabe FB VI

Software-Architektur Actors

Monitore. Klicken bearbeiten

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Mikrocontroller Grundlagen. Markus Koch April 2011

Eine Anwendung mit InstantRails 1.7

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

Übung: Verwendung von Java-Threads

Leichte-Sprache-Bilder

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

Architektur Verteilter Systeme Teil 2: Prozesse und Threads

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Haben Sie schon einmal aus einem ScreenCobol Requestor ein Java Programm aufgerufen?

Alle gehören dazu. Vorwort

Eigene Dokumente, Fotos, Bilder etc. sichern

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

e-books aus der EBL-Datenbank

In 12 Schritten zum mobilen PC mit Paragon Drive Copy 11 und Microsoft Windows Virtual PC

Nebenläufige und verteilte Programme CS2301

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

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel

Grundlagen von Python

Zahlen und das Hüten von Geheimnissen (G. Wiese, 23. April 2009)

Tevalo Handbuch v 1.1 vom

Um die Installation zu starten, klicken Sie auf den Downloadlink in Ihrer (Zugangsdaten für Ihre Bestellung vom...)

Der kleine große Unterschied

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

SCHRITT 1: Öffnen des Bildes und Auswahl der Option»Drucken«im Menü»Datei«...2. SCHRITT 2: Angeben des Papierformat im Dialog»Drucklayout«...

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Eva Douma: Die Vorteile und Nachteile der Ökonomisierung in der Sozialen Arbeit

40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst.

Skript und Aufgabensammlung Terme und Gleichungen Mathefritz Verlag Jörg Christmann Nur zum Privaten Gebrauch! Alle Rechte vorbehalten!

Internet Explorer Version 6

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Was ist Sozial-Raum-Orientierung?

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit,

Facharbeit Informatik. Thema:

Windows 10 > Fragen über Fragen

Was meinen die Leute eigentlich mit: Grexit?

Informationen zum Ambulant Betreuten Wohnen in leichter Sprache

Scala kann auch faul sein

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

Schritte 4. Lesetexte 13. Kosten für ein Girokonto vergleichen. 1. Was passt? Ordnen Sie zu.

Arbeit zur Lebens-Geschichte mit Menschen mit Behinderung Ein Papier des Bundesverbands evangelische Behindertenhilfe e.v.

Jeunesse Autopiloten

Software Engineering Klassendiagramme Assoziationen

Kulturelle Evolution 12

Übungen zur Softwaretechnik

Updatehinweise für die Version forma 5.5.5

ONLINE-AKADEMIE. "Diplomierter NLP Anwender für Schule und Unterricht" Ziele

Wichtige Forderungen für ein Bundes-Teilhabe-Gesetz

Wie bekomme ich eine Adresse. Eva Lackinger, Rene Morwind Margot Campbell

Verschlüsselung mit Thunderbird

SAP Memory Tuning. Erfahrungsbericht Fritz Egger GmbH & Co OG. Datenbanken sind unsere Welt

Statuten in leichter Sprache

Vorsorge Vollmacht. Was ist das?

Was man mit dem Computer alles machen kann

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

Qualität und Verlässlichkeit Das verstehen die Deutschen unter Geschäftsmoral!

Local Control Network

4.1 Wie bediene ich das Webportal?

Welchen Weg nimmt Ihr Vermögen. Unsere Leistung zu Ihrer Privaten Vermögensplanung. Wir machen aus Zahlen Werte

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Automatisches Beantworten von - Nachrichten mit einem Exchange Server-Konto

Geld Verdienen im Internet leicht gemacht

TTS - TinyTimeSystem. Unterrichtsprojekt BIBI

Festplatte defragmentieren Internetspuren und temporäre Dateien löschen

Wo finde ich die Software? - Jedem ProLiant Server liegt eine Management CD bei. - Über die Internetseite

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Objektorientierte Programmierung

= i (V) = d 2. v = d! p! n da v 1 = v 2 gilt auch d 1 ÿ p ÿ n 1 = d 2 ÿ p ÿ n 2 (III) p kürzen (Division durch p) d 1 ÿ n 1 = d 2 ÿ n 2 (IV) oder

Einrichten einer Festplatte mit FDISK unter Windows 95/98/98SE/Me

Kompilieren und Linken

Was ich als Bürgermeister für Lübbecke tun möchte

Kontakte mit MS-Outlook als Mail versenden Inhalt

Konzepte der Informatik

AirKey Das Handy ist der Schlüssel

Hardware - Software - Net zwerke

Woche 1: Was ist NLP? Die Geschichte des NLP.

Restore Exchange Server 2007 SP2

Autoresponder Unlimited 2.0

Direktes Versenden von Listen, z.b. Die Liste der Personalkosten (zpkost)

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Einrichten des Elektronischen Postfachs

Lichtbrechung an Linsen

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Oder: Menü Ansicht/Anordnen nach /Kategorien. Sie haben das -Fenster vor sich.

Grundlagen verteilter Systeme

Laborübung - Task-Manager (Verwalten von Prozessen) in Windows 7

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

Fernseher Bild Bildschirm Computergeräte. Festplatte CD DVD Eingabegerät. Computertasten Mauszeiger Cursor rechten Maustaste

SMS/ MMS Multimedia Center

Erklärung zum Internet-Bestellschein

Aber zuerst: Was versteht man unter Stromverbrauch im Standby-Modus (Leerlaufverlust)?

Faxen über das Internet aus Win-CASA so einfach geht s!

Dokumentation für das Spiel Pong

O RGAKO M : Was ist Twitter?

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

CLIQ Solo. Einfache und flexible Sicherheit - die Sie selbst aktualisieren können

Transkript:

Reactive Programming Funktionale Programmierung Christoph Knabe FB VI 10.12.2014

Inhalt Reactive Programming Was ist Reactive Programming Geschichte der asynchronen Programmierung Wo bleibt die Zeit? Wartefreies Arbeiten Probleme von Threads Parallelitätswahn Das Aktorenmodell, Actor-Bibliotheken, Akka Ein Ping-Pong-Beispiel Nachrichten definieren, verarbeiten, senden ActorRef, ActorSystem, ActorContext, Scheduler Zusammenfassung 2

Reactive Programming Was ist Reactive Programming Moderner Architekturstil In Gartner: Hype Cycle for Application Architecture, 2014 als On the Rise eingestuft Beschrieben in The Reactive Manifesto V2 http://www.reactivemanifesto.org/ Deutlich detaillierter in V1 Eigenschaften: Responsive, kurze Antwortzeiten Resilient unverwüstlich, antwortet auch im Fehlerfall Elastic antwortet auch bei hoher Belastung Message Driven basiert auf asynchroner Nachrichtenübermittlung. 3

Reactive Programming Geschichte der asynchronen Programmierung Computer begannen synchron Zuse 22 (1957, ca. 200.000DM): Bild: https://de.wikipedia.org/wiki/zuse_z22#mediaviewer/file:zusez22berlintechnikmuseum.jpg Befehle kamen direkt vom Trommelspeicher 0,6ms pro Befehl (Int-Addition) Kein Zeitverlust, wenn Befehle nur sequentiell Zeitverlust Ø ½ Umdrehung = 9,6 ms bei Sprung CPU schnell, Ein/Ausgabe langsam Multiprogramming (LEO III, 1961) Wartezeiten überbrücken durch Context Switch Multi-Tasking (pdp-8, 1965) Mehrbenutzerbetrieb, unabhängige Prozesse, regelmäßiger Context Switch für Antwortzeitgarantie 4

Wo bleibt die Zeit? Reactive Programming Wartezeiten nach Peter Norvig Latency numbers every programmer should know: 0.5 ns L1 cache reference 7 ns L2 cache reference 100 ns Main memory reference 150 µs SSD random read 10 ms Hard Disk seek 150 ms Send package US-CA NL CA Punktediagramm ansehen in https://gist.github.com/hellerbarde/2843375 Ausprobieren ping java.sun.com 5

Reactive Programming Wie kann ich mir das vorstellen? Übersetzt in menschliche Dimensionen * 10 9 Würden Sie gern so lange warten? http://architects.dzone.com/articles/every-programmer-should-know 0.5 Sek. L1 cache reference 7 Sek. L2 cache reference 100 Sek. Main memory reference 1,7 Tage SSD random read 16,5 Wochen Disk seek 4,8 Jahre Send package US-CA NL CA 6

Wartefreies Arbeiten Reactive Programming Multi-Tasking (z.b. Unix) Unabhängige Prozesse mit je eigenem Speicher Kommunikation durch Mailboxen oder Dateisystem Sicher, aber aufwändig (Speicher, Prozesswechsel) Multithreading In einem Prozess laufen mehrere Threads parallel. Gemeinsamer Arbeitsspeicher und Dateideskriptoren Eigener Registersatz und Call-Stack Viel sparsamer als unabhängige Prozesse Synchronisationsbedarf wegen gemeinsam genutzter Ressourcen. 7

Reactive Programming Viele Köche verderben den Brei In Java parallele Programmierung mit Threads: Thread = sequentieller Ablauffaden parallele Ausführung mehrerer Threads gemeinsame Daten müssen in synchronized-objekt versteckt werden. Folgt C.A.R. Hoare: Monitors: An Operating System Structuring Concept, 1974 Probleme: Inkonsistenzen, wenn Zugriff auf gemeinsame Daten nicht synchronized läuft. Verlangsamung wegen Wartens auf synchronized-objekt Deadlocks bei gegenseitigem Warten Starvation (Verhungern) bei ungerechtem Scheduling und mehreren Wartenden. 8

Im Parallelitätswahn Reactive Programming Auf Java Servlet Platform (JEE): Jeder Request erhält eigenen Thread. Belegt diesen, bis die Antwort abgeliefert ist. Also ca. 150 ms ( 5 Jahre!) Davon das meiste Wartezeit! Ein Thread belegt ca. 1 MB. Parallelitätsbedarf: Google: Wieviel Requests pro Sekunde? Google-Antwortzeit? time wget http://www.google.de?q=semaphor Dividieren 9

Ein Aktor steht höher Reactive Programming Monitor-Konzept kam aus Betriebssystemen. Aktorenmodell kam aus der Künstlichen Intelligenz Carl Hewitt, Peter Bishop, Richard Steiger: A Universal Modular Actor Formalism for Artificial Intelligence, 1973 höherwertige Abstraktion kein geteilter Zustand Aktor-Eigenschaften Läuft parallel zu anderen Aktoren. Reagiert auf Nachrichten sequentiell. Kann Nachrichten versenden. Verpackt eigenen Zustand. Alle zusammen benötigen nur 1 Thread je CPU-Kern. Aufgabe: Wieviel Threads bzw. Actors können Sie im gleichen Arbeitsspeicher erzeugen? 10

Aktor-Praxis Reactive Programming Act-1 (MIT, 1981, Henry Liebermann) Jedes Objekt war ein Aktor. Benutzt für Künstliche Intelligenz. Erlang (Ericsson, 1987, Joe Amstrong) Funktionale Sprache Aktor ist Teil der Sprache. Zustand nur im Aktor Einsatz im Telekommunikationsbereich Äußerst geringe Ausfallquote Vorbild für Scala-Aktoren. 11

Reactive Programming Aktor-Bibliotheken in Scala Package scala.lang.actors Zunächst einzige Aktor-Implementierung in Scala Seit Scala 2.10 deprecated. Lift Actors Wurden im Web-Framework Lift wegen Performanzproblemen der scala.lang.actors eingeführt. Sehr leichtgewichtig Akka Actors Populärste Scala-Aktor-Bibliothek Mit Scala- und Java-API Hierarchisches Aktor-Modell Wenn Aktor ausfällt, Neustart durch Mutter-Aktor 12

Reactive Programming Akka-Aktoren anfordern in build.sbt Scala-Version festlegen: scalaversion := "2.10.4" Abhängigkeit von Akka-Aktoren angeben: librarydependencies ++= Seq( "com.typesafe.akka" %% "akka-actor" % "2.3.5" ) 13

Reactive Programming Wir wollen Ping-Pong spielen Ein Reflector soll Ping-Nachrichten verstehen: object Reflector { case class Ping(id: Int) } Ein Reflector ist ein Actor: class Reflector extends Actor with ActorLogging Ein Actor startet sofort nach Erzeugung. Ein Actor darf Zustand haben: var count = 0 14

Reactive Programming Nachrichtenverarbeitung im Aktor Er erhält seine Nachrichten sequentiell Nachrichtenverarbeitung wirkt wie Transaktion auf seinen Zustand: count += 1 Ein Actor lauscht auf Nachrichten mit receive: def receive: Receive = { case p: Ping => count += 1 log.debug(s"received $p as #$count.") } Typ Receive ist partielle Abbildung Any => Unit 15

Nachrichten senden Reactive Programming Der Thrower muss wissen, wohin Ping senden: class Thrower(reflector: ActorRef) extends Actor with ActorLogging Er soll 100 Ping-Nachrichten senden: for(i <- 1 to 100) { reflector! Reflector.Ping(i) }! sendet asynchron. Man nennt es den Bang-Operator. 16

Aktoren erzeugen Reactive Programming Wir brauchen zuerst ein ActorSystem: Im ActorSystem leben die Aktoren. val system = ActorSystem("PingPong") Erzeugen des parameterlosen Reflector-Aktors: val reflector: ActorRef = system.actorof(props[reflector], "Reflector") Erzeugen des parametrierten Thrower-Aktors: system.actorof( Props(classOf[Thrower], reflector), "Thrower" ) 17

Aktor-Regeln Reactive Programming Nie Referenz auf ein Actor-Objekt weitergeben. Das ActorSystem muss die Fäden in der Hand behalten. val system = ActorSystem("PingPong") Nicht warten im Actor: Kein Thread.sleep()! Keine Aufrufe von blockierenden Methoden wie in java.io oder traditionellen Datenbanktreibern! Verzögerte Aktionen mit Scheduler einplanen. Nur unveränderliche Objekte versenden! 18

Reactive Programming Actor-Methoden im Trait Actor ActorRef auf eigenen Actor liefern: self Bsp. Nachricht an sich selbst senden: self! Nachricht(...) ActorRef auf Absender-Actor liefern: sender Bsp. Antwort an Absender senden: sender! Antwort(...) Kontext des Actors liefern: context Nur im aktuellen Aktor gültig! 19

Reactive Programming Kontext-Methoden im Trait ActorContext Das ActorSystem liefern: context.system Bsp. System herunterfahren: context.system.shutdown() ActorRef auf Mutter-Actor liefern: context.parent Aktuelles Verhalten durch neues ersetzen: context become newreceivemethod Tod eines anderen Aktors überwachen: context watch otheractorref 20

Der Scheduler Reactive Programming Dient zum Einplanen von Nachrichtenlesen und Aktionen. Siehe http://doc.akka.io/docs/akka/2.3.5/scala/scheduler.html Einmalige Nachricht an sich einplanen, Bsp.: import scala.concurrent.duration._ context.system.scheduler.scheduleonce( 5.millis, self, "Shutdown" )(context.dispatcher, self) Regelmäßige Nachricht mittels schedule 21

Zusammenfassung Reactive Programming Reactive Systems: Schnelle, unverwüstliche, skalierbare Systeme basierend auf asynchronem Nachrichtenversand Aktorenmodell: Kein geteilter Zustand Kein Warten, sondern bei Nachricht reagieren mittels asynchronem Nachrichtenversand gut parallelisierbar und skalierbar 22

Quellen Reactive Programming Gartner-Analyse zum Hypecycle in Appl.Arch. 2014 https://www.gartner.com/doc/2810117/hype-cycle-application-architecture- The Reactive Manifesto V2 http://www.reactivemanifesto.org/ höherwertige Abstraktion kein geteilter Zustand Aktor-Eigenschaften Läuft parallel zu anderen Aktoren. Reagiert auf Nachrichten. Kann Nachrichten versenden. Verpackt eigenen Zustand. Benötigen nur 1 Thread je CPU. Auf JVM: Mio. Aktoren vs. Tsd. Threads möglich. 23

Quellen: Vielen Dank