Benchmark server scalability
From some discussion in #8906 (closed), we got to the following list of tasks for benchmarking server scalability:
- Create a server-setup script that (re)creates a number of test databases.
- Create a resource monitor that can start/stop and returns cpu/mem/responsiveness information for a process.
- Create a test controller server that listens on a port and can trigger the two above over HTTP.
- Add a layer of TLS with nginx, disable TLS in Soledad Server.
- Create templates of request bodies for different sizes of blobs.
- Create a script that takes N, M, the number of users and a file with the request body and calls ab against the server.
- Create a script that stresses the server with requests.
- Create a test controller client that can trigger the two above.
- Add ability to query the test controller server.
- Define test scenarios (N, M, size of requests, number of different users, etc).
- Add a method that orchestrates the test for a scenario, run for different scenarios.
- Make the test run with enough steps in the number of clients to create a nice curve.
- Research parameters to consider tests as passing or failing.
- Run increasingly heavier scenarios until failure.
- Run different times for different metrics (cpu-time vs mem vs responsiveness)
Add ability to save results.Results are being saved in a dedicated repo for now.
- Find servers to run test (one for client and the other for server).
- Configure one server as test server.
Configure the other server as test client.Tests are being run from dev machine.
Configure a trigger of the test for every commit/merge.Not doing this now, tests are lengthy and automation and storage are not a priority.
- Come up with a nice way to present results: max clients, time/cpu/mem taken, responsiveness.
- Add graphs that show the nice results.
Add a dashboard page for viewing all results.Not a priority right now.
Update (2017-11-02): it seems to make more sense now to change the original plan and stick with FunkLoad reports for now instead of investing more time to automate runs and storage of results, so I'm crossing out some items in the list above.