IGL S AND MOUNT NS. Taking AKKA to Production
|
|
- Laurence Porter
- 5 years ago
- Views:
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
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 informationCS 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 informationCombining 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 informationExecutive 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 informationThe 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 informationAgreement 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 informationCOMP390 (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 informationThe 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 informationDistributed 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 information1: 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 informationCOMP390 (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 informationCOMP390 (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 informationThese 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 informationYour 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 informationEverything 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 informationAkka: 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 informationReplication. 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 informationCS 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 informationThe 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 informationThe 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 informationMAKING 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 informationCS 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 informationAmyyon 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 informationSupplemental 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 informationIntro. 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 informationD 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 informationNotes 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 information12 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 informationGoals 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 informationBuilding 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 informationChapter 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 informationScaling 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 informationProgramming 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 informationBuilding 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 informationLast 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 informationApache 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 informationGustavo 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 informationPersistent 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 informationStanko 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 informationDevising 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 informationIdentifying 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 informationstreams 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 informationLecture 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 informationECE 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 informationWhat 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 information6.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 informationThe 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 informationPhilipp 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 informationClickbank 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 informationChapter01.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 informationConsistency. 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 information1 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 informationComposable 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 informationAssignment 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 informationMicroservices, 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 informationAzure 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 informationMo 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 informationAs 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 informationWhy 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 informationFavoring 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 informationReactive 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 information15-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 informationMemory 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 informationDER 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 informationMicroservices. 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 informationSwift 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 informationThink 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 informationBuilding 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 informationWe 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 informationPRINCIPLES 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 informationDOCKER 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 informationAspirin 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 informationThreads 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 informationDavid 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 informationGrand 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 informationIntroduction 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 informationScala 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 informationAmber 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 informationThe 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 informationMock 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 informationMonitoring 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 informationLaunch 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 informationIntroduction 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 informationlearn 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 informationSeptember 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 informationBE 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 informationArchitekturen 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 informationThe 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 informationCold, 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 informationGetting 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 informationCOPYRIGHTED 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 informationRust 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 informationReal 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 informationThe 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 informationICANN 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 informationAsynchronous 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 informationSimplifying 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 informationA 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 informationCS5412: 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 informationPublic 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