VOLT ACTIVE DATA于传统数据库有哪些差别?
前言
> VOLT是Mike Stonebraker 博士主导开发的云原生的内存数据库。他是唯一原生分布式的数据库。VOLT降低了服务器资源开销,通过使用低廉的服务器,在其架构上面,实现高吞吐率gps。同时VOLT提供开源版本和商业发行版本,与行业间有大量的深入交流。 >
VOLT于2017年进入中国市场,现在已经拥有大量中国客户,应用场景包括电信、金融系统、核心网计费解决方案等 ,遍布全国。
1
针对老生常谈的数据库设计原则的技术探索
通过对传统数据库分析发现, 88%的CPU时间耗费在分布式的并发控制以及缓存管理上。对于传统数据库,尤其是关系型数据库而言,这是一些不得不面对的痛点。那这些痛点是无法解决的吗?还是说我们只能靠堆资源、 堆机器去解决呢?还是说另有其他的思路?
1、 事务隔离级别
VOLT采用了最严格的序列化的方式,同时用单分区的序列化,然后又多分区的并行,来应对。
2、CAP
VOLT最初设计的时候,探讨在一些极端的情况下,CAP不是你能做什么,而是做不到什么?怎么办?
VOLT在考虑了衡量工具的情况下,做了一些对应机制的设计,包括部分副本崩溃情况下的应对策略(如,活跃的副本提供服务)、多副本活跃但同步失效情况下的应对策略(多副本活跃但同步失效情况下的应对策略(如:VOLT提供 brain split 侦测))。
3、Lock&Latch
在传统的关系型数据库中,Lock&Latch开销非常大,尤其在分布式系统下,一旦横向扩容到比较大程度,以及存在一些死锁,尤其分布式锁的情况下,其所带来的锁的性能的损失非常巨大,这也就是很多传统数据库无法横向扩容的一个重要原因。
而VOLT所用机制则基本上把锁开销就完全取消掉。
4、并行Parallel vs. 并发 Concurrent
并行指“真的在有两个咖啡机”;并发指“看起来有两个队伍,但其实只有一个咖啡机”。VOLT使用了分区并行的策略和事务队列串行化的策略结合,能够实现惊人的gps,另外一方面又避免了锁的开销。
2
VOLT的解决落地
首先VOLT是一个权力存基层的,也就是说所有的数据,包括计算的逻辑、数据的存储、表设计的结构啊,都是在内存中,分布在各个节点中这些节点之间大部分情况下是没有锁的。
VOLT每个节点上面都有一定量的分区,分区之间通过内部的机制,可以把它分散到各个节点上去,这样可以防止单节点故障。
VOLT还有一个重要特点——按CPU内核分区,一个节点上面比方说有24个核,建议16个左右的分区,这样每个CPU都对应一个分区,捆绑在上面后,每个分区上面的事物都是串行的情况下,便完全避免了锁的开销。
VOLT多个分区之间完全并行,从CPU到Thread到内存(包括共享内存)到网络到硬盘,整个一条线都是并行的。
同时VOLT能够实现数据库内的事务控制,即业务层不需要关心事物的处理。VOLT选择讲所有的事务都在集群内完成的机制,对于client 来说,无需控制事务。
此外VOLT采用无共享设计,能够避免瓶颈。从CPU 到内存到网络,没有share,全部分布式。
可以说,VOLT是一个原生的分布式的数据库, 其扩容、分区的均衡等,全都对于业务层_是透明的。
<<逻辑架构
从一个稍微内部一点的逻辑架构上来看,每个节点都是对等的,然后每个节点内部呢,又有不同的分多个分区,每个分区各个分区之间又是对等的,他内部都内嵌了事务处理,事务处理的队列,还有我们放到里面的业务逻辑,然后他会去操作这个数据表。这样每个区的分区就负责自己分区的数据表,也负责自己分区的落盘,这所有的都是并行的。一些外部的一些扩展功能,包括流支持、PMML的UDF等,都完全并行派发到各个分区去。
数据落盘等持久化任务在每个节点并行执行,集群间同步在对应分区间并行完成,实现性最大化。
<<性能测试比较
通过在经典的TPC-C的测试中做了一些对比发现:
① 单漏吞吐率,有大约45倍的吞吐的提升。因为VOLT没有锁的开销,且是内存型数据库,能够减少很多缓存处理等,可见其存储类的出色。
② 线性扩展,比方说在12根柱子的情况下,VOLT的吞吐率在大约有十倍以上的提升,这些个都是传统数据库所不具备的,可见其线性扩展的优势。
那这些特性不止来自于他的是内存,如何使用CPU、 在什么环节上使用了并行、什么环节使用了串行方式,这些实现了VOLT在性能上的提升。
<<线性扩容测试
从延迟来看,在加到25个节点以上的时候,VOLT的延迟基本上没有太大的变化,吞吐也基本是线性的。VOLT还有一个很好的特性——一键无痛扩容,像redis的扩容操作,它的recharging过程比较麻烦,所以VOLT也减少了很多运维的成本。
3
VOLT关键特性
① 基于分区的分布式设计
VOLT是基于分区的,每个分区功能非常独立,因此特别好扩展,几乎是线性。并发与高并发得益于它的内存行与各个分区都可以并行去处理需求的特性,每个节点都可以对接client,自动的派发到各个CPU。CPU每个分区各自独占的,没有锁开销。另外VOLT的主备、多活的支持也基于这个分区的设计。。
② 分区内单线程设计
这对ACID的保证关系很大,几乎是避免了锁的开销。
③ 内存存储
内存存储带来了低延迟的优势,加上commandlog机制,可以去保证强一致持久化。
4
实现机制
VOLT通过每个分区对应一个site,每个site对应一个SPI(Single Partition Initiator。负责本Partition的事务执行)。每个site中又都对应一个Zookeeper的节点实例,实现了在VOLT中的一些特点,做了一些定制。这是一个独特的品牌的一个实力,能够担当分布式系统里面的协调作用。
总结
易用性
- 存储模式:关系型行式数据存储
- 无专门编码语言: 标准SQL 实现复杂计算,无二次学习成本
- 存储过程/UDF: JAVA + SQL + PMML = 实时规则执行引擎
- 原生TTL支持:数据时效性周期自动删除和数据转储
- 集成机器学习:JAVA-ML / PMML 热加载运算
- 支持任务式调度:可以在 VOLT定义各种定时执行的批任务
- 支持流式计算:支持按Topic订阅和发布,兼容Kafka API,并在流中完成复杂计算
安全性
- 无数据丢失: 强ACID、内生数据持久化、立即一致性
- 无安全隐患:授权用户、支持SSL加密通讯
运维
- 图形化监控: 自带图形化管理工具,可与普罗米修斯等集成,开放监控接口
- 工具丰富:细粒度显示集群各种指标,部署方便操作简便
云化部署
- 云原生数据库:支持容器化、虚拟化部署,支持Kubernetes Operator,自动编排、自动扩缩容
高可用
- 数据冗余:集群内可配置多个副本
- 多集群复制: 原生支持多数据中心同步(主-主、主-备)
- 在线扩展: 无共享架构、性能线性增长。
完整视频介绍,可见示说网:https://www.slidestalk.com/VoltDB/VOLTACTIVEDATA228613?video
如果您希望集成VOLT到您的技术栈中,请与我们联系!
Volt Active Data中国站:https://www.voltdb-china.cn/