The service is a primitive platform for real-time communication between users. It provides an infrastructure for sending and receiving messages, supporting features such as text messaging, group chats, and more. Built with performance in mind, it ensures seamless communication across various devices and platforms.
┌─────────────┐
│ Clients │
└─────────────┘
│
▼
┌─────────────┐
│ Load │
│ Balancer │
└─────────────┘
│
┌─────┼─────┐
▼ ▼ ▼
┌─────────────┐
│ WebSocket │
│ and │
│ Application │
│ Servers │
└─────────────┘
│
┌─────┼─────┐
▼ ▼ ▼
┌─────────────┐
│ Backend │
│ Services │
└─────────────┘
│ │
▼ ▼
┌────────┐ ┌────────┐
│Database│ │ Cache │
└────────┘ └────────┘
- User management: Register, Update, Authenticate, Remove a user
- Real-time Messaging: Instantly send and receive messages in real-time.
- Group Chats: Create and participate in group conversations with multiple users.
- Notifications: Receive push notifications for new messages and updates.
- Security: Ensure the privacy and security of messages with end-to-end encryption.
- Backend: Go, MySQL
- Frontend: WIP
- Messaging Protocol: WebSocket
- Deployment: Docker, GCPDM
gcloud deployment-manager deployments create messenger-app-infra --config messenger-deployment.yaml
sudo apt update
sudo apt install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
docker pull us190190/messenger-app:3.0
docker run -e DB_HOST=XYZ -e DB_PASSWORD=XYZ -e DB_PORT=XYZ -e DB_USER=XYZ -p 443:443 messenger-app:3.0
- User management APIs collection: [User management APIs.postman_collection.json]
- Messenger connection: [wss://<SERVER_IP_ADDRESS>:443/start]
- Frontend application: To consume the messenger service
- Refactoring: It needs cleaning
- Migrations: Adding database migrations and seeder for the service
- Scalability: Scale the messaging service to accommodate growing user bases
- Reliability: Ensure high availability and reliability with fault-tolerant architecture.
- Both live messages don't contain sender user information (sender is required to share his/her info along with each message)
- Need to manually add VM instance public IP to allow connectivity with DB instance
