@(result: PiApprox)(implicit request: RequestHeader) Presentation
Tim in the mirror

Prototypische Annäherung
an π, Akka und Play

Tim Taubner
2013年 1月 11日

Motivation

Ergebnis:
Pi-Approximation mit Aktoren über ein Cluster mit dynamischem Join/Leave. Idee übernommen aus Akka Getting Started Example

Let's start with math!

Wir wissen   n=0(-1)n2n+1=1-13+15-17+...=π4.

Alle Glieder können unabhängig voneinander berechnet werden, also prinzipiell unendlich horizontal skalierbar - ohne Overhead!

Implementation - in Java

Client.java

public void onReceive(Object nachricht) {
  // Pseudo-pattern-match
  if (nachricht instanceof Arbeit) {
    Arbeit arbeit = (Arbeit) nachricht;
    BigDecimal ergebnis = // Ergebnis berechnen:
    kalkuliereSummand(arbeit.von, arbeit.bis, arbeit.genauigkeit);
    // An den Sender (= Server) antworten:
    getSender().tell(new Summand(arbeit.von, arbeit.bis, ergebnis), getSelf());
  } else {
    unhandled(nachricht);
  }
}
          

Server.java

public void onReceive(Object nachricht) {
  if (nachricht instanceof NeuerArbeiter) {
    ActorRef na = ((NeuerArbeiter) nachricht).aktor;
    clients.add(na);
    // Erstmal Arbeit für den Client:
    neueArbeit(na);
  } else if (nachricht instanceof Summand) {
    // Summanden aufaddieren
    Summand s = (Summand) nachricht;
    pi = pi.add(s.ergebnis);
    // Neue Arbeit an den Sender!
    neueArbeit(getSender());
  } else {
    unhandled(nachricht);
  }
}

Netzwerk.java

@demo(result)

Problem

A distributed system is one in which the failure of a computer you didn’t even know existed can render your own computer unusable.
Leslie Lamport

Fehlererkennung und -behebung

Seit Akka 2.1 (Scala 2.10) gibt es Akka Cluster, die alles besser machen!