PTF - [Quesnelia][Eureka] Searching via mod-search

PTF - [Quesnelia][Eureka] Searching via mod-search

Overview

  1. In this testing effort we perform load tests of inventory searching via mod-search on the Quesnelia release.

  2. 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. 

  3. 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 operations

  • For 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

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
ERROR: "Too Many Requests"

3

20 vUsers - Okapi retest

Completed with errors

41894 errors out of 252249 API calls
ERROR: "Too Many Requests"

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 %

 

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

 

 

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