Classic Solutions Architecture

Section Introduction

β€’ These solutions architectures are the best part of this course

β€’ Let’s understand how all the technologies we’ve seen work together

β€’ This is a section you need to be 100% comfortable with

β€’ We’ll see the progression of a Solution’s architect mindset through many sample case studies:

β€’ WhatIsTheTime.Com

β€’ MyClothes.Com

β€’ MyWordPress.Com

β€’ Instantiating applications quickly

β€’ Beanstalk

Stateless Web App: WhatIsTheTime.com

β€’ WhatIsTheTime.com allows people to know what time it is

β€’ We don’t need a database

β€’ We want to start small and can accept downtime

β€’ We want to fully scale vertically and horizontally, no downtime

β€’ Let’s go through the Solutions Architect journey for this app

β€’ Let’s see how we can proceed!

in this lecture we’ve discussed…

β€’ Public vs Private IP and EC2 instances

β€’ Elastic IP vs Route 53 vs Load Balancers

β€’ Route 53 TTL, A records and Alias Records

β€’ Maintaining EC2 instances manually vs Auto Scaling Groups

β€’ Multi AZ to survive disasters

β€’ ELB Health Checks

β€’ Security Group Rules

β€’ Reservation of capacity for costing savings when possible

β€’ We’re considering 5 pillars for a well architected application: costs, performance, reliability, security, operational excellence

Stateful Web App: MyClothes.com

β€’ MyClothes.com allows people to buy clothes online.

β€’ There’s a shopping cart

β€’ Our website is having hundreds of users at the same time

β€’ We need to scale, maintain horizontal scalability and keep our web application as stateless as possible

β€’ Users should not lose their shopping cart

β€’ Users should have their details (address, etc) in a database

β€’ Let’s see how we can proceed!

In this lecture we’ve discussed… 3-tier architectures for web applications

β€’ ELB sticky sessions

β€’ Web clients for storing cookies and making our web app stateless

β€’ ElastiCache

β€’ For storing sessions (alternative: DynamoDB)

β€’ For caching data from RDS

β€’ Multi AZ

β€’ RDS

β€’ For storing user data

β€’ Read replicas for scaling reads

β€’ Multi AZ for disaster recovery

β€’ Tight Security with security groups referencing each other

Stateful Web App: MyWordPress.com

β€’ We are trying to create a fully scalable WordPress website

β€’ We want that website to access and correctly display picture uploads

β€’ Our user data, and the blog content should be stored in a MySQL database.

β€’ Let’s see how we can achieve this!

In this lecture we’ve discussed…

β€’ Aurora Database to have easy Multi-AZ and Read -Replicas

β€’ Storing data in EBS (single instance application)

β€’ Vs Storing data in EFS (distributed application)

Instantiating Applications quickly

β€’ When launching a full stack (EC2, EBS, RDS), it can take time to:

β€’ Install applications

β€’ Insert initial (or recovery) data

β€’ Configure everything

β€’ Launch the application

β€’ We can take advantage of the cloud to speed that up

Instantiating Applications quickly

β€’ EC2 Instances:

β€’ Use a Golden AMI: Install your applications, OS dependencies etc.. beforehand and launch your EC2 instance from the Golden AMI

β€’ Bootstrap using User Data: For dynamic configuration, use User Data scripts

β€’ Hybrid: mix Golden AMI and User Data (Elastic Beanstalk)

β€’ RDS Databases:

β€’ Restore from a snapshot: the database will have schemas and data ready!

β€’ EBS Volumes:

β€’ Restore from a snapshot: the disk will already be formatted and have data!

Developer problems on AWS

β€’ Managing infrastructure

β€’ Deploying Code

β€’ Configuring all the databases, load balancers, etc

β€’ Scaling concerns

β€’ Most web apps have the same architecture (ALB + ASG)

β€’ All the developers want is for their code to run!

β€’ Possibly, consistently across different applications and environments

Elastic Beanstalk – Overview

β€’ Elastic Beanstalk is a developer centric view of deploying an application on AWS

β€’ It uses all the component’s we’ve seen before: EC2, ASG, ELB, RDS, …

β€’ Managed service

β€’ Automatically handles capacity provisioning, load balancing, scaling, application health monitoring, instance configuration, …

β€’ Just the application code is the responsibility of the developer

β€’ We still have full control over the configuration

β€’ Beanstalk is free but you pay for the underlying instances

Elastic Beanstalk – Components

β€’ Application: collection of Elastic Beanstalk components (environments, versions, configurations, …)

β€’ Application Version: an iteration of your application code

β€’ Environment

β€’ Collection of AWS resources running an application version (only one application version at a time)

β€’ Tiers: Web Server Environment Tier & Worker Environment Tier

β€’ You can create multiple environments (dev, test, prod, …

Elastic Beanstalk – Supported Platforms

β€’ Go

β€’ Java SE

β€’ Java with Tomcat

β€’ .NET Core on Linux

β€’ .NET on Windows Server

β€’ Node.js

β€’ PHP

β€’ Python

β€’ Ruby

β€’ Packer Builder

β€’ Single Container Docker

β€’ Multi-container Docker

β€’ Preconfigured Docker

β€’ If not supported, you can write your custom platform (advanced)

Last updated