Hubble是一种分布式SQL建立在事务性和强一致性的键值存储基础上的数据库。它的磁盘、机器、机架甚至数据中心故障发生概率低,延迟中断情况的可能性小;支持强烈一致ACID交易;并提供熟悉的SQL语言用于构造、操作和查询数据的API。
Hubble数据库非常适合高可用和以毫秒响应时间的应用程序;无论其规模如何,它重在以最小的配置和开销实现数据自动复制、重新平衡和恢复。具体用例包括:
Hubble数据库在2ms或更短时间内返回单行读取,在4ms或更少时间内返回单行写入。并支持SQL优化查询性能。
Hubble数据库水平扩展,开销最小。
在键值级别,Hubble数据库从一个单一的空范围开始;当您输入数据时,这个单一范围最终会达到最大阈值。发生这种情况时,数据分为两个ranges,每个覆盖整个键值空间的一个连续段。这一过程将无限期地继续下去;随着新数据的流入,现有range将继续拆分,以保持相对较小且一致的大小。
当集群跨越多个节点(物理机、虚拟机或容器)时,新分割的range会自动重新平衡为具有更多容量的节点。
Hubble数据库的设计从服务器重启到数据中心停机的软件和硬件故障后,能继续提供服务。使用强一致性复制以及故障后自动修复技术,可以在不混淆其他系统的情况下实现这一点。
复制
基于Raft一致性算法,Hubble复制您的数据以确保可用性。根据您希望防止的故障的实际情况来定义副本的位置,可以采用多种方式。
在跨多个地理区域的数据库集群中,区域之间的往返延迟将直接影响数据库的性能。在这种情况下,重要的是要考虑每个表的延迟要求,然后使用适当的数据拓扑定位数据以实现最佳性能和恢复能力。
自动修复
对于短期故障,例如服务器重启,只要大多数副本仍然可用,Hubble就能保证服务正常运行。Raft确保在前负责人失败时为每个副本组选出一个新的负责人,以便事务可以继续进行,受影响的副本可以在重新联机后重新加入其组。对于较长期的故障,例如服务器长时间停机或数据中心停机,Hubble会使用未受影响的副本作为源,自动从丢失的节点重新平衡副本。使用所有可用节点以及群集的聚合磁盘和网络带宽以分布式方式重新复制丢失的副本。
Hubble确保可序列化SQL事务标准定义了最高隔离级别。它通过将写操作的Raft一致性算法和读操作的自定义基于时间的同步算法相结合来实现。
为了确保写入事务不会干扰其后开始的读取事务,Hubble还使用时间戳缓存技术,它会记住正在进行的事务读取数据的时间。
这个CAP定理声明分布式系统不可能同时提供以下三种保证中的两种以上:
Hubble是一个CP(一致和分区容忍)系统。这意味着这样,在有分区的情况下,系统将变得不可用。例如,写操作需要大多数副本的确认,而读操作需要租约,只有在可以写操作时才能将租约传输到其他节点。
Hubble数据库也是高度可用的,尽管这里的可用与CAP定理中的使用方式不同。在CAP定理中,可用性是一个二进制属性,但对于高可用性,我们将可用性称为频谱(对于99.999%可用的系统,使用'五个九'之类的术语)。
既是CP又是HA,意味着只要大多数副本可以相互通信,它们就应该能够取得进展。例如,如果您将Hubble部署到三个数据中心,而其中一个数据中心的网络链接出现故障,那么其他两个数据中心应该能够正常运行,且只有短暂的中断时间。
支持。Hubble数据库在集群中分发事务,无论是单个位置的几台服务器,还是多个数据中心的多台服务器。与分片设置不同,您不需要知道数据的精确位置;您只需与集群中的任何节点进行对话,Hubble就会将您的事务无缝地发送到正确的位置。在进行重新平衡时,分布式事务可以在没有停机或额外延迟的情况下继续进行。
在最底层,Hubble数据库是一个分布式、强一致性、事务性键值存储,外部API是带有扩展的标准SQL。这为开发人员提供了熟悉的关系概念,如模式、表、列和索引,以及使用成熟,有过长时间验证,操作性简单、查询能力突出。此外,由于Hubble支持PostgreSQL连线协议,所以让应用程序与数据库对话很简单。
支持,每次事务确保确保ACID语义跨越任意表和行。
Hubble支持将多个SQL语句在单个事务中提交。每个事务都能保证在集群中跨多表的ACID特性。当一个事务成功,则所有都确保其成功。如果事务的任何部分失败,整个事务将中止,数据库将保持不变。Hubble保证当一个事务处于挂起状态时,它通过serializable isolation
事务级别,将其与其他他并发事务中隔离出来。
不需要。Hubble数据库的设计没有原子钟。Hubble是一个在任意节点集合上运行的数据库,然而Hubble数据库确实需要适度的时钟同步才能保证正确性。如果时钟漂移超过最大阈值,节点将脱机。
Hubble支持PostgreSQL连线协议,因此您可以使用任何可用的PostgreSQL客户端驱动程序。汇总语言如下:
JavaScript/TypeScript
Python
Go
Java
Ruby
C
C#(.NET)
Rust
Hubble数据库使用PostgreSQL有线协议,因为它比MySQL协议有更好的文档记录,并且因为PostgreSQL有一个自由的开源许可证,类似于BSD或MIT许可证,而MySQL有更严格的GNU许可证。
如果安全的时候,可以对客户端节点和节点间通信进行加密,并且SSL证书对客户端和节点的身份进行身份验证。当不安全时,没有加密或身份验证。
此外,Hubble数据库支持数据库和表上的通用SQL权限。这个根用户拥有所有数据库的权限,而唯一用户可以被授予数据库和表级别特定语句的权限。
虽然所有这些数据库都支持SQL语法,但Hubble是唯一可以轻松扩展(无需手动复杂的切分)、自动重新平衡和修复以及跨集群分发事务的数据库。
虽然所有这些都是分布式数据库,但只有Hubble支持分布式事务并提供了强大的一致性。此外,这些其他数据库还提供自定义API,而Hubble提供带扩展的标准SQL。