Type: Technical Task
Status: In Progress
Affects Version/s: None
Fix Version/s: None
Component/s: Core Infrastructure
We'll be living in a "highly" dynamic world where services come and go: autoscaling, service failure, network errors, ... We need a mechanism to detect when the services are coming in and going out.
This service will help to decide the available services at the time we're doing a request.
The first implementation will be backed by JGroups (multicast implementation). We do know that this is far away of being optimal (especially the multicast part). However, this can be useful for small installations and, specially, for getting the first version of the new runtime up and running very quickly.
Said that, we would like to build a Gossip based service discovery mechanism (more concretely based on SWIM). We will create a different subtask where we will provide more details.
Technically, you should be able to implement your own service discovery according to your needs (for example you service discovery could be backed by Zookeeper, Consul, ETCD, ...)
In the current implementation, the core abstraction will provide the distribution provider every time a service is available (or is gone). Is up to the distribution provider how to use this update list of available services.
The gRPC distribution provider (the default implementation we will be shipping) will use this list of servers as the input of the load balancer (you can find more details in the load balancer sub task)