Skip to content

emc-mongoose/mongoose-base

Repository files navigation

Gitter chat Issue Tracker CI status Tag Maven metadata URL Sonatype Nexus (Releases) Docker Pulls

Contents

  1. Overview
  2. Features
  3. Bundles & Extenstions
  4. Get started 🏁
  5. Comparison With Similar Tools
  6. Documentation 📄
  7. Contributing
  8. Changelog
  9. FAQ

1. Overview

Mongoose is a distributed storage performance testing tool. This repo contains the basic functionality only. See the extensions for the actual use.

2. Features

2.1. Scalability

2.1.1. Vertical

Using fibers allows to sustain millions of concurrent operations easily without significant performance degradation.

2.1.2. Horizontal

The distributed mode in Mongoose was designed as P2P network. Each peer/node performs independently as much as possible. This eliminates the excess network interaction between the nodes which may be a bottleneck.

2.2. Customization

2.2.1. Flexible Configuration

  • Safe: the configuration options are being checked against the schema
  • Extensible: Mongoose's plugins may come up with own configuration options making them available from the joint CLI and being checked against the schema
  • Expressions allow to specify the dynamically changing values

2.2.2. Load Generation Patterns

2.2.3. Scenarios

Scenarios allow to organize the load steps in the required order and reuse the complex performance tests

The metrics reported by Mongoose are designed to be most useful for the performance analysis. The following metrics are available:

  • Counts

    • Items
    • Bytes transferred
    • Time
      • Effective
      • Elapsed
  • Rates

    • Items per second
    • Bytes per second
  • Timing distributions for:

    • Operation durations
    • Network latencies
  • Actual concurrency

    It's possible to limit the rate and measure the sustained actual concurrency

The average metrics output is being done periodically while a load step is running. The summary metrics output is done once when a load step is finished. Also, it's possible to obtain the highest precision metrics (for each operation, so called I/O trace records).

Mongoose is designed to be agnostic to the particular extensions implementations. This allows to support any storage, scenario language, different load step kinds.

2.3.1. Load Steps

The load step is needed to define how to generate the load (operations type/order/ratio/etc). Mongoose basically includes the linear load step implementation which may be considered as a straightforward way to generate a load. Other load step implementations allow to specify some custom and more complex load pattern. See the known load step extensions among the bundle components either among the additional extensions.

2.3.2. Storage Drivers

The storage driver is used by Mongoose to interact with the given storage. It translates the Mongoose's abstract operations into the actual I/O requests and executes them. Mongoose basically includes the dummy storage driver only which does nothing actually and useful only for demo/testing purposes. See the known storage driver extensions among the bundle components either among the additional extensions.

2.3.3. Scenario Engine

Any Mongoose scenario may be written using any JSR-223 compliant scripting language. Javascript support is available out-of-the-box.

3. Bundles and Extenstions

This repo (mongoose-base) containts only base functionality. All extentions and additional mongoose tools located into the independent repos and the corresponding components. Each component has its own documentation, CI versioning.

List of all bundles and extentions