Fundamentals
Set theme to dark (⇧+D)

Performance

Performance is a vague term that describes how fast a system is, but it can be expressed with concrete Metrics like:

There is a Suicide Mechanism where lower performance (due to higher Latency for example) can result in more concurrent transactions, which require more compute resources, which degrades performance.

There are three perspectives on Performance: Performance Testing, Performance Monitoring, and Stress Testing. They are related, but they solve different problems:

  • Performance Testing should be done when developing a system or component. The idea is that when a component is first created, a performance test is executed on it where Metrics like Latency and Throughput are captured, which will become that component’s baseline. If then later the component is changed, its performance can be compared to its baseline, to make sure that a new version doesn’t degrade the system.
  • Stress Testing is the “art” of stressing the system to the point where it breaks. It could be somewhat useful to find how a component behaves at some edge cases. What a breaking point means, could be somewhat obscure for various reasons. Stess Testing is most valuable if it is used to determine thresholds for Performance Monitoring.
  • Performance Monitoring is about how the system is really behaving in a Production Environment. The best part is that you are looking at a realistic load. By considering how performance changes over time, one can detect when whole system is going to break before it actually breaks. Stress Testing can provide valuable info here, because it can provide thresholds when we know things are going to break, so that we can intervene before it does.