This looks fantastic - great work. You should definitely write this up as a new blog post!
On 1 April 2017 at 14:05, Markus Thömmes <[email protected]> wrote: > Hi out there, > > Over the past couple of weeks, I started working on a new ContainerPool > (and thus eventually a new Invoker). It started as a weekend investigation > into how one would write the Invoker if one started on a green field and > turned out a valuable step forward after all. > > The new ContainerPool is modeled around Akka Actors and I put an emphasis > on the testability of the code. Before diving deeper into performance work > on OpenWhisk we need to be able to quickly verify new models of scheduling > and thus I abstracted the "container providing" code away from the pool > itself. One can now easily simulate different workloads without actually > talking to docker itself. A nice side-effect of this is, that the Container > interface (it's literally a trait) is completely pluggable and can also be > filled in by "insert-your-favorite-container-solution-here". > > In terms of performance I did see a significant improvement in single-user > throughput performance but haven't yet got around to make a proper write-up > of the experiment's setup and methodology, hence I'll not show hard numbers > for now. We're still missing out on a common load test suite which we can > all use to verify our changes. > > So all in all features: > - Eliminated concurrency behavior through the actor model > - Eliminated busy looping to get a container > - Increased testability by drawing sharp-abstraction layers and making > sure each component is testable separately > - Increased "experimentability" with scheduling algorithms (they are > encapsulated themselves) > - Performance increases very likely due implementation of a "pause grace" > (the container is not paused for a defined amount of time and can continue > its work immediately if another request comes in at that time) > - Pluggability of the container interface > > The pull-request is open at https://github.com/ > openwhisk/openwhisk/pull/2021. It's passing tests already. Test > coverage is still a bit low, but Sven Lange-Last and I are working to get > it done quite soon. > > It will be delivered in multiple smallish pull-requests, the first of > which is open here: https://github.com/openwhisk/openwhisk/pull/2092. At > first, the new pool is going to be behind a feature flag. Once the pool has > battle proven, we can then flip the switch and remove old code as > applicable. > > Feel free to have a play with it, feedback and code-reviews are very very > welcome! > > Cheers, > Markus > -- Regards, James Thomas
