An attempt to recreate one of the largest social networking application Twitter.
Note: This is my first attempt at developing a distributed system, so any feedback would be greatly appreciated.
- Edge Service (GraphQL)
- Media Service
- Notifications Service
- Search Service
- Timeline Service
- Tweet Service
- Web UI Service
- Golang (Internal Services)
- Next.JS (Website UI)
- Kafka (Pub/Sub)
- Apache Spark (Analytics)
- PostgreSQL (Main Database)
- PgPool II (Database Load Balancer)
- Redis (Caching)
- Docker (Containerization)
- Nginx (Load Balancer)
- GraphQL (Edge Server / Frontend for Backend)
- ElasticSearch (Searching & Indexing)
- Firebase Cloud Messenger (Notification Service)
- Create Tweets (text, images, videos, etc)
- View Timeline
- Like tweets
- Retweet / Quote Retweet
- Follow others
- Scalable & Efficient
- High Availability
- Metrics and analytics
- Notifications
- Observability & Monitoring (Prometheus, Grafana, Jaeger, etc)
Check here on how to run locally