The essence of programming is abstraction. We begin with hardware and machine code primitives and build a series of increasingly powerful software abstractions on top of them. We can then use these abstractions to write sophisticated user-facing applications that would be impossible to define directly in terms of the underlying primitives.
Programmers clearly understand this abstraction story at the level of a single machine. Less appreciated is the corresponding story evolving at the cloud scale.
As in the single machine case, the cloud offers a handful of primitives: ephemeral compute and attached block storage for example. One can build reasonably complex applications directly on top of them by applying existing single-machine abstractions to each node in an application cluster. But there is a need for more powerful abstractions in this new cloud ecosystem. In particular, cloud applications can be developed not only in terms of single-machine libraries but also cross-machine services. These services will form a network of increasingly powerful abstractions over the raw compute and storage primitives of the cloud.
When such services are available, application developers will spend less time on infrastructure concerns orthogonal to their business goals. For example, they will no longer be concerned with installing and maintaining their own datastores; they will be accessed as services. Web application servers will not be orchestrated by developers directly on top of raw, ephemeral compute clouds; they will be managed with simple API calls. Algorithms will also be abstracted; everything from image processing to numerical optimization routines will be accessible externally.
By defining applications in terms of these infrastructure abstractions, developers can focus more on providing real value to their users. The ultimate effect of cloud infrastructure abstractions will therefore be better user-facing software.
To be concrete, I’ve included below a sample of cloud infrastructure abstractions that are or should be available to application developers. I’ve also started adding links to existing providers. If you know of good provider that I should add, say so in the comments.