PTF - [Quesnelia][Eureka] Searching via mod-search
- 1 Overview
- 2 Summary
- 3 Recommendations & Jiras
- 4 Test Runs
- 5 Results and Comparison Eureka and non-Eureka
- 6 Response time graphs
- 7 Resource Utilization
- 7.1 Memory Utilization
- 7.1.1 1 vUser - Okapi
- 7.1.2 20 vUsers - Okapi
- 7.1.3 1 vUser - Eureka
- 7.1.4 20 vUsers - Eureka
- 7.2 Service CPU Utilization
- 7.2.1 1 vUser - Okapi
- 7.2.2 20 vUsers - Okapi
- 7.2.3 1 vUser - Eureka
- 7.2.4 20 vUsers - Eureka
- 7.3 RDS CPU Utilization
- 7.3.1 1 vUser - Okapi
- 7.3.2 20 vUsers - Okapi
- 7.3.3 1 vUser- Eureka
- 7.3.4 20 vUsers - Eureka
- 7.4 RDS Connections count
- 7.4.1 1 vUser - Okapi
- 7.4.2 20 vUsers - Okapi
- 7.4.3 1 vUser - Eureka
- 7.4.4 20 vUsers - Eureka
- 7.5 OpenSearch metrics
- 7.1 Memory Utilization
- 8 Appendix
- 8.1 Infrastructure
- 9 Additional information
- 9.1 Test Details
- 9.1.1 1 vUser - Okapi
- 9.1.2 1 vUser - Eureka
- 9.1.3 20 vusers - Okapi
- 9.1.4 20 vUsers - Eureka
- 9.1.5 Additional screenshots:
- 9.1 Test Details
Overview
In this testing effort we perform load tests of inventory searching via mod-search on the Quesnelia release.
These tests with 1, 20 virtual users were run in both Okapi Quesnelia (qcp1) environment for baseline numbers and Eureka Quesnelia (qecp1) environment with the goal of comparing Eureka's performance against Okapi FOLIO.
PERF-993: [Quesnelia][Eureka] Searching via mod-searchClosed
Summary
For a single user, performance is better in the Eureka environment. However, when scaled to 20 vusers, there is a performance degradation of approximately 7.8%
It is impossible to reach an average throughput higher than 50.9 OpenSearch search ops/s for the Eureka environment (for non-Eureka, or "Okapi", environment over 55.2 ops/s). A higher number of users up to 60 will only increase response time even if we have 4 tasks for mod-search. We observed an increase in response time from sidecar-mod-search from 282ms for 5 vusers and up to 1,2 seconds for 60 vusers. Additional information in this table.
Very high load for the OpenSearch cluster with more than 52 search operations per second. ERROR: "Too Many Requests" observed during the test with 20 vusers - non-Eureka.
OpenSearch CPU utilization was up to 100% with 20 user tests.
mod-search's service CPU utilization was up to 14%, all other services' CPU utilization did not exceed 6%.
Memory utilization was stable and no memory leaks or OOM issues were observed.
RDS CPU utilization was about up to 10% for all tests.
Non-Eureka environment uses 50 fewer database connections than Eureka. The number of connections for mod-search was the same for both environments
{"name":"DB_MAXPOOLSIZE","value":"20"},
Recommendations & Jiras
Errors during 20 vusers - non-Eureka test are due to a very high load for the OpenSearch cluster. For this test we have a throughput of about 55 ops/s and the maximal OpenSearch throughput is 52 search operations (https://repost.aws/knowledge-center/opensearch-resolve-429-error) according to our cluster configurations.
Use the following formula to calculate maximum active threads for search requests:int ((# of available_processors * 3) / 2) + 1.For an r6g.2xlarge.search node, you can perform a maximum of 13 search operations per second:
(8 VCPUs * 3) / 2 + 1 = 13 operationsFor an OpenSearch Service cluster with four nodes, you can perform a maximum of 52 search operations:
4 nodes * 13 = 52 operations
To avoid this error, either increase the number of OpenSearch data nodes to 5 or scale the size of the data nodes to a bigger one.
Test Runs
60 minutes tests
Test# | Test name | results | Comments |
|---|---|---|---|
1 | 1 vUser - Okapi | Success | 0 errors |
2 | 20 vUsers - Okapi | Completed with errors | 3224 errors out of 199179 API calls |
3 | 20 vUsers - Okapi retest | Completed with errors | 41894 errors out of 252249 API calls |
4 | 1 vUser - Eureka | Success | 0 errors |
5 | 20 vUsers - Eureka | Success | 0 errors |
Results and Comparison Eureka and non-Eureka
mod-search performance is good, maximal OpenSearch throughput is 52 search operations (https://repost.aws/knowledge-center/opensearch-resolve-429-error).
This table shows total requests processed increase as we increase the number of users concurrently.
| 1 vUser - Okapi (avg) | 1 vUser - Eureka (avg) | Delta % | 20 vUsers - Okapi (avg) | 20 vUsers - Eureka (avg) | Delta % |
|---|---|---|---|---|---|---|
Total requests processed in 60 minutes test run | 19657 | 20811 | 5.9% | 199179 (3224 errors) | 183864 | -7.6% |
Average throughput (ops/s) | 5.44 | 5.77 | 6% | 55.2 | 50.9 | -7.8% |
Average response time (ms) | 194 | 185 | -4.6% | 365 | 382 | 4.7% |
Average response time (ms) for all of the samples | 216.75 | 206.57 | -4.93% | 407.68 | 438.35 | 7.0% |
| 1 vUser - Okapi | 1 vUser - Eureka |
| 20 vUsers Okapi | 20 vUsers - Eureka |
| ||||
|---|---|---|---|---|---|---|---|---|---|---|
transaction | Number Of Samples | Average | Number Of Samples | Average | Delta % | Number Of Samples | Average | Number Of Samples | Average | Delta % |
MSF_GET /search/authorities keyword <> random sentence | 393 | 207 | 416 | 200 | -3.38 | 3943 | 540 | 3682 | 477 | -11.67 |
MSF_GET /search/authorities keyword <> randomword | 393 | 202 | 417 | 194 | -3.96 | 4104 | 516 | 3684 | 462 | -10.47 |
MSF_GET /search/authorities keyword = *random sentence* | 393 | 1224 | 416 | 1142 | -6.7 | 3933 | 2120 | 3682 | 1545 | -27.12 |
MSF_GET /search/authorities keyword = random sentence | 393 | 30 | 416 | 23 | -23.33 | 3937 | 95 | 3682 | 245 | 157.89 |
MSF_GET /search/authorities keyword = randomword | 393 | 44 | 417 | 32 | -27.27 | 4246 | 127 | 3684 | 234 | 84.25 |
MSF_GET /search/authorities keyword == random sentence | 393 | 29 | 416 | 22 | -24.14 | 3949 | 92 | 3683 | 225 | 144.57 |
MSF_GET /search/authorities keyword == randomword | 393 | 43 | 417 | 31 | -27.90 | 4041 | 138 | 3683 | 244 | 76.81 |
MSF_GET /search/authorities keyword all *randomword* | 393 | 891 | 417 | 821 | -7.86 | 3997 | 1626 | 3683 | 1191 | -26.75 |
MSF_GET /search/authorities keyword all random sentence | 393 | 32 | 417 | 25 | -21.88 | 3979 | 104 | 3683 | 243 | 133.65 |
MSF_GET /search/authorities keyword all randomword | 394 | 67 | 417 | 54 | -19.40 | 5481 | 141 | 3686 | 262 | 85.82 |
MSF_GET /search/authorities keyword any random sentence | 393 | 99 | 416 | 86 | -13.13 | 3958 | 226 | 3683 | 272 | 20.35 |
MSF_GET /search/authorities keyword any randomword | 394 | 55 | 417 | 43 | -21.82 | 4618 | 129 | 3685 | 232 | 79.84 |
MSF_GET /search/instances: contributors <> 2random words | 393 | 158 | 416 | 152 | -3.80 | 3877 | 379 | 3679 | 408 | 7.65 |
MSF_GET /search/instances: contributors = *randomword | 393 | 198 | 416 | 192 | -3.03 | 3889 | 429 | 3680 | 441 | 2.80 |
MSF_GET /search/instances: contributors = randomword* | 393 | 57 | 416 | 46 | -19.30 | 3892 | 101 | 3680 | 227 | 124.75 |
MSF_GET /search/instances: contributors == 2random words | 393 | 23 | 416 | 17 | -26.09 | 3880 | 78 | 3679 | 217 | 178.21 |
MSF_GET /search/instances: contributors all 2random words | 393 | 23 | 416 | 16 | -30.43 | 3876 | 85 | 3677 | 231 | 171.76 |
MSF_GET /search/instances: contributors all randomword | 393 | 58 | 416 | 47 | -18.97 | 3896 | 109 | 3680 | 232 | 112.84 |
MSF_GET /search/instances: contributors any 2random words | 393 | 65 | 416 | 51 | ||||||