Skip to content

Commit 0bc4880

Browse files
authored
Add benchmark details (#342)
1 parent 360b46c commit 0bc4880

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

benchmarks/README.md

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
## Benchmarking
2+
3+
We use K6 to benchmark Parseable. This document contains the results of our benchmarks and steps to run your own benchmarks in your environment to understand Parseable's performance characteristics.
4+
5+
#### Configuration
6+
7+
- Parseable version: `v0.3.0`
8+
- Server Instance: AWS EC2 `c4.2xlarge` (8 vCPU, 15 GiB RAM). Refer further details [here](https://aws.amazon.com/ec2/instance-types/).
9+
- Client Instance: AWS EC2 `c4.8xlarge` (36 vCPU, 60 GiB RAM). Refer further details [here](https://aws.amazon.com/ec2/instance-types/).
10+
11+
#### Conclusion
12+
13+
- Parseable is CPU bound. CPU was 100% with lot of memory and disk iops left.
14+
- Since we had a single client, it needed much more CPU to saturate Parseable. It would be ideal to test with distributed clients. But we expect similar performance from Parseable.
15+
- Parseable reached `32829.535634/s` in this setup.
16+
17+
#### Detailed Outcome
18+
19+
```bash
20+
k6 run load.js --vus=700 --duration=5m
21+
22+
/\ |‾‾| /‾‾/ /‾‾/
23+
/\ / \ | |/ / / /
24+
/ \/ \ | ( / ‾‾\
25+
/ \ | |\ \ | (‾) |
26+
/ __________ \ |__| \__\ \_____/ .io
27+
28+
execution: local
29+
script: load.js
30+
output: -
31+
32+
scenarios: (100.00%) 1 scenario, 700 max VUs, 5m30s max duration (incl. graceful stop):
33+
* default: 700 looping VUs for 5m0s (gracefulStop: 30s)
34+
35+
36+
data_received..................: 1.5 GB 5.0 MB/s
37+
data_sent......................: 8.0 GB 27 MB/s
38+
http_req_blocked...............: avg=19.35µs min=0s med=4.78µs max=431.69ms p(90)=7.35µs p(95)=9.81µs
39+
http_req_connecting............: avg=3.79µs min=0s med=0s max=73.48ms p(90)=0s p(95)=0s
40+
http_req_duration..............: avg=76.17ms min=344.43µs med=65.01ms max=636.72ms p(90)=128.99ms p(95)=149.54ms
41+
{ expected_response:true }...: avg=76.17ms min=344.43µs med=65.01ms max=636.72ms p(90)=128.99ms p(95)=149.54ms
42+
http_req_failed................: 0.00% ✓ 0 ✗ 9858220
43+
http_req_receiving.............: avg=541.7µs min=0s med=22.49µs max=218.44ms p(90)=164.95µs p(95)=389.52µs
44+
http_req_sending...............: avg=90.17µs min=0s med=21.07µs max=485.95ms p(90)=40.19µs p(95)=146.16µs
45+
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
46+
http_req_waiting...............: avg=75.54ms min=299.31µs med=64.81ms max=482.88ms p(90)=127.43ms p(95)=147.69ms
47+
http_reqs......................: 9858220 32829.535634/s
48+
iteration_duration.............: avg=426.2ms min=195.51ms med=422.99ms max=1.18s p(90)=499.06ms p(95)=522.91ms
49+
iterations.....................: 492911 1641.476782/s
50+
vus............................: 700 min=700 max=700
51+
vus_max........................: 700 min=700 max=700
52+
53+
54+
running (5m00.3s), 000/700 VUs, 492911 complete and 0 interrupted iterations
55+
default ✓ [======================================] 700 VUs 5m0s
56+
```
57+
58+
#### Grafana Dashboard
59+
60+
![Grafana Dashboard](https://raw.githubusercontent.com/parseablehq/.github/main/images/benchmarks/grafana.png)
61+
62+
NOTE: Benchmarks are nuanced and very much environment specific. So we recommend running benchmarks in the target environment to get an understanding of actual performance.
63+
64+
### Run your own load tests with K6
65+
66+
We have created a [K6](https://k6.io) script to load test a Parseable instance. The script is available [here](https://raw.githubusercontent.com/parseablehq/quest/main/testcases/load.js).
67+
68+
#### Pre-requisites
69+
70+
- [K6](https://k6.io) installed.
71+
- [Parseable](https://parseable.io) installed and running.
72+
73+
#### Start the script
74+
75+
Make sure to change the env vars as per your setup. Also fine tune `vu` and `duration` as per your needs.
76+
77+
```sh
78+
export P_URL="https://demo.parseable.io" # Parseable URL
79+
export P_STREAM="test" # Parseable stream
80+
export P_USERNAME="admin" # Parseable username
81+
export P_PASSWORD="admin" # Parseable password
82+
export P_SCHEMA_COUNT=20 # Number of different types of json formats to be sent to this stream
83+
k6 run --vus=700 --duration=5m https://raw.githubusercontent.com/parseablehq/quest/main/testcases/load.js
84+
```
85+
86+
## Elastic
87+
88+
Currently Elastic public benchmarks published here: [https://www.elastic.co/blog/benchmarking-and-sizing-your-elasticsearch-cluster-for-logs-and-metrics](https://www.elastic.co/blog/benchmarking-and-sizing-your-elasticsearch-cluster-for-logs-and-metrics).
89+
90+
As per this benchmark, Elastic is able to ingest 22000 events per second per node. Node specs: 8 vCPU, 32 GiB RAM.

0 commit comments

Comments
 (0)