GitHub - atoms-co/splitter: Coordinator for stateful sharded services

2 min read Original article ↗

Splitter

Splitter

Splitter is a control-plane service for assigning work to connected clients. Its primary focus is coordination for stateful sharded services.

Features

  • Uses UUID spaces as work domains: splits them into shards and assigns to clients.
  • Emphasizes exclusive shard ownership in a steady state using leases. Optional dual ownership during shard transitions for advanced use cases.
  • Promotes an easier programming model in comparison to coordinators that provide eventual consistency in shard assignments.
  • Shard management is handled centrally in Splitter, using Raft for storage and coordination.
  • Assumes that client instances are dynamic and can come and go.
  • Region-aware assignments for multi-regional services.
  • Automatic propagation of routing information to client instances.
  • Can be used for leadership election by client instances.
  • Provides authoritative shard alignment information for external services interested in arranging data and compute across multiple regions.
  • Built with no external dependencies and only requires persistent storage to store metadata.

Documentation

Getting Started

To see Splitter in action, check out an example that illustrates how to manage connected robots. Only requires Docker and Bazel.

The example shows how to integrate Splitter with Bazel projects. Splitter Go client library can also be used in native Go projects.

Usage

To build and load a Docker image:

After starting Splitter in a container, it can be controlled using splitterctl:

docker exec <container> /usr/local/bin/splitterctl

Contributing

See CONTRIBUTING.md

Build Status: Go Build Status: Bazel