Spring Cloud Sidecar
I have an application deployed to a NetflixOSS based cloud which has a structure along these lines:
Essentially a service which persists information to a Cassandra cluster. All the applications are registered to Eureka – so in this instance the service as well as the Cassandra nodes are registered with Eureka, further the service connects to the Cassandra cluster by looking up the nodes via Eureka.
I will deal with this in two parts:
- Registering Cassandra nodes with Eureka
- Service using Eureka to connect to the Cassandra Cluster
Registering Cassandra Nodes with Eureka
This is where a Sidecar application fits in – the purpose of Sidecar is to facilitate some of things that make an application a good citizen in a Cloud environment, in this specific instance it enables Cassandra to register with Eureka, respond to health checks. Spring Cloud Netflix Sidecar project provides the necessary support to create a Sidecar application.
The amount of coding required to get a Sidecar application up and running is very minimal, Sidecar behaves like a typically Spring Cloud application except that instead of registering itself to Eureka it has to register another application, so the configuration is mostly the same.
This is my entire code for the Sidecar application!:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.sidecar.EnableSidecar; @SpringBootApplication @EnableSidecar public class SampleSidecarApplication { public static void main(String[] args) { SpringApplication.run(SampleSidecarApplication.class, args); } }
and the properties to go with this:
application.yml
eureka: instance: virtual-host-name: samplecassandra.vip spring: application: name: samplecassandra sidecar: port: 9042
Here the port is declared to be the port that is relevant to Cassandra.
There is one more aspect to handle, healthcheck, the Sidecar exposes an endpoint which can test the health of the supported application in whatever makes sense for the application. For Cassandra it could be connecting to the local node and firing a small CQL query.
Conclusion
Assuming that the Cassandra nodes are now registered with Eureka, there is a good level of complication in trying to create a Cassandra Session on the consuming service side, this is mainly because of the timing involved in instantiating the Eureka client and the point at which the code tries to find the list of nodes. I will cover this in a subsequent post. If you would like to explore this sample further, here is the github repo.
Reference: | Spring Cloud Sidecar from our JCG partner Biju Kunjummen at the all and sundry blog. |