Hekate.io
Java Library for Distributed Services
License
Open source Apache License v2.0
Features
-
Distributed Service Discovery
- Decentralized Service Discovery (based on performance-optimized Gossip protocol)
- Easy integration into existing infrastructure
- Clouds (based on Apache JClouds)
- Amazon EC2 and S3
- Google Cloud Storage and Compute Engine
- Azure Blob Storage
- etc
- Kubernetes
- ZooKeeper
- Etcd
- Consul
- IP Multicast
- Shared Database (JDBC-based)
- Shared File System
- Clouds (based on Apache JClouds)
- User-defined Service Properties and Roles
- Cluster Event Listeners
- Service Topology Views and Filtering APIs
- Health Monitoring and Split-brain Detection
-
Messaging
- Synchronous and Asynchronous Messaging (backed by Netty)
- Cluster-aware Load Balancing and Routing
- SSL/TLS Encryption of Network Communications (optional)
- Back Pressure Policies
- Error Retry Policies
- Pluggable Serialization
- Kryo
- FST
- Protocol Buffers (work in progress)
- JDK Serialization
- Manual Serialization
-
Remote Procedure Calls (RPC)
- Type-safe Invocation of Remote Java Services
- Automatic Discovery and Load Balancing
- Synchronous and Asynchronous APIs
- Multi-node Broadcasting and Aggregation of Results
- Back Pressure Policies
- Error Retry Policies
- ...and everything from the "Messaging" section above:)
-
Cluster-wide Singleton Service (aka Leader Election )
- Decentralized Leader Election
- Followers are Aware of the Current Leader
- Leader can Dynamically Yield Leadership
-
Distributed Locks
- Synchronous and Asynchronous Reentrant Locks
- Decentralized Lock Management
- Configurable Lock Groups (aka Lock Regions)
-
Spring Boot/Framework Support (optional)
- Spring Boot Auto-configurations and @Annotations
- Spring-compliant Beans
- Spring XML Schema to Simplify Configuration
-
Metrics
- Internal Metrics Recording and Publishing via Micrometer.io
-
Raft-based Replicated State Machines (planned)
Documentation
- Javadocs (Follow
the White Rabbit[« start here]
marks). - Reference Guide (coming soon...)
- Spring Boot Properties Reference
Code Examples
Quickstart for Standalone Java Application
public class MyApplication{
public static void main(String[] args) throws Exception {
Hekate hekate = new HekateBootstrap()
.withNamespace("my-cluster")
.withNodeName("my-node")
.join();
System.out.println("Cluster topology: " + hekate.cluster().topology());
}
}
Quickstart for Spring Boot Application
@EnableHekate // <-- Enable Hekate integration.
@SpringBootApplication
public class MyApplication {
@Autowired
private Hekate hekate;
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
@PostConstruct
public void start(){
System.out.println("Cluster topology: " + hekate.cluster().topology());
}
}
More Examples:
Please see the hekate-io/hekate-examples project for more examples.
Maven artifacts
- For projects based on Spring Boot:
<dependency>
<groupId>io.hekate</groupId>
<artifactId>hekate-spring-boot</artifactId>
<version>4.0.0</version>
</dependency>
- For projects based on Spring Framework:
<dependency>
<groupId>io.hekate</groupId>
<artifactId>hekate-spring</artifactId>
<version>4.0.0</version>
</dependency>
- For standalone applications:
<dependency>
<groupId>io.hekate</groupId>
<artifactId>hekate-core</artifactId>
<version>4.0.0</version>
</dependency>
- Other artifacts:
- Cluster Bootstrapping (seed node discovery)
- hekate-jclouds-core - Integration with Apache JClouds for cloud environments.
- hekate-jclouds-aws - Extended integration with Amazon EC2 cloud.
- hekate-kubernetes - Integration with Kubernetes
- hekate-zookeeper - Integration with Apache ZooKeeper
- hekate-etcd - Integration with Etcd
- hekate-consul - Integration with Consul
- Serialization Codecs
- hekate-codec-kryo - Integration with Kryo for data serialization.
- hekate-codec-fst - Integration with FST for data serialization.
- Cluster Bootstrapping (seed node discovery)
How to build
Software requirements:
Build (no tests):
cd
to the project's root folder- run
./mvnw clean package -DskipTests=true
Build (with tests):
- cd to the project's root folder
- make a copy of
test.properties
file with namemy_test.properties
- edit
my_test.properties
according to your environment - run
docker-compose up -d
to prepare Docker-based testing infrastructure - run
./mvnw clean package
Release History
-
v.4.0.0 (20-Mar-2021) - [release notes]
-
v.3.11.0 (24-Oct-2020) - [release notes]
-
v.3.10.0 (4-Jul-2020) - [release notes]
-
v.3.9.0 (8-May-2020) - [release notes]
-
v.3.8.0 (29-Feb-2020) - [release notes]
-
v.3.7.0 (3-Feb-2020) - [release notes]
-
v.3.6.0 (13-Oct-2019) - [release notes]
-
v.3.5.0 (14-Aug-2019) - [release notes]
-
v.3.4.1 (4-Jul-2019) - [release notes]
-
v.3.4.0 (29-Jun-2019) - [release notes]
-
v.3.3.0 (19-Apr-2019) - [release notes]
-
v.3.2.0 (5-Apr-2019) - [release notes]
-
v.3.1.0 (28-Mar-2019) - [release notes]
-
v.3.0.0 (19-Mar-2019) - [release notes]
-
v.2.6.0 (22-Aug-2018) - [release notes]
-
v.2.5.0 (4-Aug-2018) - [release notes]
-
v.2.4.1 (15-Jul-2018) - [release notes]
-
v.2.4.0 (15-Jul-2018) - [release notes]
-
v.2.3.1 (18-May-2018) - [release notes]