In order to measure the performace of the K2Bridge, we performed several tests simulating typical use cases, and discovering the fail point for certain environment configuration.
The test are based on a the public github database, and the pushevents
table with 20 columns and 10M entries.
- Jmeter machine: 3G Mem (Max 8), 400m CPU (Max 1).
- AKS Performance cluster:
- Kubernetes version: 1.14.8
- OS type: Linux
- Node count: 3
- Node size: Standard_DS3_v2
- K2 Bridge pods: 1
The baseline performance test will consist of various queries:
- A query that yields many columns.
- A query with one filter.
- A query with many filters.
- A query based on many filters and string wildcard.
- A query with no filters and one Lucene range.
- query with no filters and string wildcard.
- A query with no filters and two Lucene range.
- Baseline performance test consisted on the various query types.
- Load test to find the fail point at a certain environment.
- Soak test that runs on the same environment setup, just below the fail point, for few hours.
Baseline test ran 5 users which executed 7 types of queries, in parallel order. This test demonstrated the performance of each query type.
Consclusion
After running the tests, we can see that queries without filters or wildcards were much faster, even if all columns were requested, which is expected. Queries with filters run much longer.
Stepped Ramp up test gradually increased the user count in order to search the "breaking point".
Consclusion
In our case, for the given pod spec the breaking point was 160 users.
Based on the breaking point, we ran a constant test of 140 users, just below the breaking point, in order to discover potential memory leaks and unexpected behaviors.
Consclusion
The result shows the system works as expected. The system maintain a stable behavior, memory usage, throughput and response time.
You can experiemnt with the JMeter files we used:
And the various queries we used:
- MSearch_github_many_filters_query.json
- MSearch_github_many_filters_strings_wildcard_query.json
- MSearch_github_no_filters_one_lucene_range_query.json
- MSearch_github_no_filters_string_wildcard_query.json
- MSearch_github_no_filters_two_lucene_range_query.json
- MSearch_github_one_second_query.json
- MSearch_github_onefilter_query.json
- MSearch_github_query.json