I'm wildly, crazily biased because I have seen the fruits of multiple snowflake PaaSes and it is rotten. Brilliant engineers building brilliant systems that consume enormous time and effort to not do everything an off-the-shelf PaaS does serviceably already.
Rob Mee gives the analogy that everyone used to write their own ORMs. Nobody does that any more. Companies with homegrown ORMs are cursed, no matter how brilliant that ORM is. Being on a cutting edge is only a good thing if it eventually stops being the cutting edge.
Does anyone still write their own OS? Their own webserver? Their own database? Their own programming language? Yes! They do. But for 99.99% of the world's problems, delivering user value is the first priority.
> it doesn't feel like true open source in the way that both Mesos and Kubernetes do.
Could you elaborate?
Diego works by auctioning tasks/LRPs to cells, which bid based on free resources.
Mesos works by auctioning free resources to tasks/LRPs, which accept or reject based on their own policies.
The analogy I got from Onsi was that Diego is "demand-driven", Mesos is "supply-driven".
They have different sweet spots. Diego is built to be the heart of a PaaS, so it aims for fast success or failure for accepting tasks and processes. Consumers can decide whether to build further scheduling intelligence, but Diego doesn't make it explicit.
Mesos exposes some of the placement/scheduling logic back to the client explicitly. For example, if you are OK with a gigantic batch job running intermittently, Mesos can more or less do that without fuss. The job will simply wait until enough free resources are available on the cluster. This is one of the observations that drove Mesos. Whereas Diego will tell you very quickly if that capability is unavailable currently.
On the flipside, Diego requires no additional configuration. It also doesn't require a central view of available resources to be maintained in order to perform placement. That said, Diego does maintain a central view of tasks and LRPs that have been placed, in order to relaunch failed ones.
That said, I have sometimes been wrong about my understanding of Diego and Mesos, so YMMV.
I should also note in passing that Diego can place and manage Docker containers, Windows .NET apps and classic buildpack-staged apps, with the architectural flexibility to extend to more kinds of managed resources (eg, with the right backend, it could manage unikernel apps). That alone sets it apart from the pack.
State is handled by services bound to your application. CF injects the connection details into the staging and runtime environments. Applications using buildpacks generally have that connection autoconfigured.
For example, Rails apps have database credentials autoconfigured if you have a database bound. Spring apps get a DataSource. And so on.
It looks like k8s has a way to handle volumes, so maybe I'll have to play with that.
But you'd be surprised how many apps can be ported to some semblance of cloud nativeness. Most of the stuff that Absolutely Must Be Stateful can usually adapted to something else. Sticky sessions go to Redis or Memcache, local files can often be relocated into a shared filesystem/blobstore like Riak CS etc.
The big thing about PaaSes is not that they make it a smooth, double-percent-ROI incremental improvement from the status quo. What happens is that unlocking true continuous deployment capability unblocks process backpressure throughout the entire organisation. The value you get from a complete shift in how you develop software swamps the cost of carrying legacy until it can be replaced.
Putting it another way: the sucky parts are tactical. The awesome parts are strategic.
[1] http://blog.pivotal.io/pivotal-cloud-foundry/case-studies/th...
For me, the cleverest part about Diego is that it turns placement into a distributed problem through an auctions mechanism. Other attempts at this focus on algorithmic approaches that assume perfect information. Diego instead asks cells to bid on incoming tasks and processes. The auction closes after a fixed time and the task or process is sent to the best bidder. This greatly reduces the need to have perfect central consistency in order to perform bin-packing optimisation -- in a real environment, that turns out to matter a lot.
Cloud Foundry is large and very featuresome, so for those who want a more approachable way to play with Diego, try Lattice[2].
Disclaimer: I work in Pivotal Labs, a division of Pivotal. Pivotal is the major donor of engineering effort to Cloud Foundry. I worked on the Buildpacks team and I've deployed commercial apps to PWS, so I'm obviously a one-eyed fan.
[1] https://github.com/cloudfoundry-incubator/diego-design-notes
[2] http://lattice.cf/