Anatomy of a Satoris Metered Runtime

An Open Modular Design for Performance Monitoring of Java

Satoris has an open and modular design. There are 4 main layers to understand in the context of a metered Java application runtime.

  • Agent
  • Open API
  • Metering Engine
  • Extensions
Agent Instrumentation

The agent layer is where aspects weaved into bytecode turn method entry and exit callbacks into begin and end calls, respectively, on a named probe.

The Open API layer insulates the above instrumentation code from the underlying metering engine implementation which it bootstraps via an SPI.

The metering engine layer implements the service provider interface defined in the Probes Open API. It collects and aggregates metering measurements from meters along with other runtime tasks such as extension management.

The extension layer is where probes created by the metering engine are augmented and decorated with additional runtime behaviors including advance measurement data collection, external monitoring integration, custom interception, adaptive strategy based metering, and so on.

Manual Instrumentation

It is possible to eliminate the agent layer or to completely replace the agent with an alternative one that’s not based on AOP. Equally, the source code of an application can be manually instrumented using the Probes Open API.

Manual Instrumentation

Hybrid Instrumentation

There are few restrictions to the instrumentation method employed. A hybrid approach can be used having both the agent weaved aspects and the application compiled source code call directly into the Probes Open API.

Hybrid Instrumentation

Note: An application can also use the Probes Open API to access metering data collected by the metering engine. It might do so for the purpose of reporting, such as in the case of unit testing, or for more sophisticated use cases including cost-aware execution and self-adaptive runtime control.