Datastax Cassandra Driver Analyst (1)-Overral Introduce

最近项目中用到了Cassandra, 期间遇到不少问题,很多问题都是源于对driver本身的不了解,例如不知道有TTL就打算去写一个定时JOB做清理过期数据,不知道在多DC的情况下默认的loadbalance策略需要一个指定的DC Name,不知道默认Driver里面有性能监控的metrix。通过解决这些问题,翻看了不少driver的源码,深感有必要仔细阅读下cassandra driver, 毕竟对于应用程序开发者来说,更多可控的地方还是在driver本身。

同时Datastax Cassandra Driver含有150+的类,结构清晰,而且用了jetty/guava/metric等一些实用的jar(如下图所示), 奔着学习如何写client, 也是非常值得一读。

pom.xml - Eclipse

其中lz4/snappy用于传输时的压缩,netty用于通信,guava为常见工具类,如阻塞/异步处理消息。

对于一个client,无非包含5个要点:

(1)配置

(2)通信处理

(3)线程模型

(4)数据结构

(5)业务逻辑

首先来看下cassandra的配置有哪些?

Cluster含有一个Manager:

Manager有4个成员:

Cluster Name:   默认采用的是 “cluster” + CLUSTER_ID.incrementAndGet(),可不配。

ContactPoints:  配置的通信节点,可以有多个。区别于具体做业务的节点,这些节点负责建立通信,同步一些节点Up/Down等信息。

Configure: 核心配置,有N多配置,决定了Driver如何工作;

Listerners: 监听器,当有节点up/down时,触发监听器,默认无配置。

 

对于Configuration的设计,使用最多的是策略模式+工厂模式。其中配置有很多,比如有用来监控Driver性能的metrics Options, 有负载均衡的loadbancing policy.

基本上每个配置都有默认配置,例如默认会启用Jmx来report metrics.

所以如果不够了解driver就用默认配置为好,但是如果想最大化driver的性能,还是需要了解每个配置的含义,这也是唯一对于用户可见可改之地。

 

学习要点: 设计模式(策略模式+工厂模式)