Flynn and Deis are two Docker-related open source projects that I find incredibly promising, so much so that I included both of them in my list of the Top 10 open-source Docker projects at numbers 1 and 2, respectively, and I stand by that decision.
What I love about both Flynn and Deis is that they're highly ambitious. Both openly describe themselves as PaaS platforms, but it's clear that they're not just taking the old PaaS paradigm and throwing Docker containerization into the mix. Instead, they're seeking to redefine the meaning of PaaS. Just as Sinatra redefined the idea of web frameworks by creating a micro-web framework, Flynn and Deis have created a micro-PaaS concept where anyone can run their own PaaS on their own hardware with very little complicated overhead.
While this list is likely far from comprehensive, I take the following to be fundamental similarities between Flynn and Deis:
- Indebted to CoreOS --- Both projects have chosen to adopt elements of CoreOS to drive their respective clustered, distributed architectures (CoreOS was also on my Top 10 list). Flynn uses CoreOS's etcd system within its discoverd project to drive its service discovery and cluster-level configuration system. Deis, on the other hand, has wholesale adopted CoreOS as its exclusive operating system. CoreOS is a natural fit because it's an OS built both to drive clustered distributed systems (analogous to a system like Riak) and with Docker containers as a first-class citizen.
- Far more than a Heroku clone --- Anytime anyone says that they're building a PaaS, it's tempting to assume that they're reinventing the PaaS wheel and simply combining together a number of familiar elements: some kind of deployment interface coupled with a load balancer, a service provisioning system, and so on. But Flynn and Deis are different because the "usual" PaaS bits that we're used to seeing are to be found but only at the higher levels of both systems' architectures, e.g. the user interface and application deployment manager. Below that level, both Flynn and Deis strive to provide a robust, scalable systems layer to drive service discovery, task scheduling, and cluster management. The makers of Flynn, for example, describe their architecture as divided into a Layer 0 (the systems layer) and a Layer 1 (the deployment/maintenance layer) and explicitly cite the Google Omega paper as inspiration. It's also useful to compare both systems to ZooKeeper or Mesos. This is far more ambitious than most of what can be found in the current PaaS landscape and, indeed, a broader conceptualization of the "platform" in PaaS than you'll find almost anywhere else.
- But then again a lot like Heroku --- Once you rise above the systems layer onto the more directly developer-facing level, things begin to look quite a bit like Heroku. Flynn offers Procfile-based deployment specification, while Deis offers support for either Dockerfile- or Heroku buildpack-based specification. Furthermore, both Flynn and Deis have opted for git push-based deployment deeply reminiscent of Heroku. This enables both systems to offer a wide variety of new possibilities while also minimizing barriers of entry for developers.
- Service-oriented architecture --- For the most part, PaaSes have been built with the single application as the basic atomic unit around which everything is organized. Flynn and Deis are built around the principle that lightweight, decoupled services should be seen as the fundamental unit and the building blocks for groups of applications---in fact, it's not easy to tell where an application begins and ends from a service-oriented perspective. Docker is a necessary building block for systems like Flynn and Deis because Docker containers are lightweight in a way that is conducive to distributed multitenancy and also highly ephemeral.
- Similar missing pieces --- The two systems are also similar in what they lack, at least at the moment. Neither system seems to have a good system monitoring story at the moment, although I suspect that we should see a lot of activity on that front soon. Another potential issue is on the database services level. At the moment, Flynn offers only one "database appliance," flynn-postgres, while it's unclear whether Deis has a similar mechanism for attaching services to apps. Because both systems are Docker-based, those services can be run and managed in containers, but both systems have a ways to go in terms of making specific types of services easier to use within the cluster. Some kind of plugin API for both systems might be a nice start.
There are surely other similarities -- such as the fact that both are written in Go -- but the ones listed above strike me as the most fundamental. What it comes down to is that both Flynn and Deis are attempting to provide a distributed scaffolding that enables IT departments to build potentially massive, containerized, service-oriented architectures. The robust systems layer is meant to make life easier for ops, and the Heroku-inflected deployment tools are intended to make life easier for devs.
Today, the two projects have similar ambitions, architectures, and messaging. It would be highly beneficial to the Docker and PaaS communities to hear more from the project leaders themselves about what makes their respective visions fundamentally different. In the next few weeks, we will be interviewing the leaders of the Deis and Flynn projects to get this perspective right from the source. In the mean time, I'd like to invite anyone involved with any PaaS projects---not to mention any of our readers---to join the discussion in the comments or elsewhere. In particular, I'd love to get your thoughts on the following questions:
- What are the main differences you see between Deis and Flynn?
- Which approach makes more sense to you?
- What do you think about the differences between full-fledged PaaS (Cloud Foundry and OpenShift) vs micro-PaaS (Deis and Flynn)?