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

Actors, Evolved - CodeMash 2016

Actors, Evolved - CodeMash 2016

Concurrent programming is hard. Concurrent and distributed programming is even harder. But building web applications at scale demands your application to be concurrent and distributed.

Is there a way to make this easy and approachable?

The Actor Model tries to answer just that. 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.

But up until now the actor model remained a rather niche approach and has not become a commonly used practice. This may change 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.

In this session you will learn about the the Actor Model, what’s novel about Virtual Actors, and why it makes distributed application programming a lot simpler. We will also explore the idea of building a microservices architecture on top of Virtual Actors, including some practical lessons we learnt at Gigya doing just that.

Rotem Hermon

January 05, 2016
Tweet

More Decks by Rotem Hermon

Other Decks in Programming

Transcript

  1. Rotem Hermon
    @margolis20
    Actors, Evolved
    Slides: http://j.mp/actors-cm2016

    View Slide

  2. Not THAT
    kind of actors.

    View Slide

  3. Multithreading

    View Slide

  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

    View Slide

  5. Threads are EVIL!

    View Slide

  6. There has to be a
    better way…

    View Slide

  7. The Actor Model
    • Formalized in 1973 (Carl Hewitt)
    • Concurrency by Message Passing
    • Avoids problems of threading and locking

    View Slide

  8. 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

    View Slide

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

    View Slide

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

    View Slide

  11. 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

    View Slide

  12. (Actors are actually
    Nanoservices)

    View Slide

  13. 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)

    View Slide

  14. 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

    View Slide

  15. Akka Fundamentals
    • Actors form an hierarchical structure

    View Slide

  16. Akka Fundamentals
    • Actor Lifecycle
    • Actors needs to be created
    and destroyed
    • Fault handling is done via
    supervision hierarchies
    • Several available supervision
    strategies

    View Slide

  17. 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

    View Slide

  18. Akka Fundamentals
    • Dispatchers
    • Schedules the message delivery to actors (code execution)
    • Can be shared across actors
    • Several types of dispatchers and configurations

    View Slide

  19. Akka Fundamentals
    • Routers
    • An actor that routes messages to other actors
    • Several routing strategies

    View Slide

  20. View Slide

  21. There has to be a
    better way…

    View Slide

  22. 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”

    View Slide

  23. Virtual Actors
    • A Virtual Actor:
    always exists
    and
    never fails

    View Slide

  24. Virtual Actors
    Actor types:
    • Worker
    • An auto-scaling processing unit – multiple instances created by
    framework as needed

    View Slide

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

    View Slide

  26. Virtual Actors
    Actor types:
    • Single Activation
    • Guaranteed to have a single active instance in the cluster
    • A Stateful application middle-tier!

    View Slide

  27. A Short Example…
    URL Shortner Service
    • Shorten (URI)
    • Expand (shortURI)

    View Slide

  28. A Short Example…
    URL Shortner Service
    The Classic Way
    shrt.uri
    Stateless
    Service
    DB
    Cache
    Fetch from DB
    Set in Cache
    Expand
    Return URL
    Get From Cache

    View Slide

  29. A Short Example…
    URL Shortner Service
    The Virtual Actor Way
    shrt.uri
    Expand
    Return URL
    Virtual Actors Service
    Worker URLActor (“shrt.uri”)
    “URL”
    DB
    Fetch from DB

    View Slide

  30. A Short Example…
    URL Shortner Service
    The Virtual Actor Way
    shrt.uri
    Expand
    Return URL
    Virtual Actors Service
    Worker URLActor (“shrt.uri”)
    “URL”

    View Slide

  31. A Short Example…
    URL Shortner Service
    The Virtual Actor Way
    shrt.uri
    Expand
    Return URL
    Virtual Actors Service
    Worker URLActor (“shrt.uri”)
    “URL”
    And logic!

    View Slide

  32. 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

    View Slide

  33. Virtual Actor Framework
    Node
    Node
    Node
    Node
    Node
    Node

    View Slide

  34. Virtual Actor Framework

    View Slide

  35. Virtual Actor Framework
    User
    #21
    Game
    #254
    User
    #73
    Game
    #33

    View Slide

  36. Virtual Actor Framework
    Auto Scaling

    View Slide

  37. Virtual Actor Framework
    Auto Scaling

    View Slide

  38. Virtual Actor Framework
    Auto Scaling

    View Slide

  39. Virtual Actor Framework
    Auto Scaling

    View Slide

  40. Virtual Actor Framework
    Failure Recovery

    View Slide

  41. Virtual Actor Framework
    Failure Recovery

    View Slide

  42. Virtual Actor Framework
    Failure Recovery

    View Slide

  43. 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

    View Slide

  44. Simplified Programming Model

    View Slide

  45. Simplified Programming Model

    View Slide

  46. Use Cases
    • Stateful Services
    • Smart Cache
    • Modeling objects at scale (games, IoT)
    • Protecting resources / Aggregations

    View Slide

  47. 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)

    View Slide

  48. View Slide

  49. 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

    View Slide

  50. 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

    View Slide

  51. View Slide

  52. Some more about Actors
    and (Micro) Services

    View Slide

  53. A single Actors universe?

    View Slide

  54. Back to microservices

    View Slide

  55. Actor Based Microservices
    Service A
    Service B
    ServiceB
    Interface
    Actor
    IMyServiceB

    View Slide

  56. Actor Based Microservices
    Service A
    Service B
    ServiceB
    Interface
    Actor
    IMyServiceB
    ServiceB
    HTTP
    Listener

    View Slide

  57. Actor Based Microservices
    Service A
    Service B
    ServiceB
    Interface
    Actor
    IMyServiceB
    ServiceB
    Client
    ServiceB
    HTTP
    Listener
    JSON over HTTP

    View Slide

  58. View Slide

  59. Thank You!
    Rotem Hermon
    @margolis20
    VP Architecture @ Gigya
    Slides: http://j.mp/actors-cm2016

    View Slide