共计 2725 个字符,预计需要花费 7 分钟才能阅读完成。
前言
VOLT 是 Mike Stonebraker 博士主导开发的云原生的内存数据库。他是惟一原生分布式的数据库。VOLT 升高了服务器资源开销,通过应用低廉的服务器,在其架构下面,实现高吞吐率 gps。同时 VOLT 提供开源版本和商业发行版本,与行业间有大量的深刻交换。
VOLT 于 2017 年进入中国市场,当初曾经领有大量中国客户,利用场景包含电信、金融零碎、核心网计费解决方案等,遍布全国。
针对陈词滥调的数据库设计准则的技术摸索
通过对传统数据库剖析发现,88% 的 CPU 工夫消耗在分布式的并发管制以及缓存治理上。对于传统数据库,尤其是关系型数据库而言,这是一些不得不面对的痛点。那这些痛点是无奈解决的吗?还是说咱们只能靠堆资源、堆机器去解决呢?还是说另有其余的思路?
1. 事务隔离级别
VOLT 采纳了最严格的序列化的形式,同时用单分区的序列化,而后又多分区的并行,来应答。
2. CAP
VOLT 最后设计的时候,探讨在一些极其的状况下,CAP 不是你能做什么,而是做不到什么?怎么办?
VOLT 在思考了掂量工具的状况下,做了一些对应机制的设计,包含局部正本解体状况下的应答策略(如,沉闷的正本提供服务)、多正本沉闷但同步生效状况下的应答策略(多正本沉闷但同步生效状况下的应答策略(如:VOLT 提供 brain split 侦测))。
3. Lock&Latch
在传统的关系型数据库中,Lock&Latch 开销十分大,尤其在分布式系统下,一旦横向扩容到比拟大程度,以及存在一些死锁,尤其分布式锁的状况下,其所带来的锁的性能的损失十分微小,这也就是很多传统数据库无奈横向扩容的一个重要起因。
而 VOLT 所用机制则基本上把锁开销就齐全勾销掉。
4. 并行 Parallel vs. 并发 Concurrent
并行指“真的在有两个咖啡机”;并发指“看起来有两个队伍,但其实只有一个咖啡机”。VOLT 应用了分区并行的策略和事务队列串行化的策略联合,可能实现惊人的 gps,另外一方面又防止了锁的开销。
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 也缩小了很多运维的老本。
VOLT 要害个性
① 基于分区的分布式设计
VOLT 是基于分区的,每个分区性能十分独立,因而特地好扩大,简直是线性。并发与高并发得益于它的内存行与各个分区都能够并行去解决需要的个性,每个节点都能够对接 client,主动的派发到各个 CPU。CPU 每个分区各自独占的,没有锁开销。另外 VOLT 的主备、多活的反对也基于这个分区的设计。。
② 分区内单线程设计
这对 ACID 的保障关系很大,简直是防止了锁的开销。
③ 内存存储
内存存储带来了低提早的劣势,加上 commandlog 机制,能够去保障强统一长久化。
实现机制
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,主动编排、主动扩缩容
高可用
• 数据冗余:集群内可配置多个正本
• 多集群复制: 原生反对多数据中心同步(主 - 主、主 - 备)
• 在线扩大: 无共享架构、性能线性增长。