The internet has become part of our every day lives, millions of people every day access web pages to share information. One of the big issues now is how do we deliver content in a scalable way.
This was the question that was asked to me by AV-Events, a company that specialises in supporting events and conferences all over the UK. You can find out more about AV-Events at https://www.av-events.co.uk.
They had been asked by their client, HMC, to provide, all AV work and an online landing page and schedule for their upcoming conference. This is not the first time they have done this, but for this event they had some concerns. In previous years, they had ran this conference on a website which had subsequently failed due to traffic load at specific times. As you can imagine this was not ideal when you had hundreds of delegates trying to access material on important subjects.
The information we had to work with is as follows:
- They need a single page application
- The single page application must be updatable during the event by on site support
- It must support a minimum of 250 people, but this could scale to any amount if content goes viral.
- It must provide a login page to try and restrict access, although a single username and password will be shared to all delegates. To this point it was advised that this was a very bad idea to ensure privacy, but the end customer was willing to accept this risk.
- The site must be able to scale instantly on demand
It was decided to make a scalable application using Amazon Web Services. AWS is a number of different online services and applications that work together to deliver content to the internet. Whether that is storage online in the case of S3, or even virtual servers called EC2 instances.
Although there are many different methods to deploy on amazon,It was decided the best way to deploy the scalable application was serverless. Instead of deploying a hardware or virtual server, installing a web server, (Apache or Ngix for example), and then a database server of some kind (MySQL or MariaDB being the usual choice). We deploy a number of different AWS Services, each with a different task and each with the ability to interact with each other.
A breakdown of the services are.
- CloudFront – This is the AWS Caching system. The goal of this is to take content from webpages and cache the content at the “Edge”. That means that the content is delivered from a server estate with the best latency for the customer.
- S3 – This is amazons Storage estate. This is used to store objects, kind of like a file on a PC. This will then deliver this content to the end customer, automatically scaling as and when load is required. This is where the web application will be stored
- AppSync – This allows you to create flexible API’s combining one or more data sources. The web app can then query AppSync to get the information required
- Cognito – This service is responsible for user Login and Signup
- DynamoDB – This is a managed database service that can automatically scale based on load.
Unfortunately, due to the sensitivity of the data, I can’t show the end result on here. But below are some screenshots from the build phase using dummy data
Overall, building this scalable application was a very fun project. We are happy that the end customer got exactly what they needed and we hope to work with them again