# Review APP Low level design system ### Content index - [Definitions and requirements of business](./RequirementsOfBusiness.md) - [Requirements of the system](#requirements-of-the-system) - [Architecture of the system](#architecture-of-the-system) - [Modeling of data](#modeling-of-data) - [Testing](#testing) - [CI/CD Integration](#cd-integration) ### Requirements of the system Just design the system of backend, not the frontend **Review reader** - Just get content of reviews **GET** - ***Thousand of users(1000+ readers)*** can see the reviews - They must be able to see the reviews around the world - Response time must be less than **10 seconds** - In case, the reviews is more than **100** reviews, the response should be paginated - What's going on if the server is down? (Cache, CDN, etc) **Review publisher** - Create, edit and remove reviews of cameras (**POST**, **PUT**, **DELETE**) - **10 Users** can create reviews - Service must be available 24/7 - Review publisher must be able to authenticate (**Login** and **Logout**, **JWT**, **Register**) - Review publisher must be able to upload images - Response time must be less than **300 seconds** - **10 and 20 reviews** per day (No needs a lot of resources) - Publishers just can create reviews in **America Sur** ### Architecture of the system **Load Balancer** - [Nginx](https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/) or HAProxy - Local: Nginx with Docker - Production: Azure Load Balancer **Horizontal Container** - Local: [Docker](https://www.docker.com/) - Production: Azure Container App **ReviewReader**: - Tecnologies: [FastAPI](https://fastapi.tiangolo.com/lo/), [Pydantic](https://docs.pydantic.dev/latest/#example), [Python 3.11](https://docs.python.org/3/) and [aioredis](https://aioredis.readthedocs.io/en/latest/) - Local: Python with Docker - Production: Azure container App - Cache - Local: [Redis](https://redis.io/) with Docker - Production: Azure Cache for redis - Database - Local: [MongoDB](https://www.mongodb.com/) NoSQL with Docker - Production: MongoDB NoSQL **ReviewPublisher**: - Technologies: [Django Rest Framework](https://www.django-rest-framework.org/), [Django](https://www.djangoproject.com/) and [Python 3.10](https://docs.python.org/3/), [Django redis](https://github.com/jazzband/django-redis) - Local: Python with Docker - Production: Azure app service - Cache - Local: [Redis](https://redis.io/) with Docker - Production: Azure Cache for redis - Database: - Local: [MySQL](https://dev.mysql.com/doc/refman/8.0/en/) with Docker - Production: Azure MySQL Database **Authentication**: - Technologies: [Django Rest Framework](https://www.django-rest-framework.org/), [Django](https://www.djangoproject.com/) and [Python 3.10](https://docs.python.org/3/), [Django redis](https://github.com/jazzband/django-redis) and [JWT authentication](https://github.com/jazzband/djangorestframework-simplejwt) - Local: Python with Docker - Production: Azure functions - Cache - Local: [Redis](https://redis.io/) with Docker - Production: Azure Cache for redis - Database: - Local: [MySQL](https://dev.mysql.com/doc/refman/8.0/en/) with Docker - Production: Azure MySQL Database **Service of migration**: - Technologies: [PHP 8.2](https://www.php.net/), [Mongo PHP Library](https://github.com/mongodb/mongo-php-library), [MySQL PHP Library](https://github.com/abhishekgahlot/mysql-to-mongo) and [Composer](https://getcomposer.org/) - Local: PHP with Docker - Production: Azure functions ### Modeling of data ### Testing ### CI/CD Integration