Cloud computing refers to computing resources provided as a service over a network
Although cloud computing can sometimes be confusing, simplistically replacing the word “cloud” with the word “network” tends to help make sense of any sentence about Cloud computing. Cloud computing involves getting access to (often virtualized) compute, storage, network infrastructure.
Cloud computing offers development teams a number of benefits:
- Dynamic provisioning of services enabling experimentation, clean environments for testing and deployment
- Deterministic, rules based environments
- On-demand infrastructure – no more waiting 6 months for a dev server
- Automation of build, configuration, deployment, scaling and support
Cloud computing also offers organizations a number of benefits:
- Development cycles are significantly sped up making the organization more responsive to change and disruption
- Virtualized use of utility physical resources is often more efficient
- Infrastructure is fully understood and asset managed
- “Shadow-IT” effectively disappears
Organizations can build local, private clouds on their own infrastructure or use public cloud providers. Public cloud offers a further set of advantages in that:
- Hosting, compute and storage are cheaper than on-premises costs
- 2nd order costs around power, cooling, site safety, security, resilience, space are all out-sourced
- Hardware refresh budgets and technology research budgets are higher with market leading large cloud providers (e.g. Amazon, Microsoft, Google) than most organizations
We recommend that organizations trial use of public cloud services for Infrastructure-as-a-Service. Building private clouds is unlikely to be a wise strategic move.
Infrastructure-as-a-Service (IaaS) involves providing computing and storage capability in an on-demand virtualized environment. Teams can create servers, compute nodes, storage nodes, networks and other environments through APIs (and usually GUIs).
Private IaaS and Public IaaS enable the ability to create environments (such as a server configuration) deterministically, based on rules. This means that environment creation becomes predictable, and testable, rather than a variable unknown.
IaaS services must be API based to allow development teams to incorporate distribution, load balancing, resilience, fail-over and configuration into the development and build process. Because of the necessary speed, amount of change and quality advantages IaaS provisioning, configuration and tear-down should be automated.
IaaS is sometimes characterized as treating servers as cattle, not pets. They tend not to have special names and designated purposes anymore. Servers are treated as utilities, if one goes wrong we simply turn it off and stand up a new server, with the exact same configuration, in its place – in real-time.
Good IaaS underpins agile and interactive development and is especially useful for very large scale development (e.g. Big Data Analytics) or high complexity software where ephemeral or dynamic infrastructure may be needed.
IaaS is currently best provided by Public Cloud providers rather than built on premises.
Platform as a Service (PaaS) is a step on from Infrastructure-as-a-Service as it a configured environment to build software and services over the network.
PaaS allows developers to create applications based on tools provided by the service. Platforms are made from already set up features, packages and configuration ranging from Operating Systems, execution environments, server management software, design and development tools, hosting tools etc.
Platforms can build on basic infrastructure to create development, test, integration and deployment environments. As environments become more rules based and API driven it becomes possible to wrap up an environment (virtualized hardware, configuration and software) into a single package and simply move it from place to place. This “Containerization” means that as well as considering the progressing of changes, or systems through the levels of Done we can also progress environments, or even networks of environments, through these levels of Done.
PaaS involves taking the grunt work out of development by providing, ideally portable, well configured servers, development and deployment environments that are already hooked up to Enterprise Architecture Mechanisms such as authentication, logging, security, asset management etc.