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.
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.
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.