You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
We want to design a simple stress test tool for the aggregator and implement it in its first version.
The idea is to be able to verify that under a load of ~100 simulated signers, the aggregator:
Handles all Signer Key Registrations without error in a reasonable time (<30s per request)
Handles all Signer Signatures Registrations without error in a reasonable time (<30s per request)
Creates the associated certificates and artifacts for each signed entity type (<300s to retrieve the information)
All of these expectations are under a load of ~10-100 simulated clients requesting the certificates and artifacts routes, retrieving responses in a reasonable time (<10s per request)
Note: The simulated signers and clients should be represented by the HTTP calls they do on the aggregator REST API
Also, we want to understand and keep track of the limitations of this design which is expected to run on a single computer, and that will be enhanced in future issues. We will probably add retry strategies, ...
Nominal scenario
Phase 1: Run Without Clients
Create the Signer Fixtures
Launch aggregator
Wait for the aggregator REST API to be up (/epoch-settings route is answering 200)
Create and send the Signer Key Registrations payloads
Move the aggregator 1 epoch forward and wait for the aggregator to be at new epoch (/epoch-settings route)
Create and send the Signer Key Registrations payloads
Compute genesis certificate (no need to stop the aggregator)
Move the aggregator 1 epoch forward and wait for the aggregator to be at new epoch (/epoch-settings route)
Create and send the Signer Key Registrations payloads
Wait for pending certificate to be available for Mithril Stake Distribution (/certificate-pending route is answering 200)
Create the Signer Signatures Registrations payloads
Send the Signer Signatures Registrations payloads
Wait for the certificate to be available for Mithril Stake Distribution (/certificates route is answering 200)
Wait for the artifact to be available for Mithril Stake Distribution (/artifact/mithril-stake-distributions route is answering 200)
Wait for pending certificate to be available for Cardano Immutable Files (/certificate-pending route is answering 200)
Create the Signer Signatures Registrations payloads
Send the Signer Signatures Registrations payloads
Wait for the certificate to be available for Cardano Immutable Files (/certificates route is answering 200)
Wait for the artifact to be available for Cardano Immutable Files (/artifact/snapshots route is answering 200)
Phase 2: Run With Clients
1. Create the Clients payloads
2. Send in a separate thread the Clients payloads
3. Move the aggregator 1 epoch forward
4. Create and send the Signer Key Registrations payloads
5. Start same as Phase 1 step 4
Other tasks
Add concurrency level for requests?
Compute statistics for HTTP Client requests (min/max, avg, std, percentiles, ...) (e.g. with rewrk crate)
Compute summary statistics for the whole test
Measure performance of aggregator process and compute statistics
Update the README with command to run the stress test
Definition of Success/Failure
The test fails if:
Any step fails with a timeout
The aggregator crashes
The test succeeds otherwise
We will display statistics for each eligible step (error rates, error distributions, min/max, ...) and for clients requests (To be defined)
Issue
We want to design a simple stress test tool for the aggregator and implement it in its first version.
The idea is to be able to verify that under a load of
~100
simulated signers, the aggregator:<30s
per request)<30s
per request)<300s
to retrieve the information)~10-100
simulated clients requesting the certificates and artifacts routes, retrieving responses in a reasonable time (<10s
per request)Note: The simulated signers and clients should be represented by the HTTP calls they do on the aggregator REST API
Also, we want to understand and keep track of the limitations of this design which is expected to run on a single computer, and that will be enhanced in future issues. We will probably add retry strategies, ...
Nominal scenario
/epoch-settings
route is answering200
)1
epoch forward and wait for the aggregator to be at new epoch (/epoch-settings
route)1
epoch forward and wait for the aggregator to be at new epoch (/epoch-settings
route)/certificate-pending
route is answering200
)/certificates
route is answering200
)/artifact/mithril-stake-distributions
route is answering200
)/certificate-pending
route is answering200
)/certificates
route is answering200
)/artifact/snapshots
route is answering200
)1
epoch forwardOther tasks
rewrk
crate)README
with command to run the stress testDefinition of Success/Failure
We will display statistics for each eligible step (error rates, error distributions, min/max, ...) and for clients requests (To be defined)
Design
Here is the design that we have created:
![Image](https://private-user-images.githubusercontent.com/5566665/246872509-ba3f6c73-fa75-42fe-b6d8-38a506e07549.jpg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzOTgxMDIsIm5iZiI6MTczOTM5NzgwMiwicGF0aCI6Ii81NTY2NjY1LzI0Njg3MjUwOS1iYTNmNmM3My1mYTc1LTQyZmUtYjZkOC0zOGE1MDZlMDc1NDkuanBnP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxMiUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTJUMjIwMzIyWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9YTk4NTcxNzMyYmM2MTI1NWFmYWZmMmU4ZGRhYzlmOTk1ZDc4NDgwYmI4NjQ3ZGZmNWNkODVmNWQyZmRmOTQ5NyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.2kfn4h88nW2hYc7Ms00ZumVvLch2sO6mRCReOq7ZTy0)
Parent issue
#904
The text was updated successfully, but these errors were encountered: