/CPSC_476

Back-End Engineering. Concepts and architecture of enterprise applications, components, services and communication technologies. Dependency injection, application tiers, remote objects, distributed transactions, message queues, web services and object-relational mapping. Enterprise application development in Python with build tools, containers and applications servers.

Primary LanguagePython

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

Project 4

  • In this project, I add application-level sharding to MiniTwit, partitioning data across three SQLite databases.
  • Project 4 Instruction