We are excited to roll out a new release of the Actor Framework. Our v0.6 release contains a major architectural shift to support multi-tenant actors as well as a new social networking sample app called Fakebook. Here’s the laundry list:
- Partitioning support, including isolated actor states and sub-actor event monitoring support. (See section 4 of the Actor Basics doc.) This feature allows actor systems to "scale-up" better by enabling multiple actors to exist in a single Actor Runtime service.
- Support for actor methods in Python.
- Refactored to use .NET portable libraries, for Windows Phone & other future clients. (We will refine and complete this refactoring in upcoming releases.)
- Now communicating in “pure” JSON -- .NET “cheats” have been removed from JSON stream.
- Actor Analyzer now allows you to dynamically change the event level to produce more verbose events.
- Improved client async/await logic to avoid running continuations on UI thread.
- IActor.CallMethod, AddAssembly and AddMethod are now async, which means they don’t block a thread when waiting for Flush() to complete.
- Improved client resiliency & performance fixes.
Do check out our new sample applications that showcase building on top of actors:
- Fakebook social media sample
- Windows Phone port of our grocery list sample.
(Also, in the event that you want to download and run our samples after the code tree has gotten out of sync with this release, check out this this guide
on syncing up your installed bits with your built bits.
As usual, the "Actor Application.zip" file is a project template that can get you started writing up your first actor application.
While our partitioning feature goes a long way toward improving the scale-up scalability of ActorFx (including making some operations 1000x faster), we still have challenges associated with the scalability of our communications, and with inefficient use of threads on our partitioned nodes. Here are the known issues:
- A synchronous IActorState.GetActorProxy is not always a good idea. We will add support for IActorState.GetActorProxyAsync in our next release.
- There are numerous other places in our code where we still have synchronous logic that needs to be converted to asynchronous logic, in order to avoid stalling threads (and the possibly ensuing thread injection problems). We will address this issue in our next release.
- We need to do a better job of TCP connection-sharing so that we don't need a dedicated connection for each actor-actor communication link. We will implement connection-sharing in our next release.
So do feel free to play with our new partitioning feature in 0.6, with the knowledge that it will perform and scale much better in release 0.7.