Dienstag, 1. Dezember 2015

Akka.NET Adventskalender – Tür 1

Worum geht es?

An den nächsten 24 Tagen (heute mitgezählt) kannst Du täglich einen Artikel über Akka.NET hier lesen. Falls Du Dich fragst, was dahinter steckt und wozu man Akka.NET benutzen kann, dann könnte diese Serie für Dich interessant sein. Dich erwarten ein paar Grundlagen, diverse Muster und viele Code Beispiele, die hoffentlich zum Verständnis beitragen. Wenn ich es schaffe, Dein Interesse bis zum Schluss zu behalten und Du selbst mit Akka.NET programmierst, dann habe ich mein Ziel erreicht.

Warum also Akka.NET einsetzen?

Akka.NET baut auf dem Aktor Modell auf (Alternative Beschreibung), das eine sehr elegante Lösung für die diversen Probleme bietet, die sich bei nebenläufigen, parallelen oder verteilten Systemen ergeben. Die zum Teil sehr umfangreichen Grundlagen möchte ich mir an dieser Stelle ersparen, aber wir alle haben vermutlich schon diverse Erfahrungen mit Threads, Prozessen und verteilten Systemen gemacht und so mache Lektion schmerzhaft erfahren müssen. Hinzu kommt leider die Tatsache, dass moderne CPUs unserer Rechner nicht mehr mit zunehmenden Taktfrequenzen aufwarten, sondern eher die Anzahl der Kerne, die zur Ausführung unserer Programme bereitstehen, zunehmen. Während wir vor 10 Jahren typischerweise einen Kern hatten, sind heute selbst in mobilen Computern 8 Kerne denkbar. Insofern müssen wir uns mit Parallel-Programmierung anfreunden, wenn wir unsere Hardware möglichst gut ausnutzen möchten.

Setzt man Werkzeuge wie Akka.NET ein, dann hält sich der Aufwand in puncto "Lernkurve" in Grenzen, sofern man mit Grundlagen der Objektorientierten Programmierung vertraut ist. Erste Ergebnisse sind sehr schnell sichtbar, große Dinge im Rahmen des Machbaren und Skalierung innerhalb einer Maschine (scale-in) ode die Skalierung auf zusätzliche Maschinen (scale-out) aus Sicht des Anwendungs-Entwicklers fast ohne Unterschied.

Wird das Aktor Modell überleben?

Gute Frage. Leider ist meine Glaskugel heute etwas trüb...  Was meiner Meinung nach großes Vertrauen schafft, ist die Tatsache, dass viele Leute auf dieses Modell setzen. Damit kann man zumindest heute diese Technologie als zukunftsträchtig einstufen. Programmiersprachen wie Erlang oder Elixir und viele andere mehr bieten native Unterstützung für Aktoren. So gut wie jede Plattform besitzt zahlreiche Implementierungen davon, meist mehr oder weniger an das in Scala geschriebene Akka angelehnt. Und in der .NET Welt gibt es zwei sehr prominente Kandidaten. Akka.NET ist vom Einstieg her relativ leicht beherrschbar und Microsoft bietet mit Orleans eine interessante quelloffene Alternative sowie mit Service Fabric die kommerzielle Variante, die innerhalb Azure bereits seit Jahren Verwendung findet. Grund genug also, sich mit dem Thema auseinander zu setzen.

Wir sind Reaktiv!

Reaktiv zu programmieren ist vermutlich inzwischen zu einem Modewort geworden. Aber wenn wir Akka.NET einsetzen, dann betreten wir die Welt der reaktiven Programmierung. Dahinter steckt ein Paradigma, welches durch das Reactive Manifesto beschrieben ist. Reaktive Systeme sind (Kurzform)

  • Responsiv und beantworten Anfragen innerhalb gegebener Zeit. Dahinter steckt vor allem der Gedanke, Probleme frühzeitig zu erkennen und geeignet zu reagieren.
  • Belastbar und reagieren selbst unter Last noch vernünftig.
  • Elastisch durch Hinzu- oder Wegnahme bestimmter Resourcen
  • Nachrichtengesteuert. Aktoren senden sich Nachrichten, um sich gegenseitig über bestimmte Zustände oder Ereignisse zu informieren oder Dinge abzufragen bzw. auszulösen.

Was erwartet Dich an den nächsten Tagen?

Die nachfolgenden Artikel sind eine Mixtur aus etwas Theorie, ein paar Grundlagen sowie Entwurfsmuster, die das Leben eines Reaktiven Entwicklers leichter machen. Der Schwerpunkt liegt auf praktischen Experimenten. Wir werden gemeinsam an Beispielen allgemeine Problemstellungen der Reaktiven Programmierung erarbeiten. Allerdings werde ich in dieser Artikel-Serie nicht immer sehr weit in die Details eintauchen. Es gibt ein wunderbares Tutorial, mit dem ich nicht konkurrieren kann und das ich auch nicht kopieren möchte. Du kannst es gerne gleichzeitig zu diesen Artikeln oder einfach anschließend absolvieren – es lohnt sich auf jeden Fall!

Die nachfolgenden Artikel sind als 4 Sprints organisiert, die jeweils an einem Sonntag (bzw. Heilig Abend) enden. Jeder Sprint steht unter jeweils einem eigenen Motto und behandelt die dazu passenden Grundlagen und Muster. Wir werden mit dem Beschnuppern von Akka.NET beginnen, uns dann den Einsatz einzelner Aktoren sowie Mengen an Aktoren ansehen und zum Schluss mit Publish/Subscribe Experimente anstellen.

Was muss ich vorbereiten?

Alle Code Beispiele sind in C# geschrieben (F# wäre auch möglich, mir fehlt jedoch das Know-how dazu). Du brauchst passende Entwicklungswerkzeuge. Je nach Deiner präferierten Plattform kannst Du mit MonoDevelop oder Visual Studio alle Beispiele nachvollziehen. Für größere Beispiele werden rechtzeitig git Repositories bereit gestellt sein.

Also – wenn ich Dich nicht abgeschreckt habe – bereite Deinen Rechner vor und morgen geht es los!

Keine Kommentare:

Kommentar veröffentlichen