Actors, Evolved.

Ed52a75c8cf2f4cb1c2e9d8d161ca771?s=47 Rotem Hermon
December 07, 2016

Actors, Evolved.

The actor model is a novel approach to writing concurrent software. It is based on the concept of small computational units communicating through asynchronous message passing, thus allowing concurrency and scalability while negating a lot of the problems of concurrent programming.

Though the actor model got some adoption with the Erlang language and the Akka framework, it remained a rather niche approach and has not become a commonly used practice.

But this may be changing now with the introduction of “Virtual Actors” - a new abstraction for writing distributed applications. This abstraction was introduced with the Orleans framework by Microsoft and adopted to Java by EA with their Orbit framework.

This talk will include a short introduction to the actor model. We will then explore the Virtual Actors abstraction, how it’s different from the classic model, and why it makes distributed application programming a lot simpler.

Ed52a75c8cf2f4cb1c2e9d8d161ca771?s=128

Rotem Hermon

December 07, 2016
Tweet

Transcript

  1. 4.

    The problem with multi-threaded concurrency • Shared memory and state

    • Race conditions • Locks and deadlocks • Blocking calls • Hard to understand and maintain • Not easily distributed
  2. 5.
  3. 8.

    The Actor Model • Formalized in 1973 (Carl Hewitt) •

    Concurrency by Message Passing • Avoids problems of threading and locking
  4. 9.

    An Actor, Carl Hewitt definition • The fundamental unit of

    computation that embodies: • Processing • Storage • Communication • An actor can: • Create new Actors • Send messages to Actors • Designate how to handle the next message
  5. 10.

    An Actor • Lightweight • Never shares state • Communicates

    through asynchronous messages • Mailbox buffers incoming messages • Processes one message at a time
  6. 11.

    An Actor • Lightweight • Never shares state • Communicates

    through asynchronous messages • Mailbox buffers incoming messages • Processes one message at a time • Single threaded
  7. 12.

    The Actor Model • Higher abstraction level • Simpler concurrent

    programming model • Write single-threaded code (easier to understand) • Concurrency and scale via actor instances • Maximizes CPU utilization • Easy to distribute
  8. 14.

    Leading Classic Actor Implementations • Erlang • Developed in the

    late 90s by Ericsson for HA telecom exchanges • Actors are a core language feature • Akka • A JVM (Scala/Java) Actor framework library • Started by Jonas Bonér in 2009 • Became part of Typesafe (company behind Scala) • .NET port in progress since 2014 (Akka.NET)
  9. 15.

    Akka Fundamentals Actors Contains: • State • Behavior • An

    actor can “switch” its internal behavior • Mailbox • Several types of mailboxes • Children • An actor is “responsible” for other actors it creates - Supervisor
  10. 17.

    Akka Fundamentals • Actor Lifecycle • Actors needs to be

    created and destroyed • Fault handling is done via supervision hierarchies • Several available supervision strategies
  11. 18.

    Akka Fundamentals • Location Transparency • Actors can be created

    remotely • Actors are called via an actor reference, same for local and remote • Akka Clustering for additional features
  12. 19.

    Akka Fundamentals • Dispatchers • Schedules the message delivery to

    actors (code execution) • Can be shared across actors • Several types of dispatchers and configurations
  13. 20.

    Akka Fundamentals • Routers • An actor that routes messages

    to other actors • Several routing strategies
  14. 21.
  15. 23.

    Virtual Actors • A simplified Actors implementation with a higher

    abstraction level • Introduced by Microsoft Research – Project Orleans • Goals: • Make distributed application programming easier • Prefer developer productivity and transparent scalability • “A programming model and runtime for building cloud native services”
  16. 25.

    Virtual Actors Actor types: • Worker • An auto-scaling processing

    unit – multiple instances created by framework as needed
  17. 26.

    Virtual Actors Actor types: • Single Activation • Guaranteed to

    have a single active instance in the cluster
  18. 27.

    Virtual Actors Actor types: • Single Activation • Guaranteed to

    have a single active instance in the cluster • A Stateful application middle-tier!
  19. 29.

    A Short Example… URL Shortener Service The Classic way shrt.uri

    Stateless Service DB Cache Fetch from DB Set in Cache Expand Return URL Get From Cache
  20. 30.

    A Short Example… URL Shortener Service The Virtual Actor way

    shrt.uri Expand Return URL Virtual Actors Service Worker URLActor (“shrt.uri”) “URL” DB Fetch from DB
  21. 31.

    A Short Example… URL Shortener Service The Virtual Actor way

    shrt.uri Expand Return URL Virtual Actors Service Worker URLActor (“shrt.uri”) “URL”
  22. 32.

    A Short Example… URL Shortener Service The Virtual Actor way

    shrt.uri Expand Return URL Virtual Actors Service Worker URLActor (“shrt.uri”) “URL” And logic!
  23. 33.

    Virtual Actor Framework • A runtime providing virtual “actor space”,

    analogues to virtual memory • Handles Actor placement, activation and GC when needed • Balances resources across the cluster, provides elastic scalability
  24. 44.

    Simplified Programming Model • An Actor is a class, implementing

    an interface with asynchronous methods • The caller of an Actor uses the actor interface via a proxy • Messaging is transparent and handled by the runtime. Programmers deal with interfaces and methods
  25. 47.

    Orleans is an important step in furthering a goal of

    the Actor Model that application programmers need not be so concerned with low-level system details. Carl Hewitt, Actor Model of Computation for Scalable Robust Information Systems, 2015
  26. 48.

    Use Cases • Stateful Services • Smart Cache • Modeling

    objects at scale (games, IoT) • Protecting resources / Aggregations
  27. 49.

    Virtual Actor Implementations • Orleans (.NET) • Started by Microsoft

    Research in 2011, in production since 2012 • Service high scale services on Azure (Halo 4 cloud services) • Open sourced in January 2015, active community • Orbit (Java) • Developed by BioWare (division of Electronic Arts) • Inspired by Orleans (“not a port but a re-write”) • Powering online game services • Azure Service Fabric (Reliable Actors)
  28. 50.
  29. 51.

    Virtual Actors (Orleans) • Focus on simplicity and productivity •

    Implicit lifecycle, handled by runtime • Automatic clustering and load balancing • No hierarchy, all actors are directly accessible • Actor interfaces are regular interfaces (standard OOP) Classic Actors (Akka) • Provide full power (exposing complexity) • Explicit lifecycle, handled by programmer • Clustering and load balancing available (but more complex) • Actors are hierarchical and accessible by path • Actors communicates via explicit message classes
  30. 52.

    Virtual Actors (Orleans) Choose if: • Need a simple model

    for distributed applications • Automatic and straightforward scaling • Development team with varied levels of experience Classic Actors (Akka) Choose if: • Need full power – complex topologies, fine grain failure handling, dynamic changing of behavior, explicit message handling • Experienced development team
  31. 53.
  32. 59.

    Actor based microservices Service A Service B ServiceB Interface Actor

    IMyServiceB ServiceB Client ServiceB HTTP Listener JSON over HTTP
  33. 60.