With the rise of cloud computing, many companies are transitioning their desktop applications to Software as a Service (SaaS) in the AWS Cloud. Our clients were no exception, as they had our desktop ERP application and needed to migrate it to the cloud. By making this transition, our clients could benefit from enhanced scalability, improved performance, and cost savings. Additionally, with SaaS in the AWS Cloud our clients could access their data from anywhere at any time with an internet connection.

Setting up an ERP system using Vaadin platform with EKS in AWS can be a daunting task.This blog will explain how to set up an ERP system using Vaadin platform with EKS in AWS. We will discuss the advantages of using this technology, the steps involved in setting up an ERP system, and how to get started. Additionally, we will look at some of the common challenges that our clients have faced while setting up their ERP systems and provide solutions for them. With this knowledge, you should be able to set up your own ERP system easily and quickly.

The AWS Services and open source involved in the architecture:

  1. EKS
  2. ECR
  3. Codecommit
  4. Load balancers
  5. RDS
  6. Cloudwatch
  7. IAM
  8. Cognito

Open Source tools:

  1. Docker
  2. Jenkins
  3. Sonarqube

Solution overview

EKS

AWS Fargate is a serverless container service that allows users to run containers without having to manage servers or clusters. It is an ideal way to deploy and manage containers in the cloud. By leveraging the power of Amazon EKS, users can easily run Fargate profiles within their Kubernetes cluster and take advantage of the scalability and cost-efficiency of serverless technology. With Fargate, developers can focus on building applications instead of managing infrastructure, allowing them to quickly and easily deploy their applications with less effort.

CICD

Continuous Integration and Continuous Delivery (CICD) is a DevOps best practice that enables teams to build, test and deploy software quickly and reliably. In our case, deployment has been automated using Jenkins, it is a process that automates the process of building, testing, packaging, and deploying applications.

The CICD process typically starts with code being committed to a repository such as AWS CodeCommit and analyses/scans the code quality using Sonarqube. This triggers a build process using tools such as Maven which creates Docker images. The images are then stored in an Amazon Elastic Container Registry (ECR). Finally, the images are deployed to the target environment – EKS.

A Jenkinsfile is an essential part of the DevOps process, as it allows developers to define, compile, build, test and push images to Amazon ECR. It is a configuration file that defines a Jenkins Pipeline, which consists of multiple steps that are executed in order to complete the desired task. This makes it easier for teams to automate their workflow and ensure a consistent process each time they deploy an application. With the help of a Jenkinsfile, teams can ensure that their code is tested before it is pushed into the production environment, thus reducing the chances of errors and bugs.

Deployment strategy

By using canary deployment, developers can deploy a new version of their software while still receiving 100% of user traffic on the current version. This allows them to test the new version in a controlled environment and ensure that it is working properly before releasing it to all users. It also reduces the risk of any potential bugs or errors that could be caused by a sudden change in the system.

The idea of a canary version is to keep the user experience as smooth and uninterrupted as possible. This means that when issues arise with the new version, the service can quickly switch back to the original version without much disruption to users. This allows companies to test out new versions and features without risking a bad user experience or losing customers due to technical problems. By using this method, companies can ensure that their users are getting the best possible experience while also allowing them to experiment and innovate with their products.

With the introduction of new versions, it is important to ensure that the traffic is directed towards the new version. This can be done by gradually transitioning all users from the old version to the new one, so that in the end, 100% of traffic goes to the new version and the old version can be discarded. This allows for a smoother transition with no disruption of service and ensures that all users are using the most up-to-date version.

Vaadin Kubernetes tool kit has a feature of new version notification popup for the active users, which helps them stay updated with the latest version of the application. This feature allows users to be aware of any changes or upgrades that need to be made in order to keep their application running smoothly. With this feature, users can get notifications about any new updates or features that are available in the latest version of Vaadin and take action accordingly. This ensures that they are always up-to-date with the latest version and can make use of all its features and benefits. Canary deployment is a strategy that allows us to update and scale our infrastructure during business hours with zero downtime and no impact on the workload.

Hazelcast is an open-source in-memory data grid which provides a distributed architecture for applications requiring high performance and scalability. Vaadin is an open-source web framework which provides a rich set of UI components for building web applications. Together they can provide the necessary infrastructure for building a distributed system with worker nodes, frontend nodes and session replication.

The Worker Nodes are responsible for executing tasks, while the Frontend Nodes provide an interface between the user and the cluster. Together, they form a powerful system that can be used to process large amounts of data in a distributed manner. With Hazelcast, users can easily scale up their computing power by adding more Worker Nodes or Frontend Nodes as needed. This makes it an ideal solution for applications that require high availability and scalability.

Infra Monitoring:

AWS container insights: users can monitor the performance of their containers in real-time and get detailed metrics such as CPU usage, memory usage, disk I/O and network traffic. It provides insights into the performance and health of the containers, allowing developers and operations teams to quickly identify and address issues before they become problems. With its real-time monitoring capabilities

AWS Xray/Jagger: AWS X-Ray is a powerful tool for application monitoring and helps developers to identify and troubleshoot performance issues in their applications.

Conclusion:

In this blog post, we have explored the automated deployment of a Vaadin ERP system in an AWS EKS cluster with zero downtime. this architecture is a cost-effective solution since we are using serverless profiles. Not only does it reduce the cost of server maintenance, but it also simplifies the process of deployment and scaling.

Ref:

Vaadin Toolkit link: https://github.com/vaadin/kubernetes-kit/tree/main/kubernetes-kit-demo