Performance Test Report

Introduction

This document provides details on the performance measurement approach of prioritized scenarios of MOSIP modules and provides detailed reports on the results.

Scope

APIs in all modules are prioritized based on the high load expectation and usage frequency by other modules.

There are 3 types of performance scenarios covered in this report

  • Prioritized single API performance (For most modules)

  • End to end UI API sequence performance (For pre-registration module)

  • End to end message delivery performance (For web-sub module)

All individual test scenarios from the modules are listed below.

Testing Tools & Techniques

Approach

The approach to performance testing differs based on the testing scenarios and are detailed as per the categorization as below.

Prioritized Single API Performance

  • Run a single pod of the application hosting the required API

  • Run four pods each of the dependent applications to cater the load implied from the test application

  • Simulate varied load profilers like 10, 30, 50 etc.. concurrent users from Jmeter for that single API for a period of one hour

  • Record the average and 90th percentile response time metrics specific to each load profiles

  • Verify that JVMs show stable memory and CPU usage over the increasing load profiles.

End to End UI API Sequence Performance

  • Run a single pod for each application hosting the required APIs called directly from Jmeter

  • Run four pods each of the dependent applications to cater the load implied from the test application

  • Simulate varied load profilers like 50, 80, 100 etc.. concurrent users from Jmeter for end to end sequence of APIs called from UI for a period of one hour

  • Record the average and 90th percentile response time metrics for entire end to end API sequence for each load profiles

  • Verify that JVMs show stable memory and CPU usage over the increasing load profiles.

End to End Message Delivery Performance

  • Run a single pod for each application hosting the required APIs called directly from Jmeter

  • Run four pods each of the dependent applications to cater the load implied from the test application

  • Simulate varied load profilers like 10, 30, 50 etc.. concurrent users to publish continues messages to the test application for a period of one hour

  • Record the average and 90th percentile response time metrics for publish API for each load profiles

  • Record the average and 90th percentile delivery time metrics for entire end to end message delivery for each load profiles

Build Details

Environment Setup

Hardware / VM details

Pod Resource allocation

Test Results

Prioritized single API performance

90th Percentile Response Times

Detailed response time details

Detailed Metrics for all 14 modules is available below:

Audit Manager

Run 1: 50 concurrency

Jmeter Aggregate Report

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

Application Response Time Graph from Kibana

Dependent Application Response Time Graph from Kibana

Dependency app graph for auth manager service was empty so not attached.

Run 2: 30 concurrency

Jmeter Aggregate Report

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

Application Response Time Graph from Kibana

Dependent Application Response Time Graph from Kibana

Application dependency graph was empty so not attached.

Auth Manager

Run 1: 30 concurrency

Aggregate Report from Jmeter

Response Time Percentile Graph using Jmeter

We only have the graph for Validate token as the previous ones were cleared

CPU and Memory Utilization Graphs using Grafana

Application Response Time Graph from Kibana

Dependent Application Response Time from Kibana

Dependency app graph was empty so so not attached.

Notes:

Keycloak was having issue by end of client id secret key API run, so the keycloak was restarted before the start of user id password API

Run 2: 50 concurrency

Aggregate Report from Jmeter

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

Application Response Time Graph from Kibana

Dependent Application Response Time Graph from Kibana

Dependency app graph was empty so so not attached.

Notes:

Keycloak was having issue by end of user id password API run, so the keycloak was restarted before the start of validate token API

Kernel services

Run 1: 30 concurrency

Aggregate Report from Jmeter

Note: idgenerator- generate vid api threw error as “VID not available for allocation error”, so it ran only for around 20 mins rest all other api’s ran for the complete 1 hour run.

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

Application Response Time Graph from Kibana

Note: idgenerator & pridgenerator services are vertx apps so there are no kibana graphs for the same

Dependent Application Response Time Graph from Kibana

Dependency app graph was empty so above are the graphs for the application services from kibana

Notes: Some of the kernel service api’s failed with oomkilled & authentication failed issues, so restarted the same and then continued the load test from the next set of api’s that’s why we have multiple graphs from jmeter & grafana.

Run 2: 10 & 50 concurrency

Aggregate Report from Jmeter

Note: idgenerator- generate vid api threw error as “VID not available for allocation error”, so it ran only for around 10 mins & also notification manager sms api & rid generator api failed completely with 502 bad gateway errors for 50 concurrency.

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

Note: The grafana graphs for the other services like otpmanager, ridgenerator, pridgenerator & id generator services are lost as they were old data

Application Response Time Graph from Kibana

Note: idgenerator & pridgenerator services are vertx apps so there are no kibana graphs for the same

Dependent Application Response Time from Kibana

Dependency app graph was empty so above are the graphs for the application services from kibana

Notes: Some of the kernel service api’s failed with oomkilled & authentication failed issues, so restarted the same and then continued the load test from the next set of api’s that’s why we have multiple graphs from jmeter & grafana.

IDA

Run 1: 10 concurrency

Aggregate Report from Jmeter

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

Grafana graphs were erased for older data

Application Response Time Graph from Kibana

Dependent Application Response Time from Kibana

Run 2: 30 concurrency

Aggregate Report from Jmeter

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

Grafana graphs were erased for older data.

Application Response Time Graph from Kibana

Dependent Application Response Time from Kibana

Registration Processor

Run 1: 30 concurrency

Aggregate Report from Jmeter

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

Application Response Time Graph from Kibana

No data was captured for registration processor registration status service graph in Kibana for the entire test duration.

Note: Registration processor stage group 1 service is a vertx app so there is no Kibana graph for this.

Dependent Application Response Time from Kibana

Run 2: 10 concurrency

Aggregate Report from Jmeter

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

Application Response Time Graph from Kibana

No data was captured for registration processor registration status service graph in Kibana for the entire test duration.

Note: registration processor stage group 1 service is a vertx app, so there is no kibana graph for this.

Dependent Application Response Time from Kibana

Syncdata

Run 1: 30 concurrency

Aggregate Report from Jmeter

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

Application Response Time Graph from Kibana

Dependent Application Response Time from Kibana

Run 2: 10 & 50 concurrency

Aggregate Report from Jmeter

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

Application Response Time Graph from Kibana

Dependent Application Response Time from Kibana

Resident

Run 1: 30 concurrency

Aggregate Report from Jmeter

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

CPU container usage grafana graphs are not available for resident service container

Application Response Time Graph from Kibana

Dependent Application Response Time from Kibana

Run 2: 10 concurrency

Aggregate Report from Jmeter

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

CPU container usage grafana graphs are not available for resident service container

Application Response Time Graph from Kibana

Dependent Application Response Time from Kibana

Datashare

Run 1: 30 concurrency

Aggregate Report from Jmeter

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

Application Response Time Graph from Kibana

Dependent Application Response Time from Kibana

Run 2: 10 & 50 concurrency

Aggregate Report from Jmeter

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

Application Response Time Graph from Kibana

Dependent Application Response Time from Kibana

ID Repository

Run 1: 30 concurrency

Aggregate Report from Jmeter

Note: Add Identity api threw a lot of duplicate key constraint errors ~27.29 %

\norg.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "uk_uin_reg_id"

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

Application Response Time Graph from Kibana

No data was captured for the Kibana graphs of id repository identity & VID services

Dependent Application Response Time from Kibana

Run 2: 10 & 50 concurrency

Aggregate Report from Jmeter

Note: Add Identity API threw a lot of duplicate key constraint errors ~27.29 %

\norg.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "uk_uin_reg_id"

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

Application Response Time Graph from Kibana

No data was captured for the Kibana graphs of ID repository identity & VID services

Dependent Application Response Time from Kibana

Masterdata

Run 1: 30 & 50 concurrency

Aggregate Report from Jmeter

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

No data was captured for the Grafana - CPU & memory container usage graphs

Application Response Time Graph from Kibana

Dependent Application Response Time from Kibana

No data was captured for dependency apps in kibana

Run 2: 10 & 30 concurrency

Aggregate Report from Jmeter

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

No data was captured in Grafana for CPU & memory container usage graphs

Application Response Time Graph from Kibana

Dependent Application Response Time from Kibana

No data was captured for dependency apps in Kibana.

Key Manager

Run 1: 30 & 50 concurrency

Aggregate Report from Jmeter

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

No data was captured in Grafana for CPU & memory container usage graphs.

Application Response Time Graph from Kibana

Dependent Application Response Time from Kibana

No data was captured for dependency apps in Kibana.

Run 2: 10 & 80 concurrency

Aggregate Report from Jmeter

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

Application Response Time Graph from Kibana

Dependent Application Response Time from Kibana

No data was captured for dependency apps in kibana.

End to End UI API Sequence Performance Metrics

Pre-registration

Run 1: 50 concurrency

90th Percentile response time ( End to end UI flow) - 18.9 sec

Aggregate Report from Jmeter

Note: Error percentage for pre-registration is due to the unavailability of slots for 53 unique registration centres.

Slots were generated for 947 unique reg centres and for the rest 53 centres slots were not created so this needs to be debugged further.

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

Self-response time graphs from Kibana

Dependent Application Response Time from Kibana

Notes: Prereg is connected to the internal database because when we tried connecting it to the external database we were getting failures while booking appointments manually.

Run 2: 80 concurrency

90th Percentile response time ( End to end UI flow) - 30.9 sec

Aggregate Report from Jmeter

Note:

  • Error percentage for pre-registration is due to the unavailability of slots for 53 unique reg centres. Slots were generated for 947 unique reg centres and for the rest 53 centres slots were not created so this needs to be debugged further.

  • Got some 504 gateway timeout errors for a few of the transactions before booking an appointment.

Response Time Percentile Graph using Jmeter

CPU and Memory Utilization Graphs using Grafana

Self-response time graphs from Kibana

Dependent Application Response Time from Kibana

Notes: Pre-registration is connected to the internal database because when we tried connecting it to an external database we were getting failures while booking appointments manually.

End to End Message Delivery Performance Metrics

30 concurrency

  • 90th Percentile response time

    • Publish (10 subscribers, 8 topics) - 0.221 sec

    • End to end message delivery (10 subscribers, 8 topics) -

      • finalAvgNinetiethPercentile=5777.9 sec finalAvgTurnAroundTime=3327.8 sec

      • Aggregate Report from Jmeter

  • Aggregate Report from Jmeter

  • Response Time Percentile Graph using Jmeter

50 concurrency

  • 90th Percentile response time

    • Publish (10 subscribers, 8 topics) - 0.25 sec

    • End to end message delivery (10 subscribers, 8 topics)

      • finalAvgNinetiethPercentile = 9810 sec

      • finalAvgTurnAroundTime = 5719.9 sec

  • Aggregate Report from Jmeter

  • Response Time Percentile Graph using Jmeter

Last updated

Copyright © 2021 MOSIP. This work is licensed under a Creative Commons Attribution (CC-BY-4.0) International License unless otherwise noted.

#300: Mock Services -1st draft

Change request updated