The entire project codebase is available on GitHub. This project has three components, each residing in separate repositories:
- ErlyTalk – Infrastructure as Code (IaC)
- ErlyTalk – Messaging Service (Backend)
- ErlyTalk – Web (Web interface)
Let’s dive into each component individually:
Infrastructure as Code
It provides a fully automated end-to-end deployment of the ErlyTalk Messaging Service and Web application on AWS. It leverages Terraform and Ansible to provision and configure the necessary AWS resources, allowing for seamless scaling based on the load.
- The various AWS services such as VPC, EC2, Route 53, S3, DynamoDB, CloudWatch, EKS, and IAM are utilized for the infrastructure.
- The infrastructure is provisioned by using Terraform.
- Deployment of micro-services on EKS (Kubernetes) is carried out using Ansible.
- Automatic scaling of the EKS cluster is facilitated by Kubernetes Autoscaler.
- Container Insights is used to monitor the EKS cluster, providing valuable insights into its performance and health.
- DNS records for EKS Ingress and Services are created in Route 53 using ExternalDNS.
- Provisioning of ALB/NLB for EKS Ingress and Services is handled by AWS Load Balancer Controller.
It’s a distributed WebSocket server in Erlang that handles incoming frames and dispatches them to the designated destination. It provides a scalable and fault-tolerant solution for real-time communication over WebSocket connections in a distributed environment.
- Messages between the Erlang nodes cluster are routed by the Distributed Erlang System.
- Users’ process IDs (PIDs) are stored and synchronized across the Erlang nodes cluster using Syn.
- The HTTP server is handled by Cowboy.
- New Erlang nodes are being discovered automatically by using Kubernetes headless service.
It’s a front-end application in Node.js for the ErlyTalk Messaging Service. It provides a user-friendly interface for real-time communication over WebSocket connections.
By combining Erlang’s concurrent programming capabilities with the power of Kubernetes, we have built a highly scalable and distributed messaging application. The Erlang-based messaging service ensures efficient message handling and fault tolerance, while the Kubernetes-based infrastructure guarantees seamless scalability.