Tim in the mirror
@(result: PiApprox)(implicit request: RequestHeader)
Tim Taubner
2013年 1月 11日
Ergebnis:
Pi-Approximation mit Aktoren über ein Cluster mit dynamischem Join/Leave.
Idee übernommen aus
Akka Getting Started Example
Wir wissen
Alle Glieder können unabhängig voneinander berechnet werden, also prinzipiell unendlich horizontal skalierbar - ohne Overhead!
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);
}
}
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);
}
}
A distributed system is one in which the failure of a computer you didn’t even know existed can render your own computer unusable.
Seit Akka 2.1 (Scala 2.10) gibt es Akka Cluster, die alles besser machen!