scalecube-services is a free, open source api development & testing project written in Java and released under Apache-2.0. It has 638 GitHub stars, 111 forks and 17 open issues, and was last pushed yesterday. On this registry it ranks #142 of 154 tracked projects in API Development & Testing, with 5 head-to-head comparisons available.
scalecube-services
MICROSERVICES 2.0
ScaleCube is a microservices library designed for high throughput and lower latency, catering to scalable and reactive system needs. It excels in API gateway integration, service discovery, and load balancing, employing the SWIM protocol for efficient cluster management. Its modular architecture supports various pluggable communication modules, enabling seamless and flexible deployments. With a focus on real-time stream processing and fault tolerance, ScaleCube ensures optimal performance and reliability for distributed microservices environments.
Reactive microservices communicate via streams, utilising asynchronous data flows to exchange information between services. This approach enhances system responsiveness and scalability by allowing services to process and react to data as it arrives, without blocking operations.
In practice, this involves using technologies and protocols that support reactive streams, such as Reactor. These tools enable the development of highly responsive, resilient systems capable of handling dynamic workloads efficiently.
A fully mesh, brokerless architecture is particularly beneficial for high-performing, reliable, and scalable applications.
It ensures continuous availability and responsiveness, making it ideal for real-time data processing, large-scale distributed systems, and environments where minimizing latency matters.
ScaleCube’s fully mesh architecture delivers a robust, efficient, and scalable solution for modern microservices applications, enhancing system performance and reliability without the need for complex middleware setups.
ScaleCube Services Features:
Provision and interconnect microservices peers in a cluster
Fully Distributed with No single-point-of-failure or single-point-of-bottleneck
Fast - Low latency and high throughput
Scaleable over- cores, jvms, clusters, regions.
Built-in Service Discovery and service routing
Zero configuration, automatic peer-to-peer service discovery using SWIM cluster membership protocol
Simple non-blocking, asynchronous programming model
Reactive Streams support.
Fire And Forget - Send and not wait for a reply
Request Response - Send single request and expect single reply
Request Stream - Send single request and expect stream of responses.
Request bidirectional - send stream of requests and expect stream of responses.
Built-in failure detection, fault tolerance, and elasticity
Routing and balancing strategies for both stateless and stateful services
Embeddable into existing applications
Natural Circuit-Breaker via scalecube-cluster discovery and failure detector.
Support Service instance tagging.
Support Service discovery partitioning using hierarchy of namespaces in a multi-cluster deployments.
The example provisions 2 cluster nodes and making a remote interaction.
seed is a member node and provision no services of its own.
then microservices variable is a member that joins seed member and provision GreetingService instance.
finally from seed node - create a proxy by the GreetingService api and send a greeting request.
// service definition
@Service("io.scalecube.Greetings")
public interface GreetingsService {
@ServiceMethod("sayHello")
Mono<Greeting> sayHello(String name);
}
}
// service implementation
public class GreetingServiceImpl implements GreetingsService {
@Override
public Mono<Greeting> sayHello(String name) {
return Mono.just(new Greeting("Nice to meet you " + name + " and welcome to ScaleCube"));
}
}
//1. ScaleCube Node node with no members (container 1)
Microservices seed = Microservices.builder()
.discovery("seed", ScalecubeServiceDiscovery::new)
.transport(RSocketServiceTransport::new)
.startAwait();
// get the address of the seed member - will be used to join any other members to the cluster.
final Address seedAddress = seed.discovery("seed").address();
//2. Construct a ScaleCube node which joins the cluster hosting the Greeting Service (container 2)
Microservices serviceNode = Microservices.builder()
.discovery("seed", ep -> new ScalecubeServiceDiscovery(ep)
.membership(cfg -> cfg.seedMembers(seedAddress)))
.transport(RSocketServiceTransport::new)
.services(new GreetingServiceImpl())
.startAwait();
//3. Create service proxy (can be created from any node or container in the cluster)
// and Execute the service and subscribe to incoming service events
seed.call().api(GreetingsService.class)
.sayHello("joe").subscribe(consumer -> {
System.out.println(consumer.message());
});
// await all instances to shutdown.
Mono.whenDelayError(seed.shutdown(), serviceNode.shutdown()).block();
Basic Service Example:
RequestOne: Send single request and expect single reply
RequestStream: Send single request and expect stream of responses.
RequestBidirectional: send stream of requests and expect stream of responses.
A service is nothing but an interface declaring what methods we wish to provision at our cluster.
Microservices.builder()
.discovery(options -> options.seeds(seed.discoveryAddress()))
.services(...) // OPTIONAL: services (if any) as part of this node.
// configure list of gateways plugins exposing the apis
.gateway(options -> new WebsocketGateway(options.id("ws").port(8080)))
.gateway(options -> new HttpGateway(options.id("http").port(7070)))
.gateway(options -> new RSocketGateway(options.id("rsws").port(9090)))
.startAwait();
// HINT: you can try connect using the api sandbox to these ports to try the api.
// https://scalecube.github.io/api-sandbox/app/index.html
Maven
With scalecube-services you may plug-and-play alternative providers for Transport,Codecs and discovery.
Scalecube is using ServiceLoader to load providers from class path,
You can think about scalecube as slf4j for microservices - Currently supported SPIs:
Transport providers:
scalecube-services-transport-rsocket: using rsocket to communicate with remote services.
Message codec providers:
scalecube-services-transport-jackson: using Jackson to encode / decode service messages. https://github.com/FasterXML
scalecube-services is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.
What does scalecube-services do?
Microservices library - scalecube-services is a high throughput, low latency reactive microservices library built to scale. It features: API-Gateways, service-d
What is scalecube-services written in?
scalecube-services is primarily written in Java. Its source is publicly available at https://github.com/scalecube/scalecube-services, and it has 638 GitHub stars.