Cruddur

Microblogging platform using VPC, Lambda, DynamoDB, and serverless design.

This section looks closely at the architecture of the Cruddur microblogging platform. The diagrams below show how the system uses modern cloud services to stay scalable, reliable, and low-cost.

Cruddur architecture overview

Figure 1: High-level Cruddur architecture, click to view full size.

VPC networking setup

Figure 2: VPC networking with public and private subnets.

Frontend hosting on S3 and CloudFront

Figure 3: React frontend on S3 delivered via CloudFront.

ALB routing to ECS Fargate

Figure 4: ALB routing traffic to ECS Fargate backend services.

CI/CD pipeline with CodePipeline

Figure 5: CI/CD pipeline built with AWS CodePipeline.

CodePipeline stages

Figure 6: CodePipeline source, build, and deploy stages.

DynamoDB and Lambda data layer

Figure 7: DynamoDB for messaging with Lambda stream processing.

Architectural Overview

Cruddur is built as a modern, scalable, and low-cost web application. The user interface (frontend) is separate from the business logic (backend).

  • The frontend is a React application that users open in their browser.
  • The backend is a Python Flask application. It handles tasks like creating posts, managing user data, and sending messages. It runs in Docker containers on AWS Fargate, which manages the server infrastructure for you.
  • Data lives in two databases, chosen by data type:
    • PostgreSQL (RDS): For structured data like user profiles and posts.
    • DynamoDB: For real-time chat messages, which need very fast reads and writes.
  • Security uses AWS Cognito for user sign-in and sign-up.

Why This Architecture?

This design was chosen for several key reasons:

  • Scalability: AWS Fargate and serverless parts let the application scale on its own to handle more users and traffic, with no manual work.
  • Reliability: Services run across multiple AWS Availability Zones and use managed services like RDS and DynamoDB. This keeps the application available even when parts fail.
  • Cost-Effectiveness: With a serverless-first approach, you pay only for the resources you use. That costs less than running servers 24/7.
  • Maintainability: With the frontend and backend separate, different teams can work on each one on its own. Containers keep the environment the same from development to production.