The doc predates ACID transactions support in Orleans, but it talks about the Virtual Actor model vs the Akka model in general.
233 karma · joined January 13, 2014
The doc predates ACID transactions support in Orleans, but it talks about the Virtual Actor model vs the Akka model in general.
I gave a talk recently on how we use it at Microsoft: https://www.youtube.com/watch?v=KhgYlvGLv9c - the talk is very short and so it does not go into many details, but it gives an overview of some internal use cases.
Metrics monitoring is hugely useful for figuring out what's going wrong (or right...) and where - especially when you can slice and dice by dimensions/tags. Microsoft (where I work) uses lots of metrics internally, for every sevice. It's nice to see M3/Chronosphere making this kind of thing more affordable and widely accessible.
I find it makes most (but not all) code more readable, particularly given that we have great IDEs/tooling in the .NET world.
I'm a big fan of LINQ and I use it in my own code, just not in the high-perf bits. LINQ is great for writing code which has "obviously no deficiencies" in terms of correctness. Without it your code may end up having "no obvious deficiencies".
I also like LinqFaster, LinqAF and these other libraries/tools which can make LINQ usable in more domains.
> LIKQ is powering Academic Graph Search API, which is part of Microsoft Cognitive Services.
* It's part-REPL, part-shell
* In addition to plain text, you can pipe objects between cmdlets
* Integrating with .NET dlls is very easy
* Objects can be represented as directories using a provider model (eg, navigate the windows registry: cd HKLM:\Software\Microsoft)
On the other hand, I always found asynchrony/concurrency in PS to be a PITA. I wish it had async/await.
For an example of how to write a PowerShell module, check out this PR on Orleans (open source .NET virtual actor framework) which lets you call into remote actors: https://github.com/dotnet/orleans/pull/1990
Service Fabric is a confusing beast. It includes a Virtual Actor runtime which is indeed very heavily inspired from Orleans, but it is a reimplementation. Orleans is built for "cloud" scenarios. You can run Orleans on top of Service Fabric using a host I wrote: https://github.com/OrleansContrib/OrleansFabricSilo
Progress/bugs were reviewed weekly at ship room. Live site issues were reviewed the next morning (involving the relevant on-call engineers).
So as with any large company which isn't a monoculture, things vary from team to team.
Also, calling them "M$" in 2016?
ES is a work-in-progress for Orleans, but many of us are using our own ES systems.
For an implementation of Virtual Actors on the JVM, check out Orbit from Electronic Arts / BioWare: http://orbit.bioware.com/
This helps you to reason about your system. You can never know if a node will fail at any point in time (in any system), but with Orleans you can be sure that an actor will be reactivated on a surviving node in event of a failure. In other words, you can continually message actor X without worrying about ever having to reinstantiate it on another node due to failure.
By default, Orleans maintains an eventually consistent mapping of actors to nodes (called silos) and relies on the storage layer to give strong consistency. Most of the default storage providers offer strong consistency.
By the way, Service Fabric includes an implementation of Virtual Actors which differ in a couple of ways: 1. The actors are placed using consistent hashing. Actor Ids are mapped to a range of partitions, the replicas of which can be moved between nodes in case of failure. 2. Actor state is physically stored on the actor node by default. Because Service Fabric uses distributed consensus to implement stateful services, they can persist each actors state in the partition which it belongs to. The state is replicated to a quorum of replicas on each write.
Whatever it is, maybe we can fix it?
I wonder, though why it became stagnant so soon and never gained momentum. I'm don't know, but I have a theory. The team were using some tech which was semi-secret at the time, which they weren't allowed to talk about: Service Fabric (known as Windows Fabric at the time). Fabric was in use in projects like Lync Server and Service Bus Server, but no one could talk openly about it.
How can you develop an open-source distributed system without being able to mention the framework which makes it all possible? Fabric handles ActorFx' high availability, service discovery, code distribution/upgrades, and their state replication. It's pretty difficult... Forum posts asking what this fabric thing was went unanswered and the people who may have been interested in ActorFx just moved on.
Regarding Orleans, there were probably a couple of internal actor frameworks in use at some large .NET houses, but they were never released to the public. I think it was more of a cultural issue than a lack of devs: .NET devs weren't used to sharing code.
Things are getting better. The community around Orleans is great (come join us on Gitter! https://gitter.im/dotnet/orleans) and the ecosystem as a whole feels to be gaining momentum.
Curious to see how this is related to Service Fabric, which shares many of the same goals. Fabric seems more mature (very well battle tested), but this has some interesting concepts around accessibility.
Looks like this: http://imgur.com/ShQvqAU
For the record, I eschewed XML configuration for code and instead of supporting a range of protocols/transports, I used binary over TCP.
Databases can be hosted on the framework. DocumentDB is, for example. While at MS, I wrote a near-real-time metrics system using Fabric and worked on a tunable-consistency distributed cache built on Fabric.
Summary of Service Fabric here: http://daprlabs.com/blog/blog/2015/04/30/service-fabric-2/