存算分离

来自智得网
跳转至: 导航、​ 搜索

简介

在传统的应用程序中,通常将数据存储和计算放在同一个模块中,这种设计方式有以下问题:

  1. 代码耦合度高,一个模块的修改可能会影响到其他模块;
  2. 可维护性差,代码难以理解和修改;
  3. 可扩展性差,当应用程序需要扩展时,需要修改现有代码,导致代码变得复杂;
  4. 可重用性差,难以将模块的代码移植到其他应用程序中。

因此,将数据存储和计算分离是一种良好的设计模式。

存算分离通过将存储和计算分离的方式,将计算节点转为了无状态节点,而存储节点和计算节点的分离可以使用中心化的存储集群,提升存储的可靠性和扩展性。存算分离主要用于对数据一致性较高,数据相对离散的场景更加适合。

存算分离在多种场景下都有较为广泛的使用,例如数据库领域的Aurora等。

和存算分离架构对应的是存算一体,其主要思想是让计算节点靠近存储节点,甚至存储节点就是计算节点。这种方式可以减少IO成本,对于批处理场景需要处理大量数据的情况下,存算一体可以通过减少IO对性能有较高的提升。

原理

为了实现存算分离,我们需要将数据存储和计算分别处理,分别由不同的组件或模块来负责。

数据存储模块负责将数据存储到持久化存储介质中,并提供数据的增删改查操作。数据存储模块可以是关系型数据库、非关系型数据库、文件系统等。

数据计算模块负责从数据存储模块中读取数据,进行计算并输出结果。数据计算模块可以是应用程序的核心业务逻辑部分,也可以是数据处理的一个单独的模块,甚至可以是一个独立的服务。

为了让数据存储和计算模块能够有效地协作,我们需要定义一套良好的接口。接口应该包括数据存储的接口和数据计算的接口,以及数据存储和计算的交互接口。

应用

Aurora是亚马逊Web Services(AWS)提供的关系型数据库管理系统,它采用了存量分离的架构,将计算和存储分离开来,从而提高了系统的可伸缩性、可用性和性能。Aurora对存量分离的应用体现在以下方面:

  1. 存储层面的分离:Aurora的存储层面采用了分布式存储架构,将数据分片存储在多个节点上,这些节点可以跨越多个可用区域(Availability Zone)进行复制和同步,从而提高了数据的可靠性和可用性。此外,Aurora还采用了多副本同步(Multi-AZ)和自动容错(Automatic Failover)等技术,可以快速地恢复系统,减少了数据丢失和服务中断的风险。
  2. 计算层面的分离:Aurora的计算层面采用了分布式计算架构,将计算任务分配到多个节点上进行处理,从而提高了系统的处理能力和响应速度。Aurora还采用了高可用性(High Availability)和自动负载均衡(Automatic Load Balancing)等技术,可以自动地调整计算资源,保持系统的稳定性和高性能。
  3. 存算分离的支持:Aurora将存储和计算分离开来,可以分别对存储和计算资源进行扩展和优化。用户可以根据实际需要调整存储和计算资源的规模和性能,从而提高系统的可伸缩性和灵活性。此外,Aurora还支持多种存储引擎和计算引擎,包括MySQL、PostgreSQL和AWS Lambda等,可以满足不同用户的需求和应用场景。

数据存储模块

Aurora的数据存储架构是基于亚马逊的存储服务Amazon S3(Simple Storage Service)进行设计的,其底层存储模型是由一个分布式存储系统组成的。在Aurora中,数据被分成了多个2MB大小的块,每个块都会被自动复制到多个可用区,保证了数据的高可用性和容错性。同时,Aurora还采用了一种基于SSD的存储技术,使得其具有出色的性能。

Aurora的数据存储模块采用了传统数据库常用的B+树索引结构。B+树是一种多叉树,其非叶子节点存储的是关键字的值,而叶子节点存储的是实际的数据记录。Aurora的B+树索引结构支持高效的范围查询和高效的分页查询,同时还支持快速的插入和删除操作。

Aurora还采用了WAL(Write-Ahead Logging)日志技术来保证数据的一致性和可靠性。WAL日志技术是指在数据被写入磁盘之前,先将数据写入一个日志文件中。当需要恢复数据时,可以通过读取日志文件来恢复数据。Aurora的WAL日志技术支持非常高的写入吞吐量,同时保证了数据的可靠性。

Aurora的数据存储模块采用了多种技术来保证数据的容错性和高可用性。数据会被复制到多个可用区,这样即使某个可用区出现故障,也能保证数据的可用性。同时,Aurora还会自动检测和修复故障,从而减少了数据恢复的时间和成本。

总之,Aurora的数据存储模块是一种高性能、高可用性、可伸缩性和高可靠性的关系型数据库管理系统。其数据存储模块采用了类似于传统数据库的B+树和WAL日志技术,并且对其进行了优化,同时还支持多种容错性和高可用性技术保证数据的安全性。

数据计算模块

亚马逊的 Aurora 是一个高可用性、可扩展性和性能强大的关系型数据库服务,Aurora 的计算模块是由 Amazon Aurora 数据库引擎驱动的,它提供了高性能的查询和数据处理能力。

Aurora 的计算模块主要包括以下组件:

  1. Amazon Aurora 数据库引擎:Aurora 使用了一种云原生的数据库引擎,它基于 MySQL 和 PostgreSQL 构建,提供了与这两种关系型数据库相似的语法和功能。但是 Aurora 在性能和可用性方面都进行了极大的优化,比如使用了分布式存储、多 AZ 复制、高速网络等技术,以提供更高的性能和可靠性。
  2. 分布式计算引擎:Aurora 的计算模块采用了分布式计算引擎来处理数据,它支持并行查询和计算,并通过数据分片和数据本地化等技术来提高计算效率。
  3. 多 AZ 复制:Aurora 的计算模块使用多 AZ 复制技术来保证数据的高可用性和容错性。当某个 AZ 发生故障时,Aurora 会自动切换到另一个可用的 AZ 上继续提供服务,保证用户的数据和应用程序不会受到影响。
  4. 高速网络:Aurora 的计算模块使用高速网络来加速数据传输和计算处理,提高了数据的处理效率和响应速度。
  5. 按需扩展:Aurora 的计算模块支持按需扩展,可以根据业务需求来动态增加计算资源,以满足不断增长的数据处理需求。

总之,Aurora 的计算模块采用了先进的技术和架构,为用户提供了高性能、高可用性和可扩展性的数据库服务。

存储计算交互

Aurora的引擎和存储之间通过网络进行交互,使用一种称为Aurora Storage Protocol的协议进行通信。这个协议是亚马逊自行设计的,它是一种基于二进制的协议,支持高并发、低延迟的数据读写操作。

Aurora的引擎采用一种基于共享存储的架构,它将数据库实例中的数据存储在一个共享的分布式存储系统中,称为Aurora存储层。该存储层是一组高可用性、高可扩展性、低延迟的存储节点,每个节点都运行着Aurora存储引擎。

当应用程序需要读写数据时,它首先将请求发送给Aurora的引擎层。引擎层负责解析请求,确定需要访问哪些数据。然后,它将这些请求转发给存储层中的一个或多个节点,以读取或写入数据。

存储层中的每个节点都负责维护一部分数据,每个节点之间通过网络进行数据同步,以确保数据的一致性。Aurora使用一种称为"多副本一致性"的机制,确保每个节点上的数据都是最新的。在这种机制下,每个节点上的数据都被复制到多个节点上,这些副本之间通过一种快速的、异步的数据同步机制进行同步。

当一个节点收到读请求时,它首先检查自己是否具有所需的数据。如果是,它将数据返回给引擎层,引擎层将结果返回给应用程序。如果不是,它将请求转发给其他节点,直到找到所需的数据。

当一个节点收到写请求时,它将立即将数据写入自己的存储中,并将写入操作记录到一个日志中。然后它将写入请求转发给其他节点,并等待收到其他节点的确认信息。当所有节点都确认写入成功后,它将返回确认信息给引擎层,引擎层将结果返回给应用程序。这种机制确保了数据的一致性和可靠性,即使在节点故障或网络故障的情况下也能够保证数据的安全。