JXInsight/Simz – Where Big Data meets Big Activity in the JVM
Big data is nothing new in the application performance monitoring space. Applications have been generating huge amounts of data using various logging and metric utilities. The data collected by such tools is then either pulled or pushed to some central management server wherein it is filtered, transformed, aggregated and stored/updated for offline viewing by operators connected to the server via management consoles and reporting dashboards. Here live application behavior becomes decontextualized departed data which is then transformed into measured metrics and finally persisted points. Behavior becomes data then deprecates and dies.
JXInsight/Simz is very different in its approach to the data collected pertaining to a call that is metered and its consumption of resources during execution. The data is pushed in near real-time to one or more Simz services where it is used to drive the execution of playback threads with one for each metered application thread. Each playback thread makes the same underlying metering calls,
end(), made by the instrumented methods in the application and with the exact same meter readings. Behavior becomes data and is then resurrected becoming behavior all over again but in a slightly different form.
We don’t need to have the class bytecode of the callers/callees and we don’t need to have application state (it would never fit anyway in scaling to hundreds and thousands of JVMs). Our underlying metering model of named probes (activities) and meters (resources) is more than sufficient to capture the execution essence of an application, and its many instances within a cluster, all within a single simulated runtime.
And whilst today both the application and Simz service are based on the same runtime there is nothing really stopping the usage of our universal metering model and instant replay[back] technology to simulate other application language runtimes with the added benefit that plugins written in one language can be reused across multiple client languages without change.