|
| 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 | + |
| 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