Microservice

Describes a microservice in a scalable architecture, including its service boundaries, communication contracts, resource requirements, and operational characteristics.

Cloud ArchitectureCloud NativeDistributed SystemsHigh AvailabilityInfrastructureMicroservicesPerformanceResilienceScalabilityService Mesh

Properties

Name Type Description
name string Service name in kebab-case.
version string Semantic version of the service.
description string Human-readable description of the service's bounded context and responsibilities.
team string Team responsible for this service (follows domain-driven team ownership).
domain string Domain or bounded context this service belongs to.
api object Service API contract definition.
dependencies array List of upstream services this service depends on.
resources object
scaling object
resilience object
observability object
tags array
View JSON Schema on GitHub

JSON Schema

scalable-architecture-microservice-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/scalable-architecture/main/json-schema/scalable-architecture-microservice-schema.json",
  "title": "Microservice",
  "description": "Describes a microservice in a scalable architecture, including its service boundaries, communication contracts, resource requirements, and operational characteristics.",
  "type": "object",
  "required": ["name", "version", "api"],
  "properties": {
    "name": {
      "type": "string",
      "description": "Service name in kebab-case.",
      "pattern": "^[a-z][a-z0-9-]*$"
    },
    "version": {
      "type": "string",
      "description": "Semantic version of the service.",
      "pattern": "^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9.]+)?$"
    },
    "description": {
      "type": "string",
      "description": "Human-readable description of the service's bounded context and responsibilities."
    },
    "team": {
      "type": "string",
      "description": "Team responsible for this service (follows domain-driven team ownership)."
    },
    "domain": {
      "type": "string",
      "description": "Domain or bounded context this service belongs to."
    },
    "api": {
      "type": "object",
      "description": "Service API contract definition.",
      "required": ["protocol"],
      "properties": {
        "protocol": {
          "type": "string",
          "enum": ["HTTP/REST", "gRPC", "GraphQL", "WebSocket", "AMQP", "Kafka"],
          "description": "Primary communication protocol."
        },
        "version": {
          "type": "string",
          "description": "API version (e.g., v1, v2).",
          "default": "v1"
        },
        "baseUrl": {
          "type": "string",
          "format": "uri",
          "description": "Base URL for the service API."
        },
        "healthEndpoint": {
          "type": "string",
          "description": "Health check endpoint path.",
          "default": "/health"
        },
        "metricsEndpoint": {
          "type": "string",
          "description": "Prometheus metrics endpoint path.",
          "default": "/metrics"
        }
      }
    },
    "dependencies": {
      "type": "array",
      "description": "List of upstream services this service depends on.",
      "items": {
        "type": "object",
        "required": ["name", "type"],
        "properties": {
          "name": {"type": "string"},
          "type": {
            "type": "string",
            "enum": ["synchronous", "asynchronous", "database", "cache", "queue"]
          },
          "required": {"type": "boolean", "default": true},
          "circuitBreaker": {"type": "boolean", "default": false}
        }
      }
    },
    "resources": {
      "$ref": "#/$defs/ResourceRequirements"
    },
    "scaling": {
      "$ref": "#/$defs/ScalingConfig"
    },
    "resilience": {
      "$ref": "#/$defs/ResilienceConfig"
    },
    "observability": {
      "$ref": "#/$defs/ObservabilityConfig"
    },
    "tags": {
      "type": "array",
      "items": {"type": "string"}
    }
  },
  "$defs": {
    "ResourceRequirements": {
      "type": "object",
      "description": "Kubernetes-style resource requests and limits.",
      "properties": {
        "requests": {
          "type": "object",
          "properties": {
            "cpu": {"type": "string", "description": "CPU request (e.g., '100m', '0.5')."},
            "memory": {"type": "string", "description": "Memory request (e.g., '128Mi', '1Gi')."}
          }
        },
        "limits": {
          "type": "object",
          "properties": {
            "cpu": {"type": "string"},
            "memory": {"type": "string"}
          }
        }
      }
    },
    "ScalingConfig": {
      "type": "object",
      "description": "Autoscaling configuration for the service.",
      "properties": {
        "minReplicas": {"type": "integer", "minimum": 0, "default": 1},
        "maxReplicas": {"type": "integer", "minimum": 1},
        "targetCPUUtilizationPercentage": {"type": "integer", "minimum": 1, "maximum": 100},
        "scaleToZero": {"type": "boolean", "default": false},
        "scalingTrigger": {
          "type": "string",
          "enum": ["cpu", "memory", "custom-metric", "queue-depth", "event-driven"]
        }
      }
    },
    "ResilienceConfig": {
      "type": "object",
      "description": "Resilience patterns applied to the service.",
      "properties": {
        "circuitBreaker": {
          "type": "object",
          "properties": {
            "enabled": {"type": "boolean", "default": false},
            "threshold": {"type": "number", "minimum": 0, "maximum": 1},
            "timeout": {"type": "integer", "description": "Recovery timeout in seconds."}
          }
        },
        "retry": {
          "type": "object",
          "properties": {
            "enabled": {"type": "boolean", "default": false},
            "maxAttempts": {"type": "integer", "minimum": 1, "default": 3},
            "backoff": {
              "type": "string",
              "enum": ["fixed", "exponential", "jitter"],
              "default": "exponential"
            }
          }
        },
        "timeout": {
          "type": "object",
          "properties": {
            "requestTimeoutMs": {"type": "integer", "minimum": 0},
            "connectionTimeoutMs": {"type": "integer", "minimum": 0}
          }
        }
      }
    },
    "ObservabilityConfig": {
      "type": "object",
      "description": "Observability instrumentation settings.",
      "properties": {
        "tracingEnabled": {"type": "boolean", "default": true},
        "metricsEnabled": {"type": "boolean", "default": true},
        "loggingLevel": {
          "type": "string",
          "enum": ["DEBUG", "INFO", "WARN", "ERROR"],
          "default": "INFO"
        },
        "samplingRate": {
          "type": "number",
          "minimum": 0,
          "maximum": 1,
          "description": "Distributed trace sampling rate (0.0-1.0).",
          "default": 0.1
        }
      }
    }
  }
}