CPSC_476
What I have learned
- Understand characteristics of web applications and back-end technologies.
- Apply database access techniques to persist data.
- Evaluate characteristics of NoSQL databases and their influence on the design of web applications.
- Gain experience with common web back-end tools and components.
- Structure applications using server-side application patterns.
- Assess the impact of various techniques for scaling applications.
Outline of materials and concepts
- Scalability and back-end concepts
- Web Services and APIs
- State Management and Load Balancing
- Relational DBMSes and Data Models
- NoSQL Databases
- HTTP and Object Caching
- Asynchronous Messaging
- Software Engineering and Design
- Running Services in Production
Project 1
- From original Minitwit source code, I split it into separate indepdent pieces. I create a new Flask application mt_api.py that exposes RESTful URL endpoints for JSON data, rather than generating HTML. I create a file population.sql containing SQL INSERT statements to re-populate the database with test data.
- Project 1 Instruction
Project 2
- In this project, I refactor MiniTwit to use the Web Service API that I created in Project 1, then run multiple instances of both the front- and back-end servers behind a load balancer. In order to do this, I remove all references to sqlite3 and all database queries from minitwit.py, replacing them with requests to mt_api.py via the Requests library.
- To simulate running MiniTwit in production, I run three instances of minitwit.py and three instances of mt_api.py. To do this, I create a Procfile and use the foreman command-line utility.
- To set up the load balancer, I use NGINX
- Project 2 Instruction
Project 3
- In this project, I port the MiniTwit API to Cassandra, a wide-column NoSQL database.
- Project 3 Instruction
Project 4
- In this project, I add application-level sharding to MiniTwit, partitioning data across three SQLite databases.
- Project 4 Instruction