University of Oxford Logo University of OxfordSoftware Engineering - Home
On Facebook
Follow us on twitter
Linked in
Linked in
Google plus
Google plus
Stumble Upon
Stumble Upon

Cloud Computing

Cloud computing now powers a huge range of our daily activities, from online video to our transport networks and financial services. As the use of cloud has grown the services offered by cloud providers has also grown from the basic building blocks to the full stack of software delivery components.
Yet as public cloud matures, we see challenges to its dominance. Companies have concerns about the cost of the cloud services and regulators and governments worry about vendor lock in and concentration risk.

This course covers the changing landscape of public cloud evolution and how software development and architectures have evolved as public cloud has matured. We will explore how infrastructure as code allows application architectures to evolve over time and in response to changing business requirements.



Course dates

Future courses are expected, but yet to be scheduled.


At the end of the course students will:

  • Understand the principles of infrastructure as code and how this changes the relationship between a running application and the environment it runs on.
  • Be familiar with the basic building blocks provided by the Cloud Service Provider, in the areas of compute, storage, database and networking.
  • For each of these services understand how they can be assessed in terms of availability, durability, observability, and cost.
  • Understand how architectures can evolve over time or even in real time. We will consider how an application’s availability, functionality and cost can all be considered as part of the application architecture.
  • Understand cloud application delivery models including CI / CD in the cloud and deployment mechanisms such as blue / green testing and feature flags.
  • Understand the different approaches which should be considered when building new applications in the cloud verses migrating existing application to the cloud.


Evolution of cloud computing

To open we will look at the history and development of cloud computing. We will explore how the adoption of cloud has changed over time and how cloud native architectures have evolved in response.

Cloud Fundamentals

This section will look at the building blocks for cloud services. We will look at compute, storage and databases and the key similarities and differences between cloud provider services and on premises offerings. We will also look at the basic building blocks and best practices in cloud security which will be useful as we start the lab sessions.

Architecting for Availability and Scalability

A core advantage of cloud architectures is their ability to scale in response to demand. In this unit we’ll look at how auto scaling can be implemented using virtual machines, containers and serverless functions and how these may be blended in an application stack. We’ll also look at the data layer and the role of SQL and No SQL databases as well as caching and non-traditional databases.

Cloud Networking

At a high-level cloud networking looks like traditional networking with IP V4, networks and subnets. In this section we’ll look at the role of cloud networking for highly available architectures and for security. We’ll look at network micro segmentation, instance and service level firewalls, gateways, and endpoints. We’ll also look at load balancers and other virtual network appliances. We will finish by looking at future roadmaps for networking in the cloud with the evolution of service mesh architectures.

Application deployment models

In this section we’ll look at immutable infrastructure and immutable images. We will look at the role of cattle vs pets in the cloud and deployment techniques for both. This section will explore build pipelines and infrastructure deployment templates. We will then look at techniques for updating applications while they are live, including blue green deployments and canary releases.

Monitoring and Observability

Every layer of the cloud stack can produce monitoring data. This section will look at the monitoring available from API calls to the cloud infrastructure to synthetic transactions run through a hosted application. We will cover architectures for collating and analysing this data at scale. We’ll look at how the data can be used in feedback loops for dynamic infrastructure scaling / reconfiguration but also for incident and security monitoring.

Cloud and Dev / Sec / Ops

Building on the ideas of entire infrastructures deployed as code with monitoring and feedback loops implemented at multiple layers in an application stack, we’ll look at the operating model for these cloud deployments. This section will look at the architectural considerations in application design to allow it to be deployed in a fully automated fashion with security implemented at each stage of the deployment. We’ll also look at the role of operations in highly dynamic cloud environments and the development of the Site Reliability Engineering function.

Cost and Environment Optimisation

To finish we’ll look at how cloud environments are optimised over time and how we can optimise for cost. We’ll look at the tools available for cost analytics and the factors to consider when optimising usage spend. The trade-off between availability targets and real time spend will be explored with some real-world examples. Areas we’ll explore include use of spot instances, differing patterns for failure recovery vs run time costs, storage tiering and use of differing CPU and instance types.

As companies increasingly need to understand their CO2 emissions we’ll have a look at the tools available from the major cloud providers for analysing the CO2 cost of applications and how this in tin turn influences our architecture courses.

Lab Work

Throughout the course we’ll be illustrating the above concept by building a web application on AWS. We will start with a simple website in a single network zone but over time we will develop this into a highly available multi-tiered application stack using server and serverless technologies. We will look at building stateless applications and the options in the cloud for state management with ephemeral compute. Then we will look at how to deploy the whole infrastructure using deployment pipelines. To wrap up we’ll discuss techniques for optimising our environments for cost.

The lab will be delivered in AWS. We will use the AWS console. To save having to install tools on a local machine we’ll set up an Amazon Linux instance in the cloud to work through the exercises


Familiarity with one of the major Infrastructure as a Service Cloud providers such as AWS, Microsoft Azure or Google Cloud Platform would be highly advantageous but not essential.

Understanding of Web APIs and HTTP Message Syntax and Routing ( RFC 7230 - Familiarity with XML and JSON is also recommended.

Understanding with TCP/IP networking to include the basics of the 7 layer OSI model, the functions of stateful and stateless firewalls, CIDR network notation and the basic functionality of load balancers and NAT gateways.

A basic understanding of Linux / Unix with a high level understanding of the core elements of the filesystem and the OS build and update processes, as well as filesystem mount points. An understanding of container architectures would also be advantageous.