+1

I like this approach compared to the previous proposals because it's
simpler (doesn't require a custom registry) and makes it more
straightforward to replace stats with Micrometer meters in the future.

- Aaron


On Fri, Jun 7, 2019 at 4:58 PM Dale Emery <dem...@pivotal.io> wrote:

> Proposal for instrumenting Geode
>
>
> *Goals*
>
> - Allow routing measurements to statistics, Micrometer meters, or both as
> appropriate, to allow publishing each measurement to the appropriate places.
>
> - Minimize the intrusiveness of new and existing metrics instrumentation.
>
> - Minimize the amount of code that must know how to route measurements to
> stats and meters.
>
> - Maintain Geode performance.
>
> - Not preclude any options for deprecating and removing Geode’s statistics
> mechanism in the future. And take steps to make deprecating and removing
> the existing statistics mechanism easier.
>
>
> *Proposal*
>
> - Continue to use Geode’s existing style of instrumentation class (e.g.
> CachePerfStats) to instrument code.
>
> - Enhance the instrumentation classes to create and register meters when
> appropriate, and to route each measurement to the appropriate stats and
> meters.
>
> - When we want to route a given measurement to both a statistic and a
> meter, use the "legacy meter" wrapper mechanism (described below).
>
> - Incrementally improve the instrumentation classes to focus more on
> reporting domain events (e.g. regionAdded()) and less on reporting
> measurements (e.g. incRegions()).
>
>
> *Legacy Meter Wrappers*
>
> To route a given measurement to both a Micrometer meter and a Geode
> statistic, do the following in the instrumentation class's constructor:
>
> - Create and register a normal Micrometer meter in the cache's meter
> registry.
>
> - Wrap the registered meter in a custom "legacy meter" that reads and
> writes the stat, and also writes to the registered meter.
>
> In the instrumentation methods (e.g. endPut()):
>
> - Use the legacy meter to report measurements.
>
> I've attached two diagrams below to show how the wrapper mechanism works
> for "counter" style stats and meters. The first is a class diagram, showing
> how the parts relate in general. The second is a sequence diagram that
> shows in some detail how the parts interact to route a given measurement to
> both a meter and a stat.
>
> If you want even more details, Jake Barrett has created a nice "proof of
> concept" implementation:
> https://github.com/apache/geode/compare/develop...pivotal-jbarrett:wip/LegacyMeterBuilder
>
>
>
> Please let us know if you have questions, comments, or concerns.
>
>
> Cheers,
> Dale
>
> —
> Dale Emery
> dem...@pivotal.io
>
>
>
>
>
>
>
>
>

Reply via email to