ethereum-optimism / optimism

Optimism is Ethereum, scaled.
https://optimism.io
MIT License
5.56k stars 3.21k forks source link

Determine load testing framework for the sorts of transactions (deposits, withdrawals, txs) we expect #963

Closed karlfloersch closed 3 years ago

karlfloersch commented 3 years ago

Is your feature request related to a problem? Please describe. In order to detect some common failures that we have in Geth, we often need to spam many transactions, and transactions of different types. This means that we will need to design a simple framework for submitting specific types of transactions, different frequencies of transactions, etc. Once we have this framework it can be hooked up to our CI and deployments to ensure that we do not suffer regressions.

Describe the solution you'd like The load tester should spin up a sequencer, a verifier, and a replica.

This framework should make it easy to...

Spam the following types of transactions:

Define transaction sequences that are to be spammed, for example:

Define transaction submission frequency distributions, or in other words:

Configure the load test duration, such as:

Collect important metrics, such as:

Detect failures in our various services, eg:

Check integrity of the sequencer:

Check integrity of the verifier & replica:

This framework should be designed with the eventual goal of tracking all of these metrics and being maximally configurable. However, it should also be implemented incrementally & should suggest steps which can be taken in the near term to cover the most important features.

karlfloersch commented 3 years ago

Because we do not currently have infrastructure set up for easily testing verifiers or replicas, we may want to de-prioritize: Check integrity of the verifier & replica:

karlfloersch commented 3 years ago

It seems that while all of these tests & metrics could be added into a big load test, we can get a lot of benefit from breaking this up into smaller tasks. Specifically:

Smoke tests

Notes:

Geth integrity checker

Notes:

Monotonicity / skipped deposit targeted tests

Notes:

Simple Performance benchmarks

optimisticben commented 3 years ago

I like the split a lot, while it's all testing, they serve different purposes. Instead of kitchen sink I would classify those as smoke tests, things that are expected to work in normal circumstances. We should be able to run smoke tests against production systems, excluding any side effects.

The performance tests should definitely target new infrastructure and running the smoke tests at the same time verifies those tests under load.

For the monotonicity checks we could carefully construct the scenarios detailed using tasks defined in something like Tekton and/or run a "chaos monkey" in the deployment that attempts random, forced failures and watch how the system reacts.

karlfloersch commented 3 years ago

Awesome @optimisticben I updated my comment to call them "Smoke Tests" & definitely makes sense re. tekton / chaos monkey.

I'm going to close this issue and say that https://github.com/ethereum-optimism/optimism/issues/963#issuecomment-849253240 qualifies as "determining our load testing strategy". Otherwise I feel like this issue is going to stay open too long because it's so open ended 😁

cyborgdennett commented 1 year ago

Any updates on this?