Coder Social home page Coder Social logo

hyperledger-archives / aries-cloudagent-loadgenerator Goto Github PK

View Code? Open in Web Editor NEW
17.0 17.0 11.0 510 KB

aries-cloudagent-loadgenerator

Home Page: https://wiki.hyperledger.org/display/aries

License: Apache License 2.0

Dockerfile 0.48% Kotlin 85.60% Shell 13.92%

aries-cloudagent-loadgenerator's People

Contributors

dependabot[bot] avatar geahaad avatar holzeis avatar iliecirciumaru avatar lukwil avatar paulwen avatar ryjones avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aries-cloudagent-loadgenerator's Issues

Support multiple aca-py versions

In order to facilitate performance comparisons and testing of new changes, multiple aca-py versions should be supported, handled by the implementation and selectable by the user (see also #12 ).

Design and implement configuration files

Configuration file should allow to define:

  • versions of aca-py to be used in the test run
  • horizontal scaling (no. of instances per each applicable component)
  • test scenario
  • load configuration (request rate, or other parameters according to the selected test scenario)
  • duration of the test

Automate data visualization

The generation of a default set of data visualizations via the automated processing of logs data and test results should be implemented and documented

Schedule load at a constant rate

The first Load Generator enforces a maximum rate of parallel iterations. Thereby, the load is automatically reduced if the agent slows down over time. Next, we also want a load generator that schedules iterations at a fixed rate per minute.

Git Submodules

  • Add note to README to clone with submodules
  • switch to fixed version for submodules instead of latest commit

All docker-compose files should use the same network

Currently, communication between containers from the agent/loadgenerator networks to containers of the dashboard/logging network takes place via localhost of the host. To avoid this, all docker-compose files should use the same network and reference each other using the container names.

Full Process Load Generator

Setup

  1. Create Schema
  2. Create Credential Definition

Iteration

  1. Create Connection Invitation
  2. Accept Connection Invitation
  3. Issue Credential
  4. Request Credential

Update Test Flows to support multiple Holders

To scale the holder side we switched from one holder to many holders where each holder has its own wallet.

The load is distributed across the holder by the load generator. The initialization procedure for the following test flows still needs to be updated to support multiple holders. Each holder needs to be provisioned individually before starting the load generation.

  • Credential Issuance Flow (Issuer/Verifier needs to initiate a connection with each holder during initialization)
  • Proof Request Flow (Issuer/Verifier needs to initiate a connection with each holder during initialization AND issue a credential to each holder)

Differentiate between scheduled/started/finished to monitor the performance of the Load Generator

Scheduled = iterations scheduled by the Periodic Schedular
Started = iterations actually initiated by placing a HTTP Call to an AcaPy
FInished = all the iterations that have been finished

Scheduled and Started differs in case the thread pool responsible for executing the scheduled tasks to start iterations is exhausted as all the threads are currently busy trying to start new iterations.

Test Case: Issuer scenario

Implement a test-runner that simulates the tasks of an issuer.

One Iteration:

  1. create a new connection to the holder
  2. issue a new credential to the new connection

AcaPy health checks for automatic restarts

Try to set up a health check for AcaPy containers to ensure that they are restarted in case they get in trouble.
Maybe, the AcaPy /status endpoints can be used for this.

image

Create load generator boilerplate

  • Setup simple http server based on spring boot (kotlin)
  • Create aca-py callback api skeleton
  • Create load test api skeleton
  • Create dockerfile

loadgenerator

Scale the Holder side

Currently, it looks like the actual bottleneck is the Holder AcaPy instead of the Issuer/Verifier AcaPy. As the Holder is not the one that is being load-tested we need to define a way to scale the Holder side to be able to push the Issuer/Verifier to his limits.

Offer a setup with a single Issuer/Verifier AcaPy

For debugging purposes having a horizontally scaled Isssuer/Verifier setup makes it harder to debug the AcaPy. Therefore, we want a single instance setup that can easily be started via the .env configuration file

Specify number of Postgres Connections

To avoid connection exhaustion:

  1. explicitly define the number of connections the Postgres DB should allow
  2. limit the number of connections each AcaPy is allowed to open

Test Case: Split Full Test Process into three test cases

Implement three test-runners that only focus on one task each

  1. create one connection per iteration
  2. issue one credential per iteration (always to same connection)
  3. request and verify one proof per iteration (always request same credential from same connection)

Dynamically Scale Holder and Issuer/Verifier AcaPy Horizontally

Using an nginx as a load balancer allows us to scale Holder and Issuer/Verifier AcaPys horizontally. Unfortunately, the current setup is very inflexible as the nginx.conf lists all the available Holder and Issuer/Verifier AcaPys.

In the future, it should be possible to specify the number of Holder and Issuer/Verifier dynamically via the .env.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.