
# 存算分离
存算分离（Storage-Compute Separation）是一种将数据存储与计算能力解耦的架构设计，在TaurusDB中，存储层和计算层可以独立扩展和管理。这种架构使计算资源可根据业务需求灵活调整，而存储资源可独立扩展，无需考虑计算节点的影响，从而提高资源利用率，降低总体拥有成本，支持更灵活的部署和扩展策略。
#### 为什么需要存算分离
传统数据库架构中，计算与存储紧密耦合，资源分配固定且难以调整。企业需要根据业务峰值预留足够资源，导致日常资源闲置浪费；与此同时，当业务突发性增长超出预期时，又面临资源瓶颈，系统性能急剧下降，甚至可能引发服务中断。这种业务负载波动与固定资源分配之间的矛盾，已成为制约企业IT效能提升的关键瓶颈。
企业面临两难抉择：一方面，需要严格控制IT成本，避免资源闲置浪费；另一方面，必须确保系统在高负载下仍能保持稳定性能，保障业务连续性和用户体验。这种矛盾在电商大促、节日营销、活动推广等流量激增场景下尤为突出，直接影响业务成果和客户满意度。
华为云TaurusDB DFV存储基于创新的存算分离架构，打破了传统数据库的计算与存储耦合桎梏。通过将计算层与存储层解耦，实现两者的独立扩展与精细化管理，使两者可以独立扩展和管理：
- 计算层弹性伸缩：可根据实时业务负载动态调整计算资源，实现秒级扩缩容，精准匹配业务需求。
- 存储层独立扩展：存储容量可按需线性扩展，不受计算节点限制，满足海量数据增长需求，实现资源的按需分配。
这种架构不仅提高了资源利用率，降低了总体拥有成本，还简化了运维工作，让企业能够更专注于业务创新，快速响应市场变化。
#### 存算分离的优势是什么
- 计算与存储解耦：计算层和存储层在架构上相互独立，可以分别进行管理和扩展，互不影响。
- 资源独立扩展：计算资源和存储资源均可根据业务需求灵活调整，且存储资源可独立扩展，无需相互影响。
- 高可用架构：通过多副本机制和数据冗余存储，确保数据的安全性和可靠性。
- 资源利用率高：避免了因固定资源分配造成的闲置浪费，从而提升了整体资源利用效率。
 
#### 存算分离的使用场景
- 电商平台促销活动支撑**：**电商平台在促销活动期间面临流量激增的挑战，日常访问量波动大，需要应对突发的高并发访问。采用TaurusDB存算分离架构，存储层与计算层解耦，能够独立扩展计算资源以应对流量高峰，同时保持存储层的稳定性和数据一致性。这种架构使系统能够灵活应对促销期间的突发流量，确保订单系统、商品库存管理和用户数据存储服务的稳定运行，避免了因存储和计算资源耦合导致的性能瓶颈，同时保障了促销活动期间的业务连续性。
- 移动应用后端服务：移动应用用户规模快速增长，访问量难以预测，同时需要保证低延迟的响应速度。TaurusDB存算分离架构为移动应用提供用户数据管理、消息推送和内容存储等后端服务，存储层可独立扩展确保数据高可用性，计算层可根据实际负载动态调整资源。这种架构简化了运维复杂度，使系统能够快速响应业务变化，同时存储和计算资源可分别针对数据持久性和计算性能进行优化，有效提升了用户体验和服务响应速度。
- 数据分析平台：数据分析师经常需要处理大量历史数据，查询模式复杂多变，导致计算资源需求波动较大。TaurusDB存算分离架构为数据分析平台提供数据存储和分析服务，存储层针对大数据量进行优化，确保数据持久性和高效访问，计算层可根据查询复杂度和并发度动态调整。这种架构支持计算引擎共享同一存储层，从而提高数据共享和复用效率。同时，存储和计算资源可独立升级，不影响整体服务可用性，进而显著提升数据处理效率和分析灵活性。
 
#### 存算分离的工作原理
架构从上到下分为3个部分：计算层、存储抽象层（Storage Abstraction Layer, 简称SAL）和存储层。
- 计算层：主要由一个主节点和多个只读节点组成。主节点负责提供业务的读写能力，而只读节点则用于分担读取负载，提高系统的整体性能和可用性。
- SAL层：位于计算层和存储节点的中间层，主要给InnoDB层提供日志和数据的存储服务。将原始数据库基于表文件的操作抽象为对应分布式存储，向下对接DFV，向上提供高效调度的数据库存储服务，是数据库高性能的核心。
- 存储层：基于华为DFV存储，提供分布式、强一致和高性能的存储能力，此层来保障数据的可靠性以及横向扩展能力，保证数据的可靠性不低于99.999999999%。包括两个主要的存储子服务：Log Store和Page Store。
  - Log Store：用来持久化日志的服务。
  
  - Page Store：提供一致性多版本页面能力的存储服务。为便于管理页面数据，我们采用分片方式存储多个Page数据，每个分片（Slice）的大小固定为10GB。
   
图1架构图   
![](https://support.huaweicloud.com/productdesc-taurusdb/figure/zh-cn_image_0000002659546309.png "点击放大")
#### 存算分离与存算一体的区别
存算分离架构与存算一体架构是两种不同的数据库服务实现方式。它们共同为应用提供数据存储和计算能力，核心目标一致，均致力于保障数据安全并提供高效的数据访问和处理能力。在应用领域上，两者存在广泛重叠，均可应用于OLTP（在线事务处理）、OLAP（在线分析处理）等多种场景；同时，它们在基础功能方面也具有相似性，均支持事务处理、数据持久化、备份恢复等核心数据库功能，为各类业务场景提供稳定可靠的数据服务支撑。
**核心差异**
1. 资源扩展模式
   - 存算分离：存储资源与计算资源完全解耦，可根据业务需求独立扩展存储容量或计算能力，二者互不影响。
   
   - 存算一体：存储与计算资源耦合为一个整体进行扩展，增加或减少资源时需同时考虑两者。
    
2. 资源利用率
   - 存算分离：可根据实际负载分别优化存储和计算资源，避免资源闲置，提高整体资源利用率。
   
   - 存算一体：存储和计算资源必须按照峰值需求配置，容易导致资源闲置或不足，资源利用率相对较低。
    
3. 故障隔离与恢复
   - 存算分离：存储层和计算层的故障相互隔离，单一组件的故障不会导致整个系统不可用，恢复过程更为灵活。
   
   - 存算一体：存储与计算紧密耦合，任一组件发生故障都可能影响整个系统的可用性，并且恢复过程较为复杂。
    
**差异原因**
造成存算分离与存算一体核心差异的根本原因主要有：
1. 设计理念不同：存算分离基于资源解耦和独立优化的设计理念，旨在最大化资源利用率和系统弹性；而存算一体则基于资源整合和简化管理的理念，强调部署便捷性和运维的统一性。
2. 技术架构不同：存算分离需要分布式存储和计算分离的技术支持，从而实现存储与计算的完全分离；而存算一体则通常采用传统的单体架构设计，将存储和计算紧密耦合在一起。
表1存算分离与存算一体的区别 
| 对比维度    | 存算分离           | 存算一体            |
|:---|:---|:---|
| 资源扩展模式  | 存储和计算资源可以独立扩展  | 存储和计算资源作为一个整体扩展 |
| 资源利用率   | 可根据负载分别优化，利用率高 | 需按峰值配置，利用率相对较低  |
| 故障隔离与恢复 | 存储层和计算层故障相互隔离  | 存储和计算耦合，故障影响范围大 |
   
