Project Overview
This project focused on evaluating the performance and scalability of a deployed AWS infrastructure supporting both a front-end Angular application and a back-end Node.js service. The infrastructure includes components like AWS EC2 instances, an Application Load Balancer (ALB), an Aurora Serverless RDS database, and NGINX web servers. Apache JMeter was used to conduct performance load testing, simulating up to 1,000 concurrent users to assess the system's ability to handle high traffic and maintain optimal performance.
Technologies and Services Used
Apache JMeter: For performance and load testing.
AWS EC2: Hosting the Node.js back-end and serving the Angular front-end.
AWS Application Load Balancer (ALB): Distributing incoming traffic across EC2 instances.
Amazon Aurora Serverless RDS: For database scalability and performance.
NGINX: Used as a web server on Ubuntu instances within EC2.
Key Responsibilities:
Test Plan Design: Designing a comprehensive test plan using Apache JMeter to simulate up to 1,000 concurrent users.
Load Testing Execution: Setting up and executing performance load tests against the deployed AWS infrastructure, focusing on both the front-end and back-end services.
Performance Monitoring: Monitoring system performance during load tests, including CPU utilization, memory usage, response times, and database performance.
Analysis and Optimization: Analyzing the results of the load tests to identify potential bottlenecks or performance issues and making recommendations or adjustments to optimize the infrastructure.
Reporting: Compiling detailed reports of the load test results, highlighting key metrics, findings, and any optimizations performed to enhance system performance.
JMeter Test Plan (XML)
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.4.1">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
<boolProp name="TestPlan.functional_mode">false</boolProp>
<boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="TestPlan.user_define_classpath"></stringProp>
</TestPlan>
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<intProp name="LoopController.loops">1</intProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">1000</stringProp>
<stringProp name="ThreadGroup.ramp_time">60</stringProp>
<longProp name="ThreadGroup.start_time">1640995200000</longProp>
<longProp name="ThreadGroup.end_time">1640995200000</longProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
<hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments">
<collectionProp name="Arguments.arguments">
<elementProp name="" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value"></stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name"></stringProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="HTTPSampler.domain">your-domain.com</stringProp>
<stringProp name="HTTPSampler.port">80</stringProp>
<stringProp name="HTTPSampler.protocol">http</stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">/your-endpoint</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<stringProp name="HTTPSampler.monitor">false</stringProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree/>
<ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<boolProp name="time">true</boolProp>
<boolProp name="latency">true</boolProp>
<boolProp name="timestamp">true</boolProp>
<boolProp name="success">true</boolProp>
<boolProp name="label">true</boolProp>
<boolProp name="code">true</boolProp>
<boolProp name="message">true</boolProp>
<boolProp name="threadName">true</boolProp>
<boolProp name="dataType">true</boolProp>
<boolProp name="encoding">false</boolProp>
<boolProp name="assertions">true</boolProp>
<boolProp name="subresults">true</boolProp>
<boolProp name="responseData">false</boolProp>
<boolProp name="samplerData">false</boolProp>
<boolProp name="xml">false</boolProp>
<boolProp name="fieldNames">true</boolProp>
<boolProp name="responseHeaders">false</boolProp>
<boolProp name="requestHeaders">false</boolProp>
<boolProp name="responseDataOnError">false</boolProp>
<boolProp name="saveAssertionResultsFailureMessage">true</boolProp>
<boolProp name="assertionsResultsToSave">0</boolProp>
<boolProp name="bytes">true</boolProp>
<boolProp name="sentBytes">true</boolProp>
<boolProp name="url">true</boolProp>
<boolProp name="threadCounts">true</boolProp>
<boolProp name="idleTime">true</boolProp>
<boolProp name="connectTime">true</boolProp>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
</jmeterTestPlan>
Project Outcomes
Scalability Validation: Successfully validated the AWS infrastructure's ability to handle up to 1,000 concurrent users, ensuring that both the front-end and back-end services performed optimally under high load.
Performance Optimization: Identified and resolved performance bottlenecks, resulting in improved response times and more efficient resource utilization.
Infrastructure Resilience: Demonstrated the resilience and robustness of the AWS-based infrastructure, confirming its capability to maintain high availability and performance during peak traffic periods.
Comprehensive Reporting: Provided detailed reports on the load testing results, offering insights into system behavior under stress and guiding future optimization efforts.
Latest Projects
Things I do

CLOUD
Amazon Web Services
AZURE Cloud
Google Cloud Platform
IBM Cloud
DevOps Tools
Jenkins
Ansible for software provisioning
Packer for automated machine images
AWS CodePipeline
AWS CodeDeploy
Azure Pipelines
Chef
Github Actions
GitLab CI/CD
CircleCI
Microservices
Kubernetes
Docker
AWS ECS
AWS EKS
AKS
Azure Container Apps
Monitoring and Alerting
Telegraf
Prometheus
Grafana
Pagerduty
Infrastructure as Code
CloudFormation
Terraform
AWS CDK (Python & Typescript)
Operating System
Most of Linux Server Distributions
Window Server 2019/2022
Databases
MySQL
MariaDB
MongoDB
PostgreSQL
MSSQL
Scripting
Shell Scripting
Python
YAML
PowerShell
My Certifications


Let's Talk
Book a call to talk regarding the current vacancy at your organization.
@2024 RAJ PATEL