Client requests come through the internet gateway.
They are passed to application load balancer
created for an auto scaling group, containing all application servers in 2 availability zones for high availability and low latency. Application servers are located in public subnets allowing access from outside of defined VPC for desired protocols (HTTP and/or HTTPS in this case). Application servers initiate query requests to MySQL database located in private subnets and running on Amazon RDS service, which by default means that elastic block storage is used to store data in the database. For high availability the database is replicated into another availability zone which becomes primary in case of failure. I’ve chosen a passive standby model although it would be possible to make both database copies active. We could horizontally scale read requests in this way if necessary. Once a client query is processed by MySQL database the result is delivered back to the application server, which in its turn returns desired output to the client through load balancer and internet gateway.