在云端有很多存储类云产品,最为常见的就是云盘、OSS、RDS,还有NAS、共享块存储等相应存储类产品。相应存储类的云产品本质上还是为了解决数据持久化的问题。
存储的数据结构类型也决定了我们选择什么样类型的存储类产品。数据的结构类型一般有以下3种。
- 结构化数据:类似包含预定义的数据类型、格式和结构的数据,常见的如关系型数据库中的数据表里的数据。
- 半结构化数据:具有可识别的模式并且可以解析的文本数据文件,比如XML数据文件、JSON数据文件。
- 非结构化数据:没有固定结构的数据。通常为不同类型的文件,比如文本文档、图片、视频、日志文件、代码文件等。
云端存储的产品类型主要分为以下两大类:
- 数据库类云产品(主要为云RDS、云MongoDB、云Redis、云Memcache)主要用于解决结构化数据及半结构化数据的持久化存储的问题。
- 块存储(云盘)、共享块存储(共享云盘)、共享文件存储、OSS对象存储主要用于解决非结构化数据的持久化存储的问题。
这里主要看下针对非结构化数据的持久化存储。
块存储
块存储是阿里云为云服务器ECS提供的块设备(云盘),高性能、低时延,满足随机读写,像使用物理硬盘一样格式化并建立文件系统来使用块存储。
云盘主要解决非结构化数据持久化存储的问题,在云端云盘主要分为系统盘和数据盘两种类型,这决定了云盘存储数据的应用场景:·
- 系统盘主要存储操作系统所要运行的文件及日志。
- 数据盘可以存储Java/PHP/Python等代码文件,也可以存储图片、音视频、日志等文件。
共享块存储
ECS共享块存储是一种支持多台ECS实例并发读写访问的数据块级存储设备,即常规云盘只支持同时挂载在一台ECS上,但共享块存储支持同时挂载在多台ECS上。共享块存储产品专为企业级客户的核心业务高可用架构而设计,主要是为了解决Shared-Everything架构下对块存储设备的共享访问场景。
正确使用共享块存储的方式是采用集群文件系统进行块设备的统一管理,如GFS、GPFS等。如果只是将共享块存储挂载到多台ECS实例,依旧使用常规文件系统来管理时,会造成磁盘空间分配冲突和数据文件不一致两个问题。
共享文件存储
共享文件存储包括云端Linux系统下的NFS(Network File System)服务,Windows系统下的SMB(Server Message Block)服务,以及阿里云文件存储NAS(Network AttachedStorage)产品。
在云端使用共享文件存储(NFS/SMB/NAS)的典型应用场景如下:
- 负载均衡中的典型场景:使用负载均衡+多台ECS(如Web服务器)部署的业务。多台ECS需要访问同一个存储空间,以便多台ECS共享数据。
- 代码共享场景:多台ECS应用,部署的代码一致。我们可以将代码放在同一个存储空间,提供给多台ECS同时访问。
- 日志共享场景:多台ECS应用,需要将日志写到同一个存储空间,以方便做集中的日志数据处理与分析。
- 企业办公文件共享场景:企业有公共的文件需要共享给多组业务使用,需要集中的共享存储来存放数据。
- 容器服务的场景:部署的容器服务需要共享访问某个文件数据源,特别是在资源编排的容器服务。对应的容器可能会在不同服务器中进行服务漂移,所以文件共享访问尤为重要。
- 备份的场景:将线下机房的数据备份到云上,可以通过跨地域远程挂载文件系统来存储数据备份。只不过这里需要借助VPN网关或者NAT网关的技术,将IDC和云端网络打通或者进行映射。
对象存储
- 图片和音视频等应用的海量存储:OSS支持流式写入和文件写入两种方式。
- 网页或者移动应用的静态和动态资源分离:利用BGP带宽,OSS可以实现超低延时的数据直接下载。
- 云端数据处理:上传文件到OSS后,可以配合媒体和图片处理进行云端的数据处理。
- 云端数据备份:可以将ECS、RDS的备份或者线下IDC的数据很方便地同城或异地备份至OSS中。