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.
- Open API
- Metering Engine
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 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.
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.
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.
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.