Skip to content
pmzajaczkowski edited this page Mar 17, 2016 · 5 revisions

This page provides a summary of functions provided by Ratel out of the box. Assume that you have a service provider:

@Publish
public class MyServiceImpl implements MyService {...

and the client working on some other machine that uses it:

public Class MyApp {
  @Discover
  private MyService serviceClient

With just that Ratel will build a system with:

Service discoverability

Whenever you call a method of MyApp#sreviceClient, Ratel ensures that appropriate alive instance of MyService will be found and will route remote network calls to it, so that you don't need to care about address, livecycle or any other aspect of the service provider. If there is at least one working instance of MyService, your client will use it.

Load-balancing

When you start multiple instances of service provider application, all clients will discover them all and will load-balance the traffic among multiple instances of MyService. You don't need to configure or implement anything.

Scalability on demand

If you need to horizontally scale MyService, all you need to do with ratel is to start additional service providers. On the start-up they register new instances of a MyService in the service registry and these addresses will be populated to all clients within seconds. Effectively, the clients will load-balance traffic to MyService over greater number of instances.

Fail-fast mechanism

If a service is turned off or it fails, it will disappear from the registry server and this information will be populated to all clients within seconds. Effectively, clients will stop sending requests to this instance.

Heart beat

All instances of a service automatically get decorated with a Heart-beat proxy so that you can use external monitoring application to easily check responsiveness of any instance of any service.

Performance Monitoring

By default all execution times of a service invocation both on client and server side are logged so that you can easily create e.g Splunk dashboard with various performance gauges. Additionally, you can extract in-depth monitoring report of your application with use of Monitoring events

Process tracing

Ratel introduces a notion of ProcessContext that is automatically passed along remote service calls. That is, when a client calls a remote Ratel service, all fields of Process context will be automatically bound to a ThreadLocal instance of Process context. For more information please refer to Process tracing