studied computer science at University of Lübeck • started software development w/ JAVA in 1999 at university projects on distributed systems • entered commercial sw dev in 2002 at subshell HH (popfile.de) • moved to work with the Otto Group in 2006 as dev & architect • tech lead of central ecommerce middleware & marketplace platform • since may 2013: protoyping architect & dev at Otto Group BI team
be domain driven think in workflows rather than seq processes use message passing as communication model share-nothing-architecture event-driven communication from top to bottom Follow Reactive Programming Principles
flows and the propagation of change (wikipedia) react to load react to users scalable event-driven resilient responsive react to failure react to events
ago a large application had tens of servers, seconds of response time, hours of offline maintenance and gigabites of data” “scaling was achieved through buying larger servers and concurrent processing via multi-threading.” reducing costs & satisfy customers makes you king ...BUT... (there is always a BUT) “today applications are deployed on everything from mobile ... to ... clusters” “users expect millisecond ... response times and 100% uptime” (reactivemanifesto.org)
... requires change in system design & architecture ... requires change in software development ... requires change in application management ... must have no impact on the business
in architecture objective 2: explore differences in programming effort objective 3: prove applicability in ecommerce (master challenges) objective 4: get a feeling from proven ground
tracking, log, purchases...) • multi-tenancy support, contractor registers for metrics/kpis • let customer select relevant metrics & KPIs • everything is stateless & transparent, share code base • persist all events as raw data stream • provide inbound & outbound API • compute & update selected KPIs in near-realtime
toolkit and runtime for building highly concurrent, distributed, and fault tolerant event-driven applications on the JVM Actors process messages asynchronously using an event-driven receive loop. They raise abstraction level. You focus on workflow instead of low level primitives like threads, locks and socket IO. Actors are location transparent and distributable by design.
and kpis are stateless • technical components (db & cache) located in separate tree • separation of concerns and dedicated supervision strategy • metrics/kpis register their tech components with tree • metrics/kpis forward write events into tree KPI/metric database & cache register
are async by definition … but • requirements exists where sync’ing is required • use Patterns.ask and Await.result ◦ Patterns.ask provide you with Future object ◦ Await.result lets you wait for the process to finish • but be aware that these are BLOCKING calls • upcoming akka-io layer has promising features getting async closer to the frontend
• be aware that you are testing a message passing app • use TestActorRef to instantiate and access actors, for unit testing instance features -> direct access will fail • use JavaTestKit for integration testing
existing code base ◦ implement more kpis/metrics ◦ connector api for writing to different destinations (mongo, memcached, hadoop …) • platform: ◦ implement interconnection framework (research done in iservices project to servce as foundation)