Learning AWS(Second Edition)
上QQ阅读APP看书,第一时间看更新

A typical e-commerce web application

In this section, we go through the specifications of a typical e-commerce website which we will develop and deploy on AWS infrastructure. We will leverage the AWS infrastructure to reduce project timeline and also show you the specific AWS code needed to support your non-functional requirements. However, this application is meant for illustrative purposes and is not a production grade application.

The codebase for this application will be in Java and the framework used will be Spring 4.x along with MySQL as the database. We will not delve into the detailed design or the specifications as it is not in the scope of the book, nor shall we develop all the functional use cases defined in the specifications. We will, however, dive deep into the non-functional specifications as they tend to leverage the cloud services more. 

Suppose electronics retailer, A1 Sales, has decided to create an e-commerce site to boost their brand and revenues. A1 Sales has identified specific functional and non-functional requirements that are typical of any e-commerce web application. A1 Sales has made the decision not to invest in a data center and instead leverage public cloud infrastructure; hence the e-commerce web application needs to be ready for the cloud from day one. 

The top level functional requirements identified are:

  • The application shall allow users to browse and display detailed information of the selected products
  • The application shall provide a shopping cart during online purchase
  • The application shall allow users to add/remove products in the shopping cart before confirming a purchase
  • The application shall allow a user to register and create his/her credentials
  • The application shall authenticate user credentials before purchase of products
  • The application shall enable users to enter the shipping address during payment process
  • The application shall enable users to enter payment information during the payment process
  • The application shall send an order confirmation to the user through email
  • The application shall allow users to cancel an order
  • The application shall allow the addition/deletion/updating of a selected product for an admin user

The non-functional requirements identified are:

  • Operational cost: The architected solution for the e-commerce application should have a low monthly operational cost as nothing is free on the cloud. The solution, at a minimum, shall meet the minimum requirements for scalability, availability, fault tolerance, security, and replication and disaster recovery.
  • Scalability: The cloud infrastructure shall scale the application up or down by adding/removing application nodes from the network depending on the load on the application.
  • Scalability: The architected solution shall be designed in a loosely coupled and stateless manner which lends itself to scaling.
  • High availability: The architected solution will be designed in a manner that avoids a single point failure in order to achieve high availability .
  • Fault tolerant: The application shall be coded to handle cloud failures to a predefined limit.
  • Application security: The application shall use encrypted channels for communications. All the confidential data shall be stored in an encrypted format. All the files at rest shall be stored in an encrypted format.
  • Cloud infrastructure security: The cloud infrastructure shall be configured to close all the unnecessary network ports with the help of a firewall. All the compute instances on the cloud shall be secured with SSH keys.
  • Replication: All the data should be replicated in real time to a secondary location to reduce the possibility of data loss.
  • Backups: All the data from the databases shall be backed up on a daily basis.
  • Disaster recovery: The architected solution shall be designed in a manner that supports recovery from an outage with minimal human intervention using automated scripts.
  • Design for failure: The architected solution shall be designed for failure, in other words the application shall be designed, implemented and deployed for automated recovery from failure.
  • The application shall be coded using open source software and open standards to prevent vendor lock-in and drive costs down.