Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Actors, Evolved.

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.

Rotem Hermon

December 07, 2016
Tweet

More Decks by Rotem Hermon

Other Decks in Programming

Transcript

  1. 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. The Actor Model • Formalized in 1973 (Carl Hewitt) •

    Concurrency by Message Passing • Avoids problems of threading and locking
  3. 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
  4. An Actor • Lightweight • Never shares state • Communicates

    through asynchronous messages • Mailbox buffers incoming messages • Processes one message at a time
  5. An Actor • Lightweight • Never shares state • Communicates

    through asynchronous messages • Mailbox buffers incoming messages • Processes one message at a time • Single threaded
  6. 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
  7. 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)
  8. 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
  9. Akka Fundamentals • Actor Lifecycle • Actors needs to be

    created and destroyed • Fault handling is done via supervision hierarchies • Several available supervision strategies
  10. 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
  11. Akka Fundamentals • Dispatchers • Schedules the message delivery to

    actors (code execution) • Can be shared across actors • Several types of dispatchers and configurations
  12. Akka Fundamentals • Routers • An actor that routes messages

    to other actors • Several routing strategies
  13. 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”
  14. Virtual Actors Actor types: • Worker • An auto-scaling processing

    unit – multiple instances created by framework as needed
  15. Virtual Actors Actor types: • Single Activation • Guaranteed to

    have a single active instance in the cluster
  16. Virtual Actors Actor types: • Single Activation • Guaranteed to

    have a single active instance in the cluster • A Stateful application middle-tier!
  17. 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
  18. 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
  19. A Short Example… URL Shortener Service The Virtual Actor way

    shrt.uri Expand Return URL Virtual Actors Service Worker URLActor (“shrt.uri”) “URL”
  20. 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!
  21. 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
  22. 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
  23. 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
  24. Use Cases • Stateful Services • Smart Cache • Modeling

    objects at scale (games, IoT) • Protecting resources / Aggregations
  25. 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)
  26. 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
  27. 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
  28. Actor based microservices Service A Service B ServiceB Interface Actor

    IMyServiceB ServiceB Client ServiceB HTTP Listener JSON over HTTP