Skip to content

Repository files navigation

Speedboat

Minimalist Raft-based Master Election Component

License Java

Features

  • Minimalist API: Speedboat.start(config) — one line to start
  • Cluster-Oriented Configuration: Just configure datacenter + nodes
  • Auto-Discovery: Automatically detects local IP and matches the node
  • Auto Mode: Flat mode for single datacenter, cascading mode for cross-datacenter
  • Dual Timeouts: Independent timeout settings for intra-datacenter and cross-datacenter
  • Zero-Dependency Config: Default Properties support, optional JSON/YAML via custom provider

Quick Start

1. Add Dependency

<dependency>
    <groupId>cn.itcraft</groupId>
    <artifactId>speedboat</artifactId>
    <version>1.0.0</version>
</dependency>

2. Create Configuration File

config.properties:

nodes.0.0=192.168.10.1:3000
nodes.0.1=192.168.10.2:3000
nodes.0.2=192.168.10.3:3000

3. Start the Cluster

SpeedboatConfigProvider config = new PropertiesConfigProvider("config.properties");
Speedboat.start(config);

if (Speedboat.isMain()) {
    System.out.println("I am the leader!");
}

// On shutdown
Speedboat.stop();

Configuration Examples

Single Datacenter

nodes.0.0=192.168.10.1:3000
nodes.0.1=192.168.10.2:3000
nodes.0.2=192.168.10.3:3000

Cross-Datacenter

datacenter=hangzhou001

# Hangzhou datacenter
nodes.0.0=192.168.10.1:3000
nodes.0.1=192.168.10.2:3000
nodes.0.2=192.168.10.3:3000

# Beijing datacenter
nodes.1.0=10.3.1.1:3000
nodes.1.1=10.3.1.2:3000
nodes.1.2=10.3.1.3:3000

# Intra-datacenter election timeout
election.intra.timeout.min=1000
election.intra.timeout.max=2000

# Cross-datacenter election timeout
election.cross.timeout.min=3000
election.cross.timeout.max=5000

API

// Start
Speedboat.start(config);

// Status queries
Speedboat.isMain();           // Is this node the leader?
Speedboat.getLeaderId();      // Current leader node ID
Speedboat.getTerm();          // Current term
Speedboat.getNodeId();        // Local node ID
Speedboat.getDatacenterId();  // Datacenter ID
Speedboat.isRunning();        // Running status

// Stop
Speedboat.stop();

Auto Mode

nodes.size() Mode Description
== 1 Single DC Flat All nodes participate equally in election
> 1 Cross-DC Cascading Intra-DC election + cross-DC cascading

Documentation

Build

mvn clean package

Test

mvn test

License

Apache 2.0

About

Minimalist Raft-based Master Election Component

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages