什么是云原生存储
云原生是一种开发和运行软件应用程序的新范式,它融合了云计算、容器化、Serverless 和微服务等技术趋势。云原生存储是一种旨在用于云原生环境的存储技术。
云原生存储平台可以存储管理有状态应用程序的数据,并解决 Kubernetes 或其它基于云原生环境的基础设施中一直存在的数据存储挑战问题。分布式架构中的对象存储可以基于现代对象存储、块存储或传统磁盘驱动器提供数据存储服务。
云原生应用和传统应用并没有一个标准的划分界限,其描述的是一种技术倾向,即越符合以下特征的应用越云原生化:
- 应用容器化
- 服务网格化
- 声明式 API
- 运行可弹性扩展
- 自动化的 DevOps
- 故障容忍和自愈
- 平台无关,可移植的
云原生应用是一簇应用特征能力的集合,而实现了这些能力的应用在可用性、稳定性、扩展性、性能等核心能力都会有大幅的优化。优异的能力代表了技术的方向,云原生应用正在引领各个应用领域实现云原生化,同时也在深刻改变着应用服务的方方面面。存储作为应用运行的基石,也在服务云原生化过程中遇到了更多的需求与挑战。
云原生存储的主要特点
云原生存储的关键特性如下:
高可用性
云原生存储必须在高需求中可用。存储系统需要具有即使在事件失败时也能访问数据的功能——无论是在传输系统、存储介质、控制器还是其他组件中。存储高可用性的 3 个要素:
- 在其它存储设备上,维护数据的复制副本。
- 在任何故障情况下,冗余设备都会处理故障转移。
- 故障组件可以修复和恢复。
以下几个是衡量高可用性的指标:
- 恢复时间目标 (RTO) - 从故障到服务恢复的时间。
- 恢复点目标 (RPO):最新的数据副本有多近?它会影响在发生故障时可能丢失的大部分数据。
- 正常运行时间百分比:服务启动和可用总时间的百分比。
- 平均故障间隔时间 (MTBF):故障发生的频率。
- 平均恢复时间 (MTTR):服务从故障中恢复所需的时间。
可扩展性
云原生存储可以轻松灵活扩展。存储系统的可扩展性可以从 4 个维度来定义:
- 客户端可扩展性:有能力增加访问存储系统的客户端和用户的强度。
- 吞吐量可扩展性:能够以更高的吞吐量运行,以 MB/s或 GB/s为单位,或通过同一接口每秒同时进行大量操作。
- 容量可扩展性:具有在单次部署中增加存储系统的存储容量的能力。
- 集群可扩展性:可以根据需要通过添加更多组件来增加存储组件。
存储性能
云原生存储应该支持可预测的、可扩展的性能,服务水平通常从以下角度进行衡量。
- 完成读/写操作的时间。
- 每秒最大存储操作数。
- 数据的吞吐量,以 MB/s 或 GB/s 为单位存储或检索。
一致性
云原生存储应该支持如下的一致性:
- 在写、更新或删除操作之后,读操作应该返回正确和更新的数据。
- 系统“强一致性”:修改数据返回完成后,从客户端读取立马能够读取最新的数据,相比弱一致性。
- 系统“最终一致性”:修改数据返回完成后,从客户端读取可能不是读取最新的数据,要过一会可能才能读取到最新的数据。
在一致性系统中,读取延迟可以被视为恢复点目标 (RPO),因为这代表了组件故障时数据丢失最多的情况。
耐用性
云原生存储应该是持久的,需要保护数据免受任何丢失。不仅仅是可访问性,存储系统要确保数据可以长期存储。一些因素会影响存储系统的耐用性:
- 数据保护层,例如可用的多个数据副本。
- 冗余级别——本地冗余、远程站点冗余、公有云可用区冗余以及区域冗余。
- 存储介质的耐用特性——例如 SSD、旋转磁盘、磁带。
- 系统能够检测由于组件故障、流量溢出等导致的损坏,并自动重建或恢复损坏的数据。
动态部署
动态部署是云原生存储系统的最终理想标准,可以根据需要快速部署或配置,也可以通过多种方式进行部署和实例化,其中包括:
- 硬件部署:部署在数据中心的物理存储设备。使用此部署模型来构建标准化组件,这些组件无需特殊配置即可添加到集群中、需要时进行交换和删除。
- 软件部署:存储组件被定义为软件组件部署在硬件、设备或云实例上。无论是本地环境还是云环境,云原生软件解决方案通常都可以安装。一些软件定义的存储系统被构建为容器,并且可以使用容器编排自动部署。
- 云服务:这些云服务可以由公有云提供商管理并作为服务交付,抽象了底层存储实现。用户可以通过使用 Web 界面或 API,配置新实例或额外存储。
云原生存储解决方案
云原生存储的最佳解决方案定义如下:
公有云存储
公有云可以提供一系列云原生存储选项,包括对象存储(例如 Amazon S3 或 青云QingCloud 对象存储)、基于云的文件共享以及附加到计算实例的托管磁盘。
私有云存储
每当公司构建私有云时,他们通常会倾向于选择具有简单可扩展性、高可靠性和便利性特性的商业云存储服务商。大多数服务商提供部署支持和运营与维护 (O&M) 服务。随着云原生存储需求的增长,私有云基础设施供应商提供了最成熟的云原生接口,允许本地资源消耗云存储。
自行维护的存储服务
公司可以在内部构建的存储服务类型主要有 2 种:块存储和简单文件存储。
Ceph RBD 和存储区域网络 (SAN) 被认为是相对成熟的块存储解决方案,但是由于它们的复杂性,通常需要专门的支持和维护团队。
决定要创建自己的分布式存储系统的公司可以选择 GlusterFS、NFS 和 CephFS 等服务做文件存储。NFS 相对成熟,但不足以解决高性能应用需求。GlusterFS 和 CephFS 通常无法满足关键任务应用程序所需的性能和可靠性。
本地云原生存储的一个新趋势是 S3 兼容存储——支持 S3 API 的本地存储设备。
本地存储
云原生应用程序中也有很多用例使用分布式存储服务意义不大,比如云原生系统中的边缘设备或组件,使用本地存储的 2 种常见情况:
- 数据库:云原生应用程序仍然使用传统数据库,包括 SQL 和 NoSQL。在许多情况下,云原生存储提供数据库所需的吞吐量和高性能。因此,数据库这时可能已经被设置为冗余,从而无需高可用性。
- 缓存:在大多数情况下,组件使用本地存储作为临时信息的缓存,不需要持久化以保护数据。临时存储是容器使用的最常见示例,当容器关闭时它会被擦除。