IGL S AND MOUNT NS. Taking AKKA to Production

Size: px
Start display at page:

Download "IGL S AND MOUNT NS. Taking AKKA to Production"

Transcription

1 IGL S AND MOUNT NS Taking AKKA to Production

2 THIS TALK Hello! I m Derek Wyatt, Senior Platform Developer at Auvik Networks! and author of Akka Concurrency Scala, Play and Akka form the foundational triad for Auvik Networks core technology. In this talk, we ll discuss how Akka enables the asynchronous design of the system and how it powers the production environment. However, it s not all cherries and moonbeams - we faced a number of challenges, including technological hurdles and more than a few spiky PEBKACs. You ll hear how we overcame these issues, as well as provide some insight into how we re growing our understanding and practices around the Typesafe platform.

3 AUVIK AND THE TYPESAFE STACK Auvik Networks Auvik simplifies monitoring, configuring and automating small and medium sized enterprise networks. We help IT professionals build Networks That Work. TM

4 AUVIK AND THE TYPESAFE STACK Auvik Networks Auvik simplifies monitoring, configuring and automating small and medium sized enterprise networks. We help IT professionals build Networks That Work. TM Auvik is all in with Akka, Scala and Play - our future success is tied to the success of the Typesafe Platform. Akka s design is what powers Auvik s design.

5 30K FOOT ARCHITECTURE Hybrid Cloud SaaS Auvik s solution is half in the cloud and half on site

6 30K FOOT ARCHITECTURE Hybrid Cloud SaaS Auvik s solution is half in the cloud and half on site The cloud provides the bulk of the operational logic and the on site software works on behalf of the cloud

7 30K FOOT ARCHITECTURE Hybrid Cloud SaaS Auvik s solution is half in the cloud and half on site The cloud provides the bulk of the operational logic and the on site software works on behalf of the cloud Technically, the on site software can operate disconnected from the cloud, but eventually it has to connect in, otherwise it s working for nothing

8 30K FOOT ARCHITECTURE Hybrid Cloud SaaS Auvik s solution is half in the cloud and half on site The cloud provides the bulk of the operational logic and the on site software works on behalf of the cloud Technically, the on site software can operate disconnected from the cloud, but eventually it has to connect in, otherwise it s working for nothing While the on site component is an Akka solution, it does not communicate with the cloud using Akka protocols, since these aren t design for the WAN

9 AUVIK USES AKKA Auvik s core design is an Actor-based design Customers exist in distinct Actor subtrees. Tables, On Site connections, the Execution Engine, and many other components are all Actors

10 AUVIK USES AKKA Auvik s core design is an Actor-based design Customers exist in distinct Actor subtrees. Tables, On Site connections, the Execution Engine, and many other components are all Actors Those Actors ensure that our customer design is

11 AUVIK USES AKKA Auvik s core design is an Actor-based design Customers exist in distinct Actor subtrees. Tables, On Site connections, the Execution Engine, and many other components are all Actors Those Actors ensure that our Isolated customer design is

12 AUVIK USES AKKA Auvik s core design is an Actor-based design Customers exist in distinct Actor subtrees. Tables, On Site connections, the Execution Engine, and many other components are all Actors Those Actors ensure that our Isolated customer design is Resilient

13 AUVIK USES AKKA Auvik s core design is an Actor-based design Customers exist in distinct Actor subtrees. Tables, On Site connections, the Execution Engine, and many other components are all Actors Asynchronous Isolated Those Actors ensure that our customer design is Resilient

14 AUVIK USES AKKA Auvik s core design is an Actor-based design Customers exist in distinct Actor subtrees. Tables, On Site connections, the Execution Engine, and many other components are all Actors Asynchronous Isolated Those Actors ensure that our customer design is Non Blocking Resilient

15 AUVIK USES AKKA Auvik s core design is an Actor-based design Customers exist in distinct Actor subtrees. Tables, On Site connections, the Execution Engine, and many other components are all Actors Asynchronous Non Blocking Isolated Resilient Those Actors ensure that our customer design is Reasonable

16 CLOUD DEPLOYMENT The Cluster

17 CLOUD DEPLOYMENT The Cluster We use Akka Clustering to manage our node fabric

18 CLOUD DEPLOYMENT The Cluster We use Akka Clustering to manage our node fabric Everything runs in Amazon, defined by CloudFormation and configured by Chef

19 CLOUD DEPLOYMENT The Cluster We use Akka Clustering to manage our node fabric Everything runs in Amazon, defined by CloudFormation and configured by Chef Akka Clustering doesn t survive across a WAN, so communication with the onsite component is proprietary

20 CLOUD DEPLOYMENT The Cluster We use Akka Clustering to manage our node fabric Everything runs in Amazon, defined by CloudFormation and configured by Chef Akka Clustering doesn t survive across a WAN, so communication with the onsite component is proprietary Backends and Frontends are specified to scale independently

21 CLOUD DEPLOYMENT The Cluster We use Akka Clustering to manage our node fabric Everything runs in Amazon, defined by CloudFormation and configured by Chef Akka Clustering doesn t survive across a WAN, so communication with the onsite component is proprietary Backends and Frontends are specified to scale independently Cluster discovery happens through a well-known seed node (not shown)

22 CHALLENGES AND SURPRISES Cluster Singletons Customers would be great Cluster Singletons, except Cluster Singletons don t load balance

23 CHALLENGES AND SURPRISES Cluster Singletons Inner classes and closures Customers would be great Cluster Singletons, except Cluster Singletons don t load balance Inner classes and closures are awesome, unless they get caught up in messages and force us to serialize the planet

24 CHALLENGES AND SURPRISES Cluster Singletons Inner classes and closures Customers would be great Cluster Singletons, except Cluster Singletons don t load balance Inner classes and closures are awesome, unless they get caught up in messages and force us to serialize the planet Application Debugging asynchronous applications is still hard. Bulkhead your application to protect it from itself

25 CHALLENGES AND SURPRISES Cluster Singletons Inner classes and closures Customers would be great Cluster Singletons, except Cluster Singletons don t load balance Inner classes and closures are awesome, unless they get caught up in messages and force us to serialize the planet Application Performance issues Debugging asynchronous applications is still hard. Bulkhead your application to protect it from itself Tracking down performance issues can be tough - that ForkJoin pool may not be your friend

26 CHALLENGES AND SURPRISES Cluster Singletons Inner classes and closures Customers would be great Cluster Singletons, except Cluster Singletons don t load balance Inner classes and closures are awesome, unless they get caught up in messages and force us to serialize the planet Application Performance issues Debugging asynchronous applications is still hard. Bulkhead your application to protect it from itself Tracking down performance issues can be tough - that ForkJoin pool may not be your friend Play Framework Play doesn t play nicely with Actor applications

27 CHALLENGES AND SURPRISES Cluster Singletons Inner classes and closures Customers would be great Cluster Singletons, except Cluster Singletons don t load balance Inner classes and closures are awesome, unless they get caught up in messages and force us to serialize the planet Application Performance issues Debugging asynchronous applications is still hard. Bulkhead your application to protect it from itself Tracking down performance issues can be tough - that ForkJoin pool may not be your friend Play Framework Future Correctness & Await.result Play doesn t play nicely with Actor applications Await.result is just evil. It s not sorta evil it s the devil with the flu.

28 MANAGING CLUSTER CUSTOMERS Our own Cluster Singleton

29 MANAGING CLUSTER CUSTOMERS Our own Cluster Singleton We created our own way of managing customers as single instances

30 MANAGING CLUSTER CUSTOMERS Our own Cluster Singleton We created our own way of managing customers as single instances The guy that manages the customers is a proper Akka Cluster Singleton

31 MANAGING CLUSTER CUSTOMERS Our own Cluster Singleton We created our own way of managing customers as single instances The guy that manages the customers is a proper Akka Cluster Singleton He manages the instantiation of the customers on-demand

32 MANAGING CLUSTER CUSTOMERS Our own Cluster Singleton We created our own way of managing customers as single instances The guy that manages the customers is a proper Akka Cluster Singleton He manages the instantiation of the customers on-demand He also reacts to Akka Cluster events (new nodes, dead nodes, etc ) and can rebalance customers as required

33 CLOSING OVER THE WORLD trait MyApp { case class Question(s: String) case class Answer(s: String)! class Server extends Actor { def receive = { case Question(q) => sender! Answer(s Sup? $q ) } } class Client(server: ActorRef) extends Actor { server! Question( Dood! ) Scala makes this just too damn easy } } def receive = { case Answer(a) => println(s Got $a ) }

34 CLOSING OVER THE WORLD trait MyApp { case class Question(s: String) case class Answer(s: String)! class Server extends Actor { def receive = { case Question(q) => sender! Answer(s Sup? $q ) } } class Client(server: ActorRef) extends Actor { server! Question( Dood! ) Scala makes this just too damn easy Chances are that Question and } } def receive = { case Answer(a) => println(s Got $a ) } Answer won t serialize

35 CLOSING OVER THE WORLD trait MyApp { case class Question(s: String) case class Answer(s: String)! class Server extends Actor { def receive = { case Question(q) => sender! Answer(s Sup? $q ) } } class Client(server: ActorRef) extends Actor { server! Question( Dood! ) Scala makes this just too damn easy Chances are that Question and } } def receive = { case Answer(a) => println(s Got $a ) } Answer won t serialize And even if they did, they d be huge

36 PLAY DOESN T PLAY NICELY Modular Design

37 PLAY DOESN T PLAY NICELY Modular Design Play doesn t start like just any other app Special developer mode Special run mode Either way, it s special

38 PLAY DOESN T PLAY NICELY Modular Design Play doesn t start like just any other app Special developer mode Special run mode Either way, it s special We want to start like a normal app But not for developers Frontend needs to start backed when the Play Plugin starts But not when it s running in Frontend standalone mode

39 PLAY DOESN T PLAY NICELY Modular Design Play doesn t start like just any other app Special developer mode Special run mode Either way, it s special We want to start like a normal app But not for developers Frontend needs to start backed when the Play Plugin starts But not when it s running in Frontend standalone mode Bootstrapping the configuration differs depending on how we start it

40 PLAY DOESN T PLAY NICELY Modular Design Modes for SBT Play doesn t start like just any other app Special developer mode Special run mode Either way, it s special Main app for Production We want to start like a normal app But not for developers Frontend needs to start backed when the Play Plugin starts But not when it s running in Frontend IDE Configurations standalone mode Bootstrapping the configuration differs depending on how we start it

41 DEBUGGING IS HARD Captain Obvious Akka makes writing concurrent software easier and clearer, but it doesn t necessarily make it easier to debug

42 DEBUGGING IS HARD Captain Obvious Akka makes writing concurrent software easier and clearer, but it doesn t necessarily make it easier to debug We had tons of work being done in the ForkJoin scheduler, but why?

43 DEBUGGING IS HARD Captain Obvious Akka makes writing concurrent software easier and clearer, but it doesn t necessarily make it easier to debug The overhead of the Future had better be worth it! We had tons of work being done in the ForkJoin scheduler, but why?

44 DEBUGGING IS HARD Captain Obvious Akka makes writing concurrent software easier and clearer, but it doesn t necessarily make it easier to debug The overhead of the Future had better be worth it! We had tons of work being done in the ForkJoin scheduler, but why? We had a lot of timeouts occurring, but why?

45 DEBUGGING IS HARD Captain Obvious Akka makes writing concurrent software easier and clearer, but it doesn t necessarily make it easier to debug The overhead of the Future had better be worth it! We had tons of work being done in the ForkJoin scheduler, but why? A chain of N futures can time out, but knowing which one timed out isn t obvious We had a lot of timeouts occurring, but why?

46 DEBUGGING IS HARD Captain Obvious Akka makes writing concurrent software easier and clearer, but it doesn t necessarily make it easier to debug The overhead of the Future had better be worth it! We had tons of work being done in the ForkJoin scheduler, but why? A chain of N futures can time out, but knowing which one timed out isn t obvious We had a lot of timeouts occurring, but why? We had race conditions that shouldn t be there, but why?

47 DEBUGGING IS HARD Captain Obvious Akka makes writing concurrent software easier and clearer, but it doesn t necessarily make it easier to debug The overhead of the Future had better be worth it! We had tons of work being done in the ForkJoin scheduler, but why? We had a lot of timeouts occurring, but why? We had race conditions that shouldn t be there, but why? A chain of N futures can time out, but knowing which one timed out isn t obvious Message ordering guarantees are only between two Actors (adding a Future in the middle can warp your perception)

48 DEBUGGING IS HARD Captain Obvious Akka makes writing concurrent software easier and clearer, but it doesn t necessarily make it easier to debug The overhead of the Future had better be worth it! We had tons of work being done in the ForkJoin scheduler, but why? We had a lot of timeouts occurring, but why? We had race conditions that shouldn t be there, but why? A chain of N futures can time out, but knowing which one timed out isn t obvious Message ordering guarantees are only between two Actors (adding a Future in the middle can warp your perception) We had Exceptions being thrown in messaging processors but messages sent by what?

49 DEBUGGING IS HARD Captain Obvious Akka makes writing concurrent software easier and clearer, but it doesn t necessarily make it easier to debug The overhead of the Future had better be worth it! We had tons of work being done in the ForkJoin scheduler, but why? We had a lot of timeouts occurring, but why? We had race conditions that shouldn t be there, but why? A chain of N futures can time out, but knowing which one timed out isn t obvious Message ordering guarantees are only between two Actors (adding a Future in the middle can warp your perception) We had Exceptions being thrown in messaging processors but messages sent by what? Dropping a crappy message in a mailbox is perfectly correct; processing it is disconnected with queueing it

50 DEBUGGING IS HARD Side effecting Futures

51 DEBUGGING IS HARD Side effecting Futures If you re plumbing Futures to Actors, avoid side-effects Horrendous! dosomedbthing() onsuccess { case result => someactor! result }

52 DEBUGGING IS HARD Side effecting Futures If you re plumbing Futures to Actors, avoid side-effects Horrendous! Errors are lost, and onsuccess has no dosomedbthing() onsuccess { } case result => someactor! result return value

53 DEBUGGING IS HARD Side effecting Futures If you re plumbing Futures to Actors, avoid side-effects Horrendous! Errors are lost, and onsuccess has no dosomedbthing() onsuccess { } case result => someactor! result return value Always treat Futures as message transformers. Make a clear application protocol and stick with it Absolutely Lovely dosomedbthing() map { result => DBResult(result) } recover { case t: Throwable => DBCallFailed(t) } pipeto someactor

54 DEBUGGING IS HARD Side effecting Futures If you re plumbing Futures to Actors, avoid side-effects Horrendous! Errors are lost, and onsuccess has no dosomedbthing() onsuccess { } case result => someactor! result return value Always treat Futures as message transformers. Make a clear application protocol and stick with it This is easy to understand, catches the errors, and composes as well as asynchronous code can Absolutely Lovely dosomedbthing() map { result => DBResult(result) } recover { case t: Throwable => DBCallFailed(t) } pipeto someactor

55 DEBUGGING IS HARD Broken Promises

56 DEBUGGING IS HARD Broken Promises Most of us shouldn t be creating a promise

57 DEBUGGING IS HARD Broken Promises Most of us shouldn t be creating a promise If you do, make damn sure you complete that promise Horrendous! val p = Promise[String]() dosomedbthing() foreach { result => val s = result.get( somestringvalue ) p.success(s) }

58 DEBUGGING IS HARD Broken Promises Most of us shouldn t be creating a promise If you do, make damn sure you complete that promise Horrendous! Using the side effect operations on Futures val p = Promise[String]() dosomedbthing() foreach { result => val s = result.get( somestringvalue ) p.success(s) } (for example) is a pretty bad way to do it

59 DEBUGGING IS HARD Broken Promises Most of us shouldn t be creating a promise If you do, make damn sure you complete that promise Horrendous! Using the side effect operations on Futures val p = Promise[String]() dosomedbthing() foreach { result => val s = result.get( somestringvalue ) p.success(s) } (for example) is a pretty bad way to do it If you want to plumb a Future to a Promise, this is a much better approach Catches Everything val p = Promise[String]() p.completewith(dosomedbthing() map { _.get( somestringvalue ) })

60 DEBUGGING IS HARD Broken Promises Most of us shouldn t be creating a promise If you do, make damn sure you complete that promise Horrendous! Using the side effect operations on Futures val p = Promise[String]() dosomedbthing() foreach { result => val s = result.get( somestringvalue ) p.success(s) } (for example) is a pretty bad way to do it If you want to plumb a Future to a Promise, this is a much better approach Catches Everything val p = Promise[String]() p.completewith(dosomedbthing() map { _.get( somestringvalue ) }) If you re not plumbing a Future to a Promise then you re on your own to make sure it completes don t mess it up

61 DEBUGGING IS HARD The Lost Sender

62 DEBUGGING IS HARD The Lost Sender Think of the sender as the recipient of your response, not the subscriber to your stream

63 DEBUGGING IS HARD The Lost Sender Think of the sender as the recipient of your def receive = { case Subscribe() => addsubscriber(sender) sender! Subscribed() } response, not the subscriber to your stream

64 DEBUGGING IS HARD The Lost Sender Think of the sender as the recipient of your def receive = { case Subscribe() => addsubscriber(sender) sender! Subscribed() } response, not the subscriber to your stream So long as you always call it this way, you re probably OK (although no guarantees) OK publisher! Subscribe() def receive = { case Subscribed() => println( Keen! ) }

65 DEBUGGING IS HARD The Lost Sender Think of the sender as the recipient of your def receive = { case Subscribe() => addsubscriber(sender) sender! Subscribed() } response, not the subscriber to your stream So long as you always call it this way, you re probably OK (although no guarantees) But what if you ask? You re going to subscribe the temporary ask s Actor! OK #Fail publisher! Subscribe() def receive = { case Subscribed() => println( Keen! ) } publisher.ask(subscribe()).mapto[subscribed].foreach(println)

66 DEBUGGING IS HARD The Lost Sender Think of the sender as the recipient of your def receive = { case Subscribe(subscriber) => addsubscriber(subscriber) sender! Subscribed(subscriber) } response, not the subscriber to your stream So long as you always call it this way, you re probably OK (although no guarantees) But what if you ask? You re going to subscribe the temporary ask s Actor! The sender is just too flexible to treat this way, so make it part of your messaging protocol and you re good to go OK OK publisher! Subscribe(self) def receive = { case Subscribed(`self`) => println( Keen! ) } publisher.ask(subscribe(guy)).mapto[subscribed].foreach(println)

67 LESS THAN AWESOME TOOLING Tools aren t quite there

68 LESS THAN AWESOME TOOLING Tools aren t quite there We used JVisualVM 10% Effective

69 LESS THAN AWESOME TOOLING Tools aren t quite there We used JVisualVM We used YourKit 10% Effective 30% Effective

70 LESS THAN AWESOME TOOLING Tools aren t quite there We used JVisualVM We used YourKit We built our own tools 10% Effective 30% Effective 50% Effective Our tools help us debug the proprietary programming language and execution that we ve created

71 LESS THAN AWESOME TOOLING Tools aren t quite there We used JVisualVM We used YourKit We built our own tools 10% Effective 30% Effective 50% Effective Our tools help us debug the proprietary programming language and execution that we ve created That helps us understand how our app is working, but it s also been quite effective to understand how Akka / Java is working

72 LESS THAN AWESOME TOOLING Tools aren t quite there We used JVisualVM We used YourKit We built our own tools 10% Effective 30% Effective 50% Effective Our tools help us debug the proprietary programming language and execution that we ve created That helps us understand how our app is working, but it s also been quite effective to understand how Akka / Java is working Bottom line we d still like better tools! :)

73 LESS THAN AWESOME TOOLING Tools aren t quite there We used JVisualVM We used YourKit We built our own tools 10% Effective 30% Effective 50% Effective Our tools help us debug the proprietary programming language and execution that Where did this Future come from? we ve created That helps us understand how our app is working, but it s also been quite effective to understand how Akka / Java is working Bottom line we d still like better tools! :)

74 LESS THAN AWESOME TOOLING Tools aren t quite there We used JVisualVM We used YourKit We built our own tools 10% Effective 30% Effective 50% Effective Our tools help us debug the proprietary programming language and execution that we ve created Where did this Future come from? What Futures have yet to complete? That helps us understand how our app is working, but it s also been quite effective to understand how Akka / Java is working Bottom line we d still like better tools! :)

75 LESS THAN AWESOME TOOLING Tools aren t quite there We used JVisualVM We used YourKit We built our own tools 10% Effective 30% Effective 50% Effective Our tools help us debug the proprietary programming language and execution that we ve created That helps us understand how our app is Where did this Future come from? What Futures have yet to complete? Is this Actor busy? Blocked? working, but it s also been quite effective to understand how Akka / Java is working Bottom line we d still like better tools! :)

76 LESS THAN AWESOME TOOLING Tools aren t quite there We used JVisualVM We used YourKit We built our own tools 10% Effective 30% Effective 50% Effective Our tools help us debug the proprietary programming language and execution that we ve created That helps us understand how our app is Where did this Future come from? What Futures have yet to complete? Is this Actor busy? Blocked? working, but it s also been quite effective to understand how Akka / Java is working Which Future timed out? Bottom line we d still like better tools! :)

77 LESS THAN AWESOME TOOLING Tools aren t quite there We used JVisualVM We used YourKit We built our own tools 10% Effective 30% Effective 50% Effective Our tools help us debug the proprietary programming language and execution that we ve created That helps us understand how our app is Where did this Future come from? What Futures have yet to complete? Is this Actor busy? Blocked? working, but it s also been quite effective to understand how Akka / Java is working Bottom line we d still like better tools! :) Which Future timed out? Where did this message come from?

78 BULKHEAD! One Thread Pool never works

79 BULKHEAD! One Thread Pool never works When we start, we code quickly, and JDBC calls go on the same thread pool as everything else

80 BULKHEAD! One Thread Pool never works When we start, we code quickly, and JDBC calls go on the same thread pool as everything else Your blocking calls start chewing up threads that Actors need

81 BULKHEAD! One Thread Pool never works When we start, we code quickly, and JDBC calls go on the same thread pool as everything else Your blocking calls start chewing up threads that Actors need So you increase the number of threads, and if they re ForkJoin threads, well we ll get to that

82 BULKHEAD! One Thread Pool never works When we start, we code quickly, and JDBC calls go on the same thread pool as everything else Your blocking calls start chewing up threads that Actors need So you increase the number of threads, and if they re ForkJoin threads, well we ll get to that I think we did it right. Go fast, figure things out, then pull the foundations together once you know what you need done

83 BULKHEAD! One Thread Pool never works When we start, we code quickly, and JDBC calls go on the same thread pool as everything else Your blocking calls start chewing up threads that Actors need So you increase the number of threads, and if they re ForkJoin threads, well we ll get to that I think we did it right. Go fast, figure things out, then pull the foundations together once you know what you need done The ExecutionContext is your friend!

84 THREADS, FUTURES AND FORKJOIN Managing Asynchrony

85 THREADS, FUTURES AND FORKJOIN Managing Asynchrony Got Futures?

86 THREADS, FUTURES AND FORKJOIN Managing Asynchrony Got Futures? Got (lotsa) Threads?

87 THREADS, FUTURES AND FORKJOIN Managing Asynchrony Got Futures? Got (lotsa) Threads? Got ForkJoin?

88 THREADS, FUTURES AND FORKJOIN Managing Asynchrony Got Futures? Got (lotsa) Threads? Got ForkJoin?!!! Haz Problemz!

89 THREADS, FUTURES AND FORKJOIN Managing Asynchrony The ForkJoin Pool s scheduler is O(n) in the number of threads Got Futures? Got (lotsa) Threads? Got ForkJoin?!!! Haz Problemz!

90 THREADS, FUTURES AND FORKJOIN Managing Asynchrony The ForkJoin Pool s scheduler is O(n) in the number of threads Got Futures? If you need lots of threads, for whatever reason, then scheduling work on the FJ Pool Got (lotsa) Threads? becomes a non-trivial part of your computation Got ForkJoin?!!! Haz Problemz!

91 THREADS, FUTURES AND FORKJOIN Managing Asynchrony The ForkJoin Pool s scheduler is O(n) in the number of threads Got Futures? If you need lots of threads, for whatever reason, then scheduling work on the FJ Pool Got (lotsa) Threads? becomes a non-trivial part of your computation Got ForkJoin? Do yourself a favour and configure a standard thread pool executor!!! Haz Problemz!

92 THREADS, FUTURES AND FORKJOIN Managing Asynchrony The ForkJoin Pool s scheduler is O(n) in the number of threads Got Futures? If you need lots of threads, for whatever reason, then scheduling work on the FJ Pool Got (lotsa) Threads? becomes a non-trivial part of your computation Got ForkJoin? Do yourself a favour and configure a standard thread pool executor!!! Haz Problemz! Our throughput doubled when we did that

93 AWAIT AND DIE Await!= synchronized

94 AWAIT AND DIE Await!= synchronized Some people seem to think that an Await.result (on an Actor response) is like a synchronized block

95 AWAIT AND DIE Await!= synchronized Some people seem to think that an Await.result (on an Actor response) is like a synchronized block Some people are silly :)

96 AWAIT AND DIE Await!= synchronized Some people seem to think that an Await.result (on an Actor response) is like a synchronized block Some people are silly :)

97 AWAIT AND DIE Await!= synchronized Some people seem to think that an Await.result (on an Actor response) is like a synchronized block Some people are silly :) If you re waiting for the response to Your Message, how long are you gonna wait?

98 AWAIT AND DIE Await!= synchronized Some people seem to think that an Await.result (on an Actor response) is like a synchronized block Some people are silly :) If you re waiting for the response to Your Message, how long are you gonna wait? You re waiting behind all the other messages in that mailbox, plus fighting for time from all the other Actors in the system

99 AWAIT AND DIE Await!= synchronized Some people seem to think that an Await.result (on an Actor response) is like a synchronized block Some people are silly :) If you re waiting for the response to Your Message, how long are you gonna wait? You re waiting behind all the other messages in that mailbox, plus fighting for time from all the other Actors in the system AND you re chewing up a much-needed thread during that time!

100 AWAIT AND DIE Await!= synchronized Some people seem to think that an Await.result (on an Actor response) is like a synchronized block Some people are silly :) If you re waiting for the response to Your Message, how long are you gonna wait? You re waiting behind all the other messages in Auvik Bear Judges you! that mailbox, plus fighting for time from all the other Actors in the system AND you re chewing up a much-needed thread during that time!

101 OUR RULES OF THUMB

102 OUR RULES OF THUMB Avoid nested classes to help serialization

103 OUR RULES OF THUMB Avoid nested classes to help serialization Never use Await well, you can in tests

104 OUR RULES OF THUMB Avoid nested classes to help serialization Never use Await well, you can in tests Keep Futures as pure as possible; no side-effects

105 OUR RULES OF THUMB Avoid nested classes to help serialization Never use Await well, you can in tests Keep Futures as pure as possible; no side-effects Bulkhead your IO and other nasty code

106 OUR RULES OF THUMB Avoid nested classes to help serialization Never use Await well, you can in tests Keep Futures as pure as possible; no side-effects Bulkhead your IO and other nasty code Choose your thread pool types carefully (ForkJoin?)

107 OUR RULES OF THUMB Avoid nested classes to help serialization Never use Await well, you can in tests Keep Futures as pure as possible; no side-effects Bulkhead your IO and other nasty code Choose your thread pool types carefully (ForkJoin?) sender is the message recipient, not the subscriber to a stream

108 OUR RULES OF THUMB Avoid nested classes to help serialization Never use Await well, you can in tests Keep Futures as pure as possible; no side-effects Bulkhead your IO and other nasty code Choose your thread pool types carefully (ForkJoin?) sender is the message recipient, not the subscriber to a stream Keep things simple and just let it crash

109 OUR RULES OF THUMB Avoid nested classes to help serialization Never use Await well, you can in tests Keep Futures as pure as possible; no side-effects Bulkhead your IO and other nasty code Choose your thread pool types carefully (ForkJoin?) sender is the message recipient, not the subscriber to a stream Keep things simple and just let it crash Ask, How does that work when we re clustered?

110 OUR RULES OF THUMB Avoid nested classes to help serialization Never use Await well, you can in tests Keep Futures as pure as possible; no side-effects Bulkhead your IO and other nasty code Choose your thread pool types carefully (ForkJoin?) sender is the message recipient, not the subscriber to a stream Keep things simple and just let it crash Ask, How does that work when we re clustered? Instrument your code and measure, measure, Measure!

111 WE RE HAPPY! Akka powers our world Our distributed, asynchronous design is an Akka design

112 WE RE HAPPY! Akka powers our world Our distributed, asynchronous design is an Akka design Clustering and scaling out isn t a simple side effect of coding in Akka, but it s heavily simplified

113 WE RE HAPPY! Akka powers our world Our distributed, asynchronous design is an Akka design Clustering and scaling out isn t a simple side effect of coding in Akka, but it s heavily simplified Message-based network-oriented programming is the killer paradigm for the cloud

114 WE RE HAPPY! Akka powers our world Our distributed, asynchronous design is an Akka design Clustering and scaling out isn t a simple side effect of coding in Akka, but it s heavily simplified Message-based network-oriented programming is the killer paradigm for the cloud Akka has allowed us to program defensively by simply adopting the let it crash philosophy

115 WE RE HAPPY! Akka powers our world Our distributed, asynchronous design is an Akka design Clustering and scaling out isn t a simple side effect of coding in Akka, but it s heavily simplified Message-based network-oriented programming is the killer paradigm for the cloud Akka has allowed us to program defensively by simply adopting the let it crash philosophy Basically we re quite happy :)

116 Networks That Work.

INTRODUCTION. 2

INTRODUCTION. 2 1 INTRODUCTION It is of no secret that Android is loved by millions of people around the world. Created and developed by Google, it would be most developers dream job. That being said, there are a lot

More information

CS Programming Languages: Scala

CS Programming Languages: Scala CS 3101-2 - Programming Languages: Scala Lecture 6: Actors and Concurrency Daniel Bauer (bauer@cs.columbia.edu) December 3, 2014 Daniel Bauer CS3101-2 Scala - 06 - Actors and Concurrency 1/19 1 Actors

More information

Combining Concurrency Abstractions

Combining Concurrency Abstractions Combining Concurrency Abstractions Philipp Haller Typesafe, Switzerland Correctly and Efficiently Combining Concurrency Abstractions Philipp Haller Typesafe, Switzerland The Problem Tendency to combine

More information

Executive Summary. It is important for a Java Programmer to understand the power and limitations of concurrent programming in Java using threads.

Executive Summary. It is important for a Java Programmer to understand the power and limitations of concurrent programming in Java using threads. Executive Summary. It is important for a Java Programmer to understand the power and limitations of concurrent programming in Java using threads. Poor co-ordination that exists in threads on JVM is bottleneck

More information

The Actor Model. Towards Better Concurrency. By: Dror Bereznitsky

The Actor Model. Towards Better Concurrency. By: Dror Bereznitsky The Actor Model Towards Better Concurrency By: Dror Bereznitsky 1 Warning: Code Examples 2 Agenda Agenda The end of Moore law? Shared state concurrency Message passing concurrency Actors on the JVM More

More information

Agreement in Distributed Systems CS 188 Distributed Systems February 19, 2015

Agreement in Distributed Systems CS 188 Distributed Systems February 19, 2015 Agreement in Distributed Systems CS 188 Distributed Systems February 19, 2015 Page 1 Introduction We frequently want to get a set of nodes in a distributed system to agree Commitment protocols and mutual

More information

COMP390 (Design &) Implementation

COMP390 (Design &) Implementation COMP390 (Design &) Implementation Phil (& Dave s) rough guide Consisting of some ideas to assist the development of large and small projects in Computer Science (and a chance for me to try out some features

More information

The name of our class will be Yo. Type that in where it says Class Name. Don t hit the OK button yet.

The name of our class will be Yo. Type that in where it says Class Name. Don t hit the OK button yet. Mr G s Java Jive #2: Yo! Our First Program With this handout you ll write your first program, which we ll call Yo. Programs, Classes, and Objects, Oh My! People regularly refer to Java as a language that

More information

Distributed Architectures & Microservices. CS 475, Spring 2018 Concurrent & Distributed Systems

Distributed Architectures & Microservices. CS 475, Spring 2018 Concurrent & Distributed Systems Distributed Architectures & Microservices CS 475, Spring 2018 Concurrent & Distributed Systems GFS Architecture GFS Summary Limitations: Master is a huge bottleneck Recovery of master is slow Lots of success

More information

1: Introduction to Object (1)

1: Introduction to Object (1) 1: Introduction to Object (1) 김동원 2003.01.20 Overview (1) The progress of abstraction Smalltalk Class & Object Interface The hidden implementation Reusing the implementation Inheritance: Reusing the interface

More information

COMP390 (Design &) Implementation

COMP390 (Design &) Implementation COMP390 (Design &) Implementation Phil (& Dave s) rough guide Consisting of some ideas to assist the development of large and small projects in Computer Science (and a chance for me to try out some features

More information

COMP390 (Design &) Implementation

COMP390 (Design &) Implementation COMP390 (Design &) Implementation A rough guide Consisting of some ideas to assist the development of large and small projects in Computer Science (With thanks to Dave Shield) Design & Implementation What

More information

These are notes for the third lecture; if statements and loops.

These are notes for the third lecture; if statements and loops. These are notes for the third lecture; if statements and loops. 1 Yeah, this is going to be the second slide in a lot of lectures. 2 - Dominant language for desktop application development - Most modern

More information

Your Data Demands More NETAPP ENABLES YOU TO LEVERAGE YOUR DATA & COMPUTE FROM ANYWHERE

Your Data Demands More NETAPP ENABLES YOU TO LEVERAGE YOUR DATA & COMPUTE FROM ANYWHERE Your Data Demands More NETAPP ENABLES YOU TO LEVERAGE YOUR DATA & COMPUTE FROM ANYWHERE IN ITS EARLY DAYS, NetApp s (www.netapp.com) primary goal was to build a market for network-attached storage and

More information

Everything you need to know about cloud. For companies with people in them

Everything you need to know about cloud. For companies with people in them Everything you need to know about cloud For companies with people in them You used to know where you stood with the word cloud. It meant those fluffy things floating above you, bringing shade and rain,

More information

Akka: Simpler Concurrency, Scalability & Fault-tolerance through Actors. Jonas Bonér Viktor Klang

Akka: Simpler Concurrency, Scalability & Fault-tolerance through Actors. Jonas Bonér Viktor Klang Akka: Simpler Concurrency, Scalability & Fault-tolerance through Actors Jonas Bonér Viktor Klang We believe that... Writing correct concurrent applications is too hard Scaling out applications is too hard

More information

Replication. Feb 10, 2016 CPSC 416

Replication. Feb 10, 2016 CPSC 416 Replication Feb 10, 2016 CPSC 416 How d we get here? Failures & single systems; fault tolerance techniques added redundancy (ECC memory, RAID, etc.) Conceptually, ECC & RAID both put a master in front

More information

CS 6112 (Fall 2011) Foundations of Concurrency

CS 6112 (Fall 2011) Foundations of Concurrency . CS 6112 (Fall 2011) Foundations of Concurrency. 20 October 2011 Scribe: Alec Story.. Actors are a fairly old idea for concurrency, but a lot of the old work is confusing and hard to read. Actors have

More information

The Benefits of SMS as a Marketing and Communications Channel From The Chat Bubble written by Michael

The Benefits of SMS as a Marketing and Communications Channel From The Chat Bubble written by Michael The Benefits of SMS as a Marketing and Communications Channel 1 Why companies and organizations should do SMS. We re going to talk through from an organization or marketers point of view, what SMS is good

More information

The compiler is spewing error messages.

The compiler is spewing error messages. Appendix B Debugging There are a few different kinds of errors that can occur in a program, and it is useful to distinguish between them in order to track them down more quickly. Compile-time errors are

More information

MAKING MONEY ON OPENSTACK. Boris

MAKING MONEY ON OPENSTACK. Boris MAKING MONEY ON OPENSTACK Boris Renski b@renski.com @zer0tweets China and Russia are alike! 2 We love gymnastics! 3 We love chess! 4 and we love money! 5 6 When most people think of OpenSt ack, they imagine

More information

CS 162 Operating Systems and Systems Programming Professor: Anthony D. Joseph Spring Lecture 21: Network Protocols (and 2 Phase Commit)

CS 162 Operating Systems and Systems Programming Professor: Anthony D. Joseph Spring Lecture 21: Network Protocols (and 2 Phase Commit) CS 162 Operating Systems and Systems Programming Professor: Anthony D. Joseph Spring 2003 Lecture 21: Network Protocols (and 2 Phase Commit) 21.0 Main Point Protocol: agreement between two parties as to

More information

Amyyon customers can t wait to get their hands on it s new application, developed in Uniface.

Amyyon customers can t wait to get their hands on it s new application, developed in Uniface. customers can t wait to get their hands on it s new application, developed in Uniface. 1 CUSTOMER SECTOR Information Technology COUNTRY Netherlands CHALLENGE Migrate the rich functionality of a client/server

More information

Supplemental Handout: Exceptions CS 1070, Spring 2012 Thursday, 23 Feb 2012

Supplemental Handout: Exceptions CS 1070, Spring 2012 Thursday, 23 Feb 2012 Supplemental Handout: Exceptions CS 1070, Spring 2012 Thursday, 23 Feb 2012 1 Objective To understand why exceptions are useful and why Visual Basic has them To gain experience with exceptions and exception

More information

Intro. Scheme Basics. scm> 5 5. scm>

Intro. Scheme Basics. scm> 5 5. scm> Intro Let s take some time to talk about LISP. It stands for LISt Processing a way of coding using only lists! It sounds pretty radical, and it is. There are lots of cool things to know about LISP; if

More information

D Programming Language

D Programming Language Group 14 Muazam Ali Anil Ozdemir D Programming Language Introduction and Why D? It doesn t come with a religion this is written somewhere along the overview of D programming language. If you actually take

More information

Notes from a Short Introductory Lecture on Scala (Based on Programming in Scala, 2nd Ed.)

Notes from a Short Introductory Lecture on Scala (Based on Programming in Scala, 2nd Ed.) Notes from a Short Introductory Lecture on Scala (Based on Programming in Scala, 2nd Ed.) David Haraburda January 30, 2013 1 Introduction Scala is a multi-paradigm language that runs on the JVM (is totally

More information

12 Key Steps to Successful Marketing

12 Key Steps to Successful  Marketing 12 Key Steps to Successful Email Marketing Contents Introduction 3 Set Objectives 4 Have a plan, but be flexible 4 Build a good database 5 Should I buy data? 5 Personalise 6 Nail your subject line 6 Use

More information

Goals Pragmukko features:

Goals Pragmukko features: Pragmukko Pragmukko Pragmukko is an Akka-based framework for distributed computing. Originally, it was developed for building an IoT solution but it also fit well for many other cases. Pragmukko treats

More information

Building High Performance Apps using NoSQL. Swami Sivasubramanian General Manager, AWS NoSQL

Building High Performance Apps using NoSQL. Swami Sivasubramanian General Manager, AWS NoSQL Building High Performance Apps using NoSQL Swami Sivasubramanian General Manager, AWS NoSQL Building high performance apps There is a lot to building high performance apps Scalability Performance at high

More information

Chapter 1: Distributed Information Systems

Chapter 1: Distributed Information Systems Chapter 1: Distributed Information Systems Contents - Chapter 1 Design of an information system Layers and tiers Bottom up design Top down design Architecture of an information system One tier Two tier

More information

Scaling out with Akka Actors. J. Suereth

Scaling out with Akka Actors. J. Suereth Scaling out with Akka Actors J. Suereth Agenda The problem Recap on what we have Setting up a Cluster Advanced Techniques Who am I? Author Scala In Depth, sbt in Action Typesafe Employee Big Nerd ScalaDays

More information

Programming Paradigms for Concurrency Lecture 10 The Actor Paradigm

Programming Paradigms for Concurrency Lecture 10 The Actor Paradigm Programming Paradigms for Concurrency Lecture 10 The Actor Paradigm Based on a course on Principles of Reactive Programming by Martin Odersky, Erik Meijer, Roland Kuhn Modified by Thomas Wies New York

More information

Building Reactive Applications with Akka

Building Reactive Applications with Akka Building Reactive Applications with Akka Jonas Bonér Typesafe CTO & co-founder @jboner This is an era of profound change. Implications are massive, change is unavoidable Users! Users are demanding richer

More information

Last Time. Internet in a Day Day 2 of 1. Today: TCP and Apps

Last Time. Internet in a Day Day 2 of 1. Today: TCP and Apps Internet in a Day Day 2 of 1 Carnegie Mellon University 15-440, Distributed Systems Last Time Modularity, Layering, and Decomposition Example: UDP layered on top of IP to provide application demux ( ports

More information

Apache Ignite Best Practices: Cluster Topology Management and Data Replication

Apache Ignite Best Practices: Cluster Topology Management and Data Replication Apache Ignite Best Practices: Cluster Topology Management and Data Replication Ivan Rakov Apache Ignite Committer Senior Software Engineer in GridGain Systems Too many data? Distributed Systems to the

More information

Gustavo Alonso, ETH Zürich. Web services: Concepts, Architectures and Applications - Chapter 1 2

Gustavo Alonso, ETH Zürich. Web services: Concepts, Architectures and Applications - Chapter 1 2 Chapter 1: Distributed Information Systems Gustavo Alonso Computer Science Department Swiss Federal Institute of Technology (ETHZ) alonso@inf.ethz.ch http://www.iks.inf.ethz.ch/ Contents - Chapter 1 Design

More information

Persistent Storage with Docker in production - Which solution and why?

Persistent Storage with Docker in production - Which solution and why? Persistent Storage with Docker in production - Which solution and why? Cheryl Hung 2013-2017 StorageOS Ltd. All rights reserved. Cheryl 2013-2017 StorageOS Ltd. All rights reserved. 2 Why do I need storage?

More information

Stanko Tadić

Stanko Tadić State of modern JavaScript development 04.02.2017. Stanko Tadić HELLO, MY NAME IS STANKO TADIĆ and I m a Principal Developer at Work & Co. I love development, music and cartoons. You might say I m a geek.

More information

Devising a Cloud Strategy that Doesn t Cast a Shadow on App Performance

Devising a Cloud Strategy that Doesn t Cast a Shadow on App Performance Devising a Cloud Strategy that Doesn t Cast a Shadow on App Performance By Nick Cavalancia Performance is the penalty that you pay in exchange for the agility, flexibility and cost savings of the cloud.

More information

Identifying Workloads for the Cloud

Identifying Workloads for the Cloud Identifying Workloads for the Cloud 1 This brief is based on a webinar in RightScale s I m in the Cloud Now What? series. Browse our entire library for webinars on cloud computing management. Meet our

More information

streams streaming data transformation á la carte

streams streaming data transformation á la carte streams streaming data transformation á la carte Deputy CTO #protip Think of the concept of streams as ephemeral, time-dependent, sequences of elements possibly unbounded in length in essence: transformation

More information

Lecture 21: The Many Hats of Scala: OOP 10:00 AM, Mar 14, 2018

Lecture 21: The Many Hats of Scala: OOP 10:00 AM, Mar 14, 2018 CS18 Integrated Introduction to Computer Science Fisler, Nelson Lecture 21: The Many Hats of Scala: OOP 10:00 AM, Mar 14, 2018 Contents 1 Mutation in the Doghouse 1 1.1 Aside: Access Modifiers..................................

More information

ECE 587 Hardware/Software Co-Design Lecture 07 Concurrency in Practice Shared Memory I

ECE 587 Hardware/Software Co-Design Lecture 07 Concurrency in Practice Shared Memory I ECE 587 Hardware/Software Co-Design Spring 2018 1/15 ECE 587 Hardware/Software Co-Design Lecture 07 Concurrency in Practice Shared Memory I Professor Jia Wang Department of Electrical and Computer Engineering

More information

What is version control? (discuss) Who has used version control? Favorite VCS? Uses of version control (read)

What is version control? (discuss) Who has used version control? Favorite VCS? Uses of version control (read) 1 For the remainder of the class today, I want to introduce you to a topic we will spend one or two more classes discussing and that is source code control or version control. What is version control?

More information

6.189 Project 1. Readings. What to hand in. Project 1: The Game of Hangman. Get caught up on all the readings from this week!

6.189 Project 1. Readings. What to hand in. Project 1: The Game of Hangman. Get caught up on all the readings from this week! 6.189 Project 1 Readings Get caught up on all the readings from this week! What to hand in Print out your hangman code and turn it in Monday, Jaunary 10 at 2:10 PM. Be sure to write your name and section

More information

The Idiot s Guide to Quashing MicroServices. Hani Suleiman

The Idiot s Guide to Quashing MicroServices. Hani Suleiman The Idiot s Guide to Quashing MicroServices Hani Suleiman The Promised Land Welcome to Reality Logging HA/DR Monitoring Provisioning Security Debugging Enterprise frameworks Don t Panic WHOAMI I wrote

More information

Philipp Wille. Beyond Scala s Standard Library

Philipp Wille. Beyond Scala s Standard Library Scala Enthusiasts BS Philipp Wille Beyond Scala s Standard Library OO or Functional Programming? Martin Odersky: Systems should be composed from modules. Modules should be simple parts that can be combined

More information

Clickbank Domination Presents. A case study by Devin Zander. A look into how absolutely easy internet marketing is. Money Mindset Page 1

Clickbank Domination Presents. A case study by Devin Zander. A look into how absolutely easy internet marketing is. Money Mindset Page 1 Presents A case study by Devin Zander A look into how absolutely easy internet marketing is. Money Mindset Page 1 Hey guys! Quick into I m Devin Zander and today I ve got something everybody loves! Me

More information

Chapter01.fm Page 1 Monday, August 23, :52 PM. Part I of Change. The Mechanics. of Change

Chapter01.fm Page 1 Monday, August 23, :52 PM. Part I of Change. The Mechanics. of Change Chapter01.fm Page 1 Monday, August 23, 2004 1:52 PM Part I The Mechanics of Change The Mechanics of Change Chapter01.fm Page 2 Monday, August 23, 2004 1:52 PM Chapter01.fm Page 3 Monday, August 23, 2004

More information

Consistency. CS 475, Spring 2018 Concurrent & Distributed Systems

Consistency. CS 475, Spring 2018 Concurrent & Distributed Systems Consistency CS 475, Spring 2018 Concurrent & Distributed Systems Review: 2PC, Timeouts when Coordinator crashes What if the bank doesn t hear back from coordinator? If bank voted no, it s OK to abort If

More information

1 Achieving IND-CPA security

1 Achieving IND-CPA security ISA 562: Information Security, Theory and Practice Lecture 2 1 Achieving IND-CPA security 1.1 Pseudorandom numbers, and stateful encryption As we saw last time, the OTP is perfectly secure, but it forces

More information

Composable Concurrency in Perl 6. Jonathan Worthington

Composable Concurrency in Perl 6. Jonathan Worthington Composable Concurrency in Perl 6 Jonathan Worthington A short history of pain I ve spent a lot of time working with C# and.net. There, multi-threaded apps are common, partly because you can t tie up the

More information

Assignment 1c: Compiler organization and backend programming

Assignment 1c: Compiler organization and backend programming Assignment 1c: Compiler organization and backend programming Roel Jordans 2016 Organization Welcome to the third and final part of assignment 1. This time we will try to further improve the code generation

More information

Microservices, Messaging and Science Gateways. Review microservices for science gateways and then discuss messaging systems.

Microservices, Messaging and Science Gateways. Review microservices for science gateways and then discuss messaging systems. Microservices, Messaging and Science Gateways Review microservices for science gateways and then discuss messaging systems. Micro- Services Distributed Systems DevOps The Gateway Octopus Diagram Browser

More information

Azure Integration Services

Azure Integration Services Azure Integration Services 2018 Microsoft Corporation. All rights reserved. This document is provided "as-is." Information and views expressed in this document, including URL and other Internet Web site

More information

Mo Metrics, Mo Problems? Our guide to marketing metrics

Mo Metrics, Mo Problems? Our guide to  marketing metrics Mo Metrics, Mo Problems? Our guide to email marketing metrics Number crunching isn t for everyone, so it s not surprising to find many marketers often avoid any kind of in-depth analysis on their email

More information

As a programmer, you know how easy it can be to get lost in the details

As a programmer, you know how easy it can be to get lost in the details Chapter 1 Congratulations, Your Problem Has Already Been Solved In This Chapter Introducing design patterns Knowing how design patterns can help Extending object-oriented programming Taking a look at some

More information

Why I still develop synchronous web in the asyncio era. April 7th, 2017 Giovanni Barillari - pycon otto - Firenze, Italy

Why I still develop synchronous web in the asyncio era. April 7th, 2017 Giovanni Barillari - pycon otto - Firenze, Italy Why I still develop synchronous web in the asyncio era April 7th, 2017 Giovanni Barillari - pycon otto - Firenze, Italy Who am I? I m Gio! pronounced as Joe trust me, I m a physicist :) code principally

More information

Favoring Isolated Mutability The Actor Model of Concurrency. CSCI 5828: Foundations of Software Engineering Lecture 24 04/11/2012

Favoring Isolated Mutability The Actor Model of Concurrency. CSCI 5828: Foundations of Software Engineering Lecture 24 04/11/2012 Favoring Isolated Mutability The Actor Model of Concurrency CSCI 5828: Foundations of Software Engineering Lecture 24 04/11/2012 1 Goals Review the material in Chapter 8 of the Concurrency textbook that

More information

Reactive Application Development

Reactive Application Development SAMPLE CHAPTER Reactive Application Development by Duncan DeVore, Sean Walsh and Brian Hanafee Sample Chapter 2 Copyright 2018 Manning Publications brief contents PART 1 FUNDAMENTALS... 1 1 What is a reactive

More information

15-498: Distributed Systems Project #1: Design and Implementation of a RMI Facility for Java

15-498: Distributed Systems Project #1: Design and Implementation of a RMI Facility for Java 15-498: Distributed Systems Project #1: Design and Implementation of a RMI Facility for Java Dates of Interest Assigned: During class, Friday, January 26, 2007 Due: 11:59PM, Friday, February 13, 2007 Credits

More information

Memory Management: Virtual Memory and Paging CS 111. Operating Systems Peter Reiher

Memory Management: Virtual Memory and Paging CS 111. Operating Systems Peter Reiher Memory Management: Virtual Memory and Paging Operating Systems Peter Reiher Page 1 Outline Paging Swapping and demand paging Virtual memory Page 2 Paging What is paging? What problem does it solve? How

More information

DER GOBBLE. Good Secure Crypto Wallet Practices. What is your wallet?

DER GOBBLE. Good Secure Crypto Wallet Practices. What is your wallet? DER GOBBLE Good Secure Crypto Wallet Practices When it comes to crypto currencies and securing your money, the absolute best 99% guaranteed security for your wallets is YOU. You are the one that will expose

More information

Microservices. Webservices with Scala (II) Microservices

Microservices. Webservices with Scala (II) Microservices Microservices Webservices with Scala (II) Microservices 2018 1 Content Deep Dive into Play2 1. Database Access with Slick 2. Database Migration with Flyway 3. akka 3.1. overview 3.2. akka-http (the http

More information

Swift 5, ABI Stability and

Swift 5, ABI Stability and Swift 5, ABI Stability and Concurrency @phillfarrugia Important Documents Concurrency Manifesto by Chris Lattner https: /gist.github.com/lattner/ 31ed37682ef1576b16bca1432ea9f782 Kicking off Concurrency

More information

Think like an Elm developer

Think like an Elm developer Think like an Elm developer Piper Niehaus Denver, CO, USA Backpacker / skier Nonprofit board chair Software Engineer at Pivotal Pivotal Tracker team Elm in Production since 2016 Internal Products and Services

More information

Building a Scalable Evaluation Engine for Presto. Florian Zitzelsberger Pixar Animation Studios

Building a Scalable Evaluation Engine for Presto. Florian Zitzelsberger Pixar Animation Studios Building a Scalable Evaluation Engine for Presto Florian Zitzelsberger Pixar Animation Studios Credits FlorianSauer JohnLoy MattCollins IanJones George ElKoura AliciaMooty AdamWoodbury Guido Quaroni Steve

More information

We will talk about Alt-Tab from the usability perspective. Think about: - Is it learnable? - Is it efficient? - What about errors and safety?

We will talk about Alt-Tab from the usability perspective. Think about: - Is it learnable? - Is it efficient? - What about errors and safety? 1 This lecture s candidate for the Hall of Fame & Shame is the Alt-Tab window switching interface in Microsoft Windows. This interface has been copied by a number of desktop systems, including KDE, Gnome,

More information

PRINCIPLES OF SOFTWARE BIM209DESIGN AND DEVELOPMENT 00. WELCOME TO OBJECTVILLE. Speaking the Language of OO

PRINCIPLES OF SOFTWARE BIM209DESIGN AND DEVELOPMENT 00. WELCOME TO OBJECTVILLE. Speaking the Language of OO PRINCIPLES OF SOFTWARE BIM209DESIGN AND DEVELOPMENT 00. WELCOME TO OBJECTVILLE Speaking the Language of OO COURSE INFO Instructor : Alper Bilge TA : Gökhan Çıplak-Ahmet Alkılınç Time : Tuesdays 2-5pm Location

More information

DOCKER 101 FOR JS AFFICIONADOS. Christian Ulbrich, Zalari UG

DOCKER 101 FOR JS AFFICIONADOS. Christian Ulbrich, Zalari UG DOCKER 101 FOR JS AFFICIONADOS Christian Ulbrich, Zalari UG AGENDA Docker what is all the craze about? Docker is hard One-Liners Orchestration Outlook Links DOCKER WTF? DOCKER WTF? Docker is light-weight

More information

Aspirin as a Service: Using the Cloud to Cure Security Headaches

Aspirin as a Service: Using the Cloud to Cure Security Headaches SESSION ID: CSV-T10 Aspirin as a Service: Using the Cloud to Cure Security Headaches Bill Shinn Principle Security Solutions Architect Amazon Web Services Rich Mogull CEO Securosis @rmogull Little. Cloudy.

More information

Threads and Locks, Part 2. CSCI 5828: Foundations of Software Engineering Lecture 08 09/18/2014

Threads and Locks, Part 2. CSCI 5828: Foundations of Software Engineering Lecture 08 09/18/2014 Threads and Locks, Part 2 CSCI 5828: Foundations of Software Engineering Lecture 08 09/18/2014 1 Goals Cover the material presented in Chapter 2 of our concurrency textbook In particular, selected material

More information

David Bernstein June 2012

David Bernstein June 2012 David Bernstein IEEE Cloud Standards P2300 Series Founder and Working Group Chair, European Commission FP7 einfrastructure Expert/Roadmap Group, U.S. National Institute of Standards, Cloud Computing Project

More information

Grand Central Dispatch and NSOperation. CSCI 5828: Foundations of Software Engineering Lecture 28 12/03/2015

Grand Central Dispatch and NSOperation. CSCI 5828: Foundations of Software Engineering Lecture 28 12/03/2015 Grand Central Dispatch and NSOperation CSCI 5828: Foundations of Software Engineering Lecture 28 12/03/2015 1 Credit Where Credit Is Due Most of the examples in this lecture were inspired by example code

More information

Introduction to Concurrent Software Systems. CSCI 5828: Foundations of Software Engineering Lecture 08 09/17/2015

Introduction to Concurrent Software Systems. CSCI 5828: Foundations of Software Engineering Lecture 08 09/17/2015 Introduction to Concurrent Software Systems CSCI 5828: Foundations of Software Engineering Lecture 08 09/17/2015 1 Goals Present an overview of concurrency in software systems Review the benefits and challenges

More information

Scala Actors. Scalable Multithreading on the JVM. Philipp Haller. Ph.D. candidate Programming Methods Lab EPFL, Lausanne, Switzerland

Scala Actors. Scalable Multithreading on the JVM. Philipp Haller. Ph.D. candidate Programming Methods Lab EPFL, Lausanne, Switzerland Scala Actors Scalable Multithreading on the JVM Philipp Haller Ph.D. candidate Programming Methods Lab EPFL, Lausanne, Switzerland The free lunch is over! Software is concurrent Interactive applications

More information

Amber Weyland: [to cameraman] Just hold it there so we can see Mollie.

Amber Weyland: [to cameraman] Just hold it there so we can see Mollie. Interview Transcript Interviewer: Amber Weyland Interviewee: Mollie Hummer Cameraman: Christopher Smith [friend to both] Date: March 22, 2010 Beginning time of interview: 2:30pm End time of interview:

More information

The Strategy Pattern Design Principle: Design Principle: Design Principle:

The Strategy Pattern Design Principle: Design Principle: Design Principle: Strategy Pattern The Strategy Pattern defines a family of algorithms, encapsulates each one, and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it. Design

More information

Mock Objects and Distributed Testing

Mock Objects and Distributed Testing Mock Objects and Distributed Testing Making a Mockery of your Software Brian Gilstrap Once, said the Mock Turtle at last, with a deep sigh, I was a real Turtle. (Alice In Wonderland, Lewis Carroll) The

More information

Monitoring Java in Docker at CDK

Monitoring Java in Docker at CDK CASE STUDY Monitoring Java in Docker at CDK The Digital Marketing business unit of CDK global shifted to a containerized approach for their next generation infrastructure. One of the challenges they ran

More information

Launch Store. University

Launch Store. University Launch Store University Order Management In this lesson, you will learn how to: View your orders as they come in and adjust their order status Print Shipping labels using USPS by Endicia Find and print

More information

Introduction to Concurrent Software Systems. CSCI 5828: Foundations of Software Engineering Lecture 12 09/29/2016

Introduction to Concurrent Software Systems. CSCI 5828: Foundations of Software Engineering Lecture 12 09/29/2016 Introduction to Concurrent Software Systems CSCI 5828: Foundations of Software Engineering Lecture 12 09/29/2016 1 Goals Present an overview of concurrency in software systems Review the benefits and challenges

More information

learn programming the right way

learn programming the right way Coding 101 learn programming the right way 1 INTRODUCTION Before you begin learning how to code, it s first useful to discuss why you would want to learn web development. There are lots of good reasons

More information

September 15th, Finagle + Java. A love story (

September 15th, Finagle + Java. A love story ( September 15th, 2016 Finagle + Java A love story ( ) @mnnakamura hi, I m Moses Nakamura Twitter lives on the JVM When Twitter realized we couldn t stay on a Rails monolith and continue to scale at the

More information

BE PROACTIVE USE REACTIVE

BE PROACTIVE USE REACTIVE BE PROACTIVE USE REACTIVE This morning we re going to talk about reactive programming. We ll cover some of the what, why, and how, hopefully with a bend towards grasping the fundamentals. We ll have some

More information

Architekturen für die Cloud

Architekturen für die Cloud Architekturen für die Cloud Eberhard Wolff Architecture & Technology Manager adesso AG 08.06.11 What is Cloud? National Institute for Standards and Technology (NIST) Definition On-demand self-service >

More information

The fringe of a binary tree are the values in left-to-right order. For example, the fringe of the following tree:

The fringe of a binary tree are the values in left-to-right order. For example, the fringe of the following tree: Lecture 13 The Same Fringe Problem Given a binary tree: sealed trait BinTree [+A] case class Node [A]( lhs : BinTree [A], rhs : BinTree [A]) extends BinTree [A] case class Leaf [A]( x: A) extends BinTree

More information

Cold, Hard Cache KV? On the implementation and maintenance of caches. who is

Cold, Hard Cache KV? On the implementation and maintenance of caches. who is 1 of 5 TE X T ONLY Cold, Hard Cache On the implementation and maintenance of caches who is KV? click for video Dear KV, Our latest project at work requires a large number of slightly different software

More information

Getting Started. 1 by Conner Irwin

Getting Started. 1 by Conner Irwin If you are a fan of the.net family of languages C#, Visual Basic, and so forth and you own a copy of AGK, then you ve got a new toy to play with. The AGK Wrapper for.net is an open source project that

More information

COPYRIGHTED MATERIAL. Getting Started with Google Analytics. P a r t

COPYRIGHTED MATERIAL. Getting Started with Google Analytics. P a r t P a r t I Getting Started with Google Analytics As analytics applications go, Google Analytics is probably the easiest (or at least one of the easiest) available in the market today. But don t let the

More information

Rust for high level applications. Lise Henry

Rust for high level applications. Lise Henry Rust for high level applications Lise Henry Who am I Elisabeth Henry A.k.a Lizzie Crowdagger Computer science background Semi-professional fantasy writer I like Rust, but not really into systems programming

More information

Real World Web Scalability. Ask Bjørn Hansen Develooper LLC

Real World Web Scalability. Ask Bjørn Hansen Develooper LLC Real World Web Scalability Ask Bjørn Hansen Develooper LLC Hello. 28 brilliant methods to make your website keep working past $goal requests/transactions/sales per second/hour/day Requiring minimal extra

More information

The 21 WORD . That Can Get You More Clients. Ian Brodie

The 21 WORD  . That Can Get You More Clients. Ian Brodie The 21 WORD EMAIL That Can Get You More Clients Ian Brodie The 21 Word Email That Can Get You More Clients Hey there! Welcome to this short report on the 21 Word Email That Can Get You More Clients If

More information

ICANN Start -Ep 05 Page 1 of 11. ICANN Start, Episode 5: What Does IPv6 Mean?

ICANN Start -Ep 05 Page 1 of 11. ICANN Start, Episode 5: What Does IPv6 Mean? ICANN Start -Ep 05 Page 1 of 11 Released 29 April, 2010 ICANN Start, Episode 5: What Does IPv6 Mean? Imagine you re at a technology conference, and they planned for 500 attendees, but 800 showed up. The

More information

Asynchronous OSGi: Promises for the masses. Tim Ward.

Asynchronous OSGi: Promises for the masses. Tim Ward. Asynchronous OSGi: Promises for the masses Tim Ward http://www.paremus.com info@paremus.com Who is Tim Ward? @TimothyWard Senior Consulting Engineer, Trainer and Architect at Paremus 5 years at IBM developing

More information

Simplifying Asynchronous Code with

Simplifying Asynchronous Code with Simplifying Asynchronous Code with Scala Async JASON ZAUGG PHILIPP HALLER The Problem Asynchronous code ubiquitous Intrinsic to programming models like actors Required for performance and scalability See

More information

A Brief History of Distributed Programming: RPC. YOW Brisbane 2016

A Brief History of Distributed Programming: RPC. YOW Brisbane 2016 A Brief History of Distributed Programming: RPC YOW Brisbane 2016 Christopher Meiklejohn Université catholique de Louvain @cmeik christophermeiklejohn.com Caitie McCaffrey Distributed Systems Engineer

More information

CS5412: TRANSACTIONS (I)

CS5412: TRANSACTIONS (I) 1 CS5412: TRANSACTIONS (I) Lecture XVII Ken Birman Transactions 2 A widely used reliability technology, despite the BASE methodology we use in the first tier Goal for this week: in-depth examination of

More information

Public Meeting Agenda Formatting Best Practices

Public Meeting Agenda Formatting Best Practices DEFINITIVE GUIDE Public Meeting Agenda Formatting Best Practices In this guide, we will first walk you through some best practices with text and images. Then, we will show you how to execute the best practices

More information