8月份的社区线上开发者活动,邀请到的演讲嘉宾蔡一凡老师是Cassandra贡献者之一,其所在公司部署了全球最大的Cassandra集群节点数量。
本次演讲介绍了Cassandra 4.0版本中的新功能:审计日志、零拷贝串流、Netty节点间通信、虚拟表、增量式修复、临时副本等。
1、审计日志:
将数据库所有操作记录到一个本地文件,包括authentication,所有的CQL请求,不论成功与否都会被记录下来。用途广泛,如利用记录来debug线上问题,也可以辅助测试。4.0版本中同步推出的full query logger就是用审核日志来实现的,这些由full query logger生成的记录可用来做回放测试。另外,也可以帮助企业做合规管理,可作为企业的审核依据。
2、零拷贝串流:
零拷贝串流是指在串流时无需将数据读到内存后再写入到网络,发送方和接收方可以直接通过网络发送和接收数据。从而显著提升性能(3-5倍的速度),远小于普通串流所需的时间,并大大减少内存和CPU的占用。在Cassandra中,串流会被应用于很多场景。基本所有数据在集群中被复制时都可用到。
零拷贝串流可帮助缩短节点的恢复时间,降低多个节点同时处于不可用状态的概率。可以帮助降低运维成本。如加速节点数据迁移速率。
3、Netty节点间通信
在4.0版本中,节点间通信改成了Netty。I/O是非阻塞的,不再按节点分配线程。
Netflix通过测试192个节点的Cassandra集群,对比4.0和3.0版本,发现4.0版本的延迟平均值减少40%,99分位的延迟减少了60%,吞吐量提升约2倍。
另外,节点间加密通信扩展性更高,主要是得益于Netty的tcnative。它跟JDK自带的加密性能相比,大概提升了有4倍。
4、虚拟表
虚拟表是基于Cassandra内部的一些API实现的,可以把虚拟表当作Cassandra的一个接口。目前虚拟表是只读的。每一个虚拟表都是每个节点所特有的,也就是说虚拟表是local的。有了虚拟表,我们可以不用JMX,通过CQL来进行查询虚拟表,从而获取Cassandra的系统状态和当前配置。
5、增量式修复
增量式修复在2.1版本中就已推出。但这个功能存在一些问题,不适用于生产环境。Cassandra 4.0把之前的很多问题修复了。增量式修复将数据分为“已修复”和“未修复”两个部分,每次修复时只修复“未修复”的部分,不再修复已修复过的数据。从而减少每次修复的时间,只需要几分钟即可完成。
6、临时副本
临时副本是4.0版本的试验性功能,并不推荐用在生产环境中。临时副本节点只保存没有修复的数据,在修复之后,这些数据就会被临时副本节点删除。这个功能最好是和增量式修复一起使用,这样可以很快地从临时副本节点中将未修复的数据修复,之后再删除。这样一来,可以认为临时节点并不占用存储空间。
临时副本节点带来的好处是减少存储空间,临时节点只保留临时数据,数据量比较小,修复完就删除,所以这个节点会使用更少的CPU和I/O。