In the past couple of months I’ve noticed folks hinting at or suggesting something that, for a lack of a better term, I’ll call distributed POSIXor dPOSIX for short.
What do I mean by this? Well, with whatever we come up for dPOSIX (besides, hopefully a better name) it will presumably have the following characteristics:
Container as first-class citizens: no matter what the unit of scheduling is (Kubernetes had pods from the get-go, DC/OS is introducing it with 1.9, Docker will at some point likely follow?), dPOSIX will be treating containersas first-class entities. For example, we can expect dPOSIX APIs will understand how to express to run different types of distributed processes—such as long-running ones or batch jobs—using different container runtimes, from the currently dominating Docker to AppC and OCI.
Distributed runtime environment: dPOSIX will assume a bunch of nodes (aka cluster or cell or datacenter) as the runtime environment; doesn’t matter if you’re talking about 10 (most of us) or 100,000 (some big ones) nodes. Some of the implications being: 1. software defined networking is front and center, 2. cattle (mostly) and some pets (as a safety blanket, for ‘legacy apps’), and 3. immutable infrastructure on all levels (from node to service/function). The only two questions left are: how long will you push back for going all in concerning public cloud (more below), and how to minimize cloud provider lock-in (hint: container orchestration systems allow you to be agnostic about it) where possible.
DevOps is the default: dPOSIX requires to re-think the roles and responsibilities how we build and operate services and applications. Increasingly, cloud native deployments at least blur the line between developers and operations and in the extreme case ( serverless, erm, Function-as-a-Service) require that the person who wrote some code is also responsible for operating it in prod.