API

The Grey Matter Mesh is built out of a number of logical abstractions. The following table describes the logical abstractions, or objects, that make up the Grey Matter Mesh. The arrangement, connections, and configuration of these objects define the mesh and its behaviors.

Summary

Object Name

Description

Links To

Links From

zone

A logically isolated region of the mesh. Zones are the highest level of organizational infrastructure. Zones contain all other objects.

cluster, domain, listener, proxy, route, shared_rules

domain

The URL domains for which routes and clusters will be assigned within a proxy. E.g. www.deciphernow.com, localhost, or *

zone

listener, proxy, route

listener

The Envoy listener object that defines the host, port, and protocol for a proxy within the mesh.

zone, domain

proxy

proxy

The Proxy object represents the aggregate objects that get mapped to each instance of the Grey Matter Proxy.

zone, domain, listener

route

A Route defines how a URL in a given domain is handled. Route objects directly affect URI path matching, prefix rewriting, and redirects.

zone, domain

shared_rules

shared_rules

Shared_rules define how requests are sent to clusters. They can perform traffic splitting and shadowing.

zone

route

cluster

Clusters represent collections of either hard-coded or discovered instances of a microservice. Clusters handle health checks, circuit breaking, and outlier detection.

zone

shared_rules

Detailed Descriptions

Request Flow

  1. Listener: A request from inside or outside the mesh is first sent to the host:port of a listener.

  2. Domain: The request host:port is matched against the available domains, and redirected if need be, and sent to an attached set of routes.

  3. Route: The request URI path portion is then passed through the route object for matching, rewriting, and redirecting to a shared_rule.

  4. Shared Rule: The request is passed through the shared_rules to send, split, or shadow traffic to clusters.

  5. Cluster: A cluster sends the final request to one of it's available instances; retrying and breaking connections as necessary.

Nested Objects

Each API Objects discussed above is made up of individual fields and nested structures. Some structures are unique to a given object, but some are re-used across multiple places. These are discussed below.