快速潜入NOODB架构

介绍

传统上,关系数据库是为扩大型架构而设计的。支持更多客户端或更高的吞吐量需要升级到更大的服务器。直到最近,这意味着实施读取&写出扩展架构需要NOSQL数据库并放弃传统的关系数据库福利,或依赖分片和显式复制。没有可以扩展的解决方案,仍然提供完全酸(原子性,一致性,隔离和耐久性) - 替换语义。这种紧张局势是激发了新闻问讯运动,最终导致了今天的现代“弹性SQL.“数据库。

NuodB是一个弹性的SQL数据库,旨在考虑分布式应用部署挑战。它是一个完整的SQL解决方案,提供符合符合酸的交易和标准关系SQL语言支持的所有属性。这也是 从一开始就像分布式系统 该缩放云服务必须缩放的方式,提供高可用性和弹性,没有单点故障。与传统的共享磁盘或没有共享的架构,Nuodb的专利数据库都具有新的点对点,按需独立性,产生高可用性,低延迟和易于管理的部署模型。

本文突出了关键概念和架构差异 将Noodb分开 来自传统关系数据库,甚至是其他弹性SQL数据库。

诺福德架构

多个独立服务

Nuodb将传统的单片数据库进程拆分为两个独立服务:事务处理服务和存储管理服务。每个服务都可以独立缩放。它还具有管理组成部分。本节侧重于支持应用程序数据库活动的事务和存储处理服务层。

分解事务和存储处理服务是制作关系系统的关键 规模。传统上,SQL数据库旨在使具有内存结构的数据的磁盘表示(通常基于B树数据结构)同步。这种加工和存储管理的紧密耦合导致难以扩展的过程。分离这些服务允许可以扩展的架构,而不与磁盘吞吐量一样敏感(如共享磁盘架构中)或需要显式分片(如共享 - 无线架构中所见)。

在NOODB中,耐久性与事务处理分开。这些服务分别缩放并独立处理故障。因此,可以增加事务吞吐量,不会对数据存储的地点或方式产生影响。类似地,数据可以存储在多个位置中,没有对应用模型的影响。不仅是制作数据库规模的关键,它使NuodB能够​​按需缩放并实现强大的自动化模型。

[图1:该架构由三个独立服务组成。]

交易服务负责维护运行事务中的原子性,一致性和隔离。它无法解决数据如何耐用。它是一个纯粹的内存层,所以它有效,因为它没有与耐用性的连接。交易服务是一个 永远活跃,始终保持一致,按需缓存。

存储管理服务确保耐用性。它负责在事务缓存中未命中持续处理数据并提供对数据的访问权限。它通过一组点对点协调消息来实现这一点。

上面讨论的两个服务由跨越任意数量的主机运行的进程组成。 Nuodb通过在两个模式之一中运行单个可执行文件来定义这些服务:作为一个 交易引擎(TE) 或者 存储管理器(SM)。所有进程都是对等体,没有单一协调器或故障点,任何主机都无需特殊配置。因为只有一个可执行文件,所有对等体都知道如何在播放单独的角色时协调。我们将TES和SMS称为引擎。

TES接受SQL客户端连接,解析和运行针对缓存数据的SQL查询。所有进程(SMS和TES)通过简单的点对点协调协议相互通信。当TE在其本地缓存上持续错过时,它可以从任何对等体中获取所需的数据(具有数据库中的数据的另一个TE或可以访问持久商店的SM)。

这种简单,灵活的型号使得启动,按需缩放,并且非常容易实现实时迁移。开始然后缩放数据库只是一个选择要运行多少进程,在哪里以及其中角色的问题。最小酸NuodB数据库由两个进程,一个TE和一个SM组成,在同一主机上运行。

从此最小的数据库开始,在第二个主机上运行第二个TE双打事务吞吐量,并在发生故障时提供事务冗余。当新TE启动时,它相互验证使用运行进程,填充其缓存中的一些根对象,然后可用于事务负载。整个过程在典型系统上少于100毫秒。这两个TE具有相同的功能,并且是数据库中的活动参与者。

同样,通过开始多于一个SM来维护数据库的多个独立持久的副本。可以在任何时候启动新SM,并在接受活动角色之前自动与正在运行的数据库同步。一旦同步,新SM将维护完整数据库的活动,一致的存档。

原子:内部物体结构

事务层的前端接受SQL请求。在该图层之下,所有数据都存储在名为原子的对象中并管理。原子是单协调对象,其代表特定类型的信息(例如数据,索引或模式)。与数据库相关联的所有数据,包括内部元数据,由原子表示。

原子性,一致性和隔离规则应用于Atom交互,没有具体知识,原子含有SQL结构。 TE的前端负责将SQL内容映射到相关原子,同样部分优化器的责任是理解此映射,并且哪些原子最立即可用。

[图2:事务引擎具有面向客户端的层,可接受SQL请求和内部驱动事务,并以语言中性形式与其对等体通信。]

原子是数据库的块,可以在大小范围内,与固定大小的页面或其他传统的磁盘结构不同。原子也是自我复制的,确保原子的状态在发动机上是一致的。选择原子的大小以帮助最大化通信效率,最小化在缓存中跟踪的对象的数量,并简化跟踪变化的复杂性。

只需要必需的对象被拉入缓存中。一旦不再需要对象,就可以从缓存中删除。 TE可以随时从另一个TE缓存请求它需要的对象。如果TE在其缓存中没有给定原子,则它不会参与该原子的缓存更新协议。

数据耐用性

将所有数据抽象成原子以简化耐用性模型。每个原子存储为键值对文件。通过设计,可以使用支持CRUD接口的任何文件系统来完成耐用性,并且可以保存数据库的完整存档。

[图3:SM将A原子的缓存和存储到磁盘,包括Journal和Archive Management。]

除了在档案中跟踪规范数据库状态外,SMS还保持了所有更新的杂志。由于Nuodb使用MVCC,因此Journal只是一个待追加的差异,在实践中是非常小的。从期刊写作和重放是高效的。

管理层

以及两个数据库服务是管理服务。与数据库一样,管理服务是对等过程的集合。这些进程称为代理,并且在每个主机上运行数据库可能是活动的。在主机上启动管理服务是一个配置步骤;它使主机可用于运行数据库进程并对管理环境可见。配置的主机集合称为管理域。

域名是管理边界。它定义可用于运行数据库的资源池和具有管理这些资源的权限的用户集。在传统术语中,DBA侧重于给定的数据库和系统管理员在管理域级工作。

每个代理都是管理一组发动机。对于物理服务器部署,这通常是在同一本地主机上运行的引擎。经纪人负责发动机过程管理(开始/停止),监控和配置管理。经纪人还具有域中所有经纪人的全局视图,因此是从监视的角度来看的所有进程,数据库和事件。

所有经纪人都具有相同的域视图和相同的管理功能。因此,只要部署多个经纪人,就像发动机一样,只要部署多个经纪人,就没有单一的故障。为域提供新主机是通过启动到现有经纪人之一的新代理。

[图4:管理客户端向代理发送单个管理消息以在某些主机上启动进程。启动TE后,管理信息将流回所有经纪人。]

当SQL客户端想要与TE通信时,它通过连接到代理来开始。经纪人告诉客户端建立连接。这种连接经纪代理是经纪人的关键角色之一,这意味着经纪人也是负载平衡点。可插拔负载平衡策略可插入,可以实现,以支持围绕关键因素的优化,如资源利用率或局部性。

正如SQL程序员将NOODB数据库作为单个逻辑实体址,即使它在许多进程上分发,系统管理员也可以作为单个逻辑管理点的域名。这是通过任何经纪人完成的。它们提供单个连接到域,管理和监视数据库的位置,并确保系统按预期运行。

结论

随着软件开发组织正在移动到云部署模型,需要新的数据库架构。本文介绍了NOODB的主要架构元素 - 弹性SQL数据库。要查看nuodb在行动中,请观看演示视频 www.nuodb.com/full-demo.。为了自己尝试Nuodb,Nuodb提供免费的社区版。只是去吧 www.nuodb.com/download..

要阅读本文的完整版本,请下载我们的 技术白皮书.

 

---

马丁凯尔斯Martin自2015年以来一直是Nuodb的一部分,Scrum Master和Tech Lead。他对平台和SQL之间的交叉路口的工作使他不仅可以了解Nuodb的战略差异化,而且还为已建立的球员的共同性了解。马丁对技术充满热情,通过谈判,文章和聚会分享他的知识。他10多年的经验涵盖了从DB /网络管理到高性能分布式软件工程的各种角色。