18
Actor Model

Actor Model pattern for concurrency

  • Upload
    ggarber

  • View
    504

  • Download
    2

Embed Size (px)

DESCRIPTION

Actor model is a pattern to simplify writing efficient concurrent applications

Citation preview

Page 1: Actor Model pattern for concurrency

Actor Model

Page 2: Actor Model pattern for concurrency

Google thinks this is an Actor Model

Page 3: Actor Model pattern for concurrency

Actor model is a pattern to simplify writing efficient concurrent applications

Page 4: Actor Model pattern for concurrency

Concurrency: Writing applications where different parts could run in

parallel

Page 5: Actor Model pattern for concurrency

Traditional approach to concurrency

Multiple threads and Shared Objects

Page 6: Actor Model pattern for concurrency

void Session::onConnectionRequest(conn) { anvil.validateToken(conn.token); this.addConnection(conn);}

Page 7: Actor Model pattern for concurrency

void Session::onConnectionRequest(conn) { anvil.validateToken(conn.token); this.addConnection(conn);}

void Session::onDisconnectionRequest(conn) { this.removeConnection(conn);}

Page 8: Actor Model pattern for concurrency

Publisher::onDisconnect() { scoped_lock lock; if (subscriber != NULL) { subscriber.setPublisher(NULL); }}

Publisher::setSubscriber() { scoped_lock lock; subscriber = NULL;}

Subscriber::onDisconnect() { scoped_lock lock; if (publisher != NULL) { publisher.setSubscriber(NULL); }}

Subscriber::setPublisher() { scoped_lock lock; publisher = NULL;}

Page 9: Actor Model pattern for concurrency

Traditional concurrency

It is difficult to build efficient applications while maintaining consistent state

Page 10: Actor Model pattern for concurrency

Fundamentally, the biggest challenge that SendGrid faces in development is concurrent programming. While what we do isn’t rocket science, doing it at a scale of over 500 million messages per day is extremely challenging (I’ve done rocket science, this is way harder).

Page 11: Actor Model pattern for concurrency

Solution 1: ad-hoc solutions and fix bugs forever

Page 12: Actor Model pattern for concurrency

Solution 2: rendition

Page 13: Actor Model pattern for concurrency

Solution 3: Actor Model

Page 14: Actor Model pattern for concurrency

Actor Model concurrency approach

Asynchronous communication between objects

Object state is only modified from one thread at a specific time

Page 15: Actor Model pattern for concurrency

Multiple threads and Shared Objects

Page 16: Actor Model pattern for concurrency

Actor Model

Page 17: Actor Model pattern for concurrency

Examplesealed trait SessionMessage

case object ConnectMessage extends SessionMessage

case object DisconnectMessage extends SessionMessage

class Session extends Actor with ActorLogging {

def receive = {

case ConnectMessage => log.info("Connecting")

case DisconnectMessage => log.info("Disconnecting")

}

}

object Demo extends App {

val system = ActorSystem("MySystem")

val session = system.actorOf(Props[Session], name="session1")

session ! ConnectMessage

session ! DisconnectMessage

}

Page 18: Actor Model pattern for concurrency

Bonus Track

supervisionpersistencydistribution