/minion

A little minion (i.e microservice) that can be replicated to create more minions.

Primary LanguageGoApache License 2.0Apache-2.0

minion

Go Doc Conventional Commits License

A little minion (i.e microservice) that can be replicated to create more minions.

Contents

Requirements

Architecture

Architecture

Inter-microservice communication is handled using gRPC instead of REST due to its higher performance, smaller payload size and tighter API contract.

Both Go services are instrumented using OpenTelemetry and use environment variables for configuration. Traces, metrics and logs are sent using gRPC to an OpenTelemetry collector, which batches and exports them to a Jaeger and Prometheus service.

The why

Minion was created to simplify the creation of microservices. It is lightweight and opinionated.

Some of technologies used in this project are:

  • urfave/cli - Command line interface.
  • swag - Generate REST API documentation.
  • alexliesenfeld/health - Simple and flexible health check library.
  • jsoniter - High-performance drop-in replacement of encoding/json.
  • zap - Blazing fast, structured, leveled logging in Go.
  • opentelemetry - Open source distributed tracing and metrics.
  • watermill - Event messaging.
  • gin - HTTP web framework.
  • resty - HTTP client.

License

Minion is Apache 2.0 licensed.

Stability

This project follows SemVer strictly and is not yet v1.

Breaking changes might be introduced until v1 is released.

This project follows the Go Release Policy. Each major version of Go is supported until there are two newer major releases.