阿里云——云存储与数据库服务
云存储与数据库服务
数据是数字时代的新石油,而存储与数据库服务就是保存和提炼这些石油的“油库与炼油厂”。阿里云提供了从对象、块、文件存储到关系型、NoSQL、数据仓库的全方位数据服务。本章将帮你构建一套清晰的数据存储选型框架,并掌握核心服务的使用。
5.1 对象存储(OSS):海量非结构化数据的家
对象存储(OSS, Object Storage Service) 是一种海量、安全、高可靠、低成本的云存储服务,适合存放任意类型的非结构化数据,如图片、视频、文档、备份、日志文件等。
核心概念:
- 存储空间(Bucket):文件的命名空间,相当于顶层文件夹。名字全局唯一。
- 对象(Object):OSS存储的基本单元,即一个个文件。由Key(文件名)、Data(数据本身)和MetaData(元信息)组成。
- 地域(Region):Bucket创建时需选择地域,数据默认存储在该地域。
- 访问域名(Endpoint):访问Bucket的网络地址。
核心特性与适用场景:
- 无限容量与高持久性:设计耐久性高达99.9999999999%(12个9),无需担心数据丢失。适用于备份归档、静态资源存储。
- 高并发与带宽:支持海量客户端同时读写,无需担心带宽瓶颈。适用于用户上传内容(UGC)、图片视频分享网站。
- 低成本分级存储:提供标准、低频访问(IA)、归档、冷归档四种存储类型,价格逐级递减,访问速度也逐级变慢。可根据数据访问频率选择,优化成本。
- 标准:热数据,频繁访问。
- 低频IA:数据较少访问,但需要实时读取。
- 归档/冷归档:冷数据,基本不访问,读取需要先解冻(耗时几分钟到小时级),适合合规性存储、长期备份。
OSS的核心价值在于解耦。将应用中的静态资源(JS/CSS/图片)分离到OSS,并通过CDN加速,能极大减轻Web/App服务器的负载,提升全球访问速度,是现代化应用架构的标配。
5.2 块存储与文件存储:为ECS提供持久化存储
块存储和文件存储为计算服务提供块级和文件级的持久化存储。
-
块存储(Block Storage):
- 是什么:一种裸磁盘空间,需要挂载到ECS实例后,由实例的操作系统进行分区、格式化(如ext4, NTFS)后才能使用。
- 特点:低延迟、高性能、可随机读写。一块云盘只能挂载到同一可用区的一台ECS实例上。
- 类型:
- ESSD:基于NVMe SSD,性能极强(最高100万IOPS),适用于核心业务、高性能数据库。
- SSD云盘:高性能SSD盘,性价比高,适用于一般业务系统。
- 高效云盘:基于SATA HDD,适合中小型数据库、开发测试环境。
- 用途:为ECS实例提供系统盘和数据盘,存放需要直接读写磁盘块的应用,如数据库。
-
文件存储(NAS, Network Attached Storage):
- 是什么:一种可共享的、支持多种协议(NFS/SMB)的文件存储服务。像一个共享网络文件夹。
- 特点:多个ECS实例(甚至跨可用区)可以同时读写同一份文件。容量弹性伸缩,无需预置。
- 用途:内容管理、共享工作目录、日志共享等需要多实例共享访问同一文件集的场景。例如,Web集群共享用户上传目录,容器集群挂载共享配置文件。
特性 | 块存储 (云盘) | 文件存储 (NAS) |
---|---|---|
访问协议 | 块设备 (SATA, SCSI, NVMe) | 文件协议 (NFS, SMB) |
连接性 | 单ECS实例(同可用区) | 多ECS实例/容器(同VPC) |
典型用例 | 数据库、操作系统 | 共享目录、CI/CD共享、企业文件共享 |
5.3 数据库选型指南:关系型 vs NoSQL vs 数据仓库
数据库是应用的核心,选型失误将带来巨大的后期改造成本。以下是三大类数据库的选型框架:
-
关系型数据库 (RDS):
- 数据模型:基于表格,结构固定,遵循Schema。
- 查询语言:SQL。
- 优势:事务ACID特性(原子性、一致性、隔离性、持久性)、强一致性、强大的联表查询。
- 场景:需要强一致性事务的核心业务系统,如订单、交易、用户账户管理系统。
-
NoSQL 数据库:
- 数据模型:非表格,结构灵活。
- 查询语言:非SQL,各有自己的API。
- 优势:高性能、高扩展性、灵活的数据模型。
- 分类与场景:
- 键值存储 (Key-Value):如 Redis。缓存、会话存储、排行榜。
- 文档存储 (Document):如 MongoDB。内容管理系统(CMS)、产品目录、用户配置文件。
- 列式存储 (Wide-Column):如 HBase。物联网(IoT)、时序数据。
- 搜索存储 (Search):如 Elasticsearch。日志分析、全文搜索。
-
数据仓库 (Data Warehouse):
- 代表:MaxCompute, AnalyticDB (ADB)。
- 特点:专为复杂分析查询(OLAP)设计,海量数据(PB级)处理能力。
- 场景:商业智能(BI)报表、数据分析和挖掘。
现代应用往往是多模数据库(Multi-Model) 架构。不要试图用一个数据库解决所有问题。例如,核心交易用RDS,缓存用Redis,全文检索用Elasticsearch,海量分析用MaxCompute。
5.4 云原生数据库:RDS (MySQL) 核心功能
阿里云关系型数据库服务(RDS)是一种稳定可靠、可弹性伸缩的在线数据库服务。它免去了数据库安装、硬件投入、故障恢复等复杂操作。
以最常用的RDS MySQL为例,其核心优势远超一台自建MySQLECS实例:
- 高可用性:默认提供主备架构(一主一备,跨可用区部署),自动故障切换,业务无感知。
- 读写分离:只需一键开启,即可自动创建一个或多个只读实例,通过一个独享的读写分离地址,自动将写请求发往主实例,读请求发往只读实例,轻松应对高并发读场景。
- 自动备份:支持数据备份和日志备份,可设置备份策略,并支持按时间点恢复(恢复到任意秒级)。
- 性能优化:提供参数优化建议、SQL审计和优化、慢查询分析等功能。
- 白屏化管理:监控告警、账号管理、数据库升降配、版本升级等操作均可在线完成,极大简化DBA工作。
5.5 NoSQL之王:Redis版与MongoDB版的应用场景
阿里云提供了完全兼容开源协议的托管式NoSQL服务,让你无需管理数据库服务器。
-
Tair/Redis版:
- 场景:缓存(降低数据库压力,提升响应速度)、会话存储(分布式Session)、排行榜、秒杀。
- 阿里云增强:提供持久内存机型(性价比极高)、集群版(海量数据与高性能)、读写分离版(超高读性能)。
-
MongoDB版:
- 场景:内容管理系统、游戏用户档案、物联网(存储设备状态信息)。
- 阿里云增强:提供三节点副本集(默认高可用)和分片集群(水平扩展)架构。
实战演练:构建一个读写分离的Web应用(ECS + RDS + OSS)
让我们综合本章知识,构建一个比第一章更健壮、性能更高的Web应用。
目标:
- Web服务器(ECS)无状态,便于水平扩展。
- 用户上传的图片、附件等静态资源存入OSS,减轻服务器负载。
- 数据库使用RDS,并配置读写分离,提升读性能。
- 通过SLB对外提供服务,实现高可用。
步骤一:创建RDS MySQL实例并初始化
- 在RDS控制台创建MySQL实例。
- 网络类型:选择之前创建的
prod-vpc
和data-vswitch-zonec
(数据层子网)。 - 系列:选择高可用版(一主一备)。
- 设置数据库管理员账号和密码。
- 创建成功后,在“数据库连接”中申请内外网连接地址(内网地址用于ECS访问,外网地址用于本地临时管理)。
- 通过DMS或MySQL客户端登录,创建一个名为
web_db
的数据库。
步骤二:创建OSS Bucket
- 在OSS控制台创建一个Bucket,例如
web-app-static-<你的账号ID>
。 - 地域:选择与ECS/RDS相同的地域。
- 存储类型:标准。
- 读写权限:私有(推荐,用户通过API签名或临时Token访问,更安全)。
步骤三:部署并配置Web应用
- 创建一台ECS实例,部署在
web-vswitch-zonea
中。 - 在Web应用(如WordPress)的配置文件中(如
wp-config.php
),修改数据库连接设置:- 数据库主机:填写RDS实例的内网地址(至关重要!通过内网访问,延迟低且免费)。
- 使用之前创建的数据库名、用户名和密码。
- 安装并配置OSS的WordPress插件,将媒体库的上传目标设置为你的OSS Bucket。并在插件中配置具有OSS访问权限的RAM角色的AccessKey(参考第2章实战)。
步骤四:配置RDS读写分离
- 在RDS控制台,目标实例的“数据库代理”中,开通数据库代理功能。
- 创建一个读写分离地址。该地址会自动实现读写分离。
- 在Web应用中,配置两个数据库连接:
- 写连接:指向RDS主实例的内网地址(用于写操作)。
- 读连接:指向RDS的读写分离地址(用于读操作)。
- (许多现代框架,如Laravel,已支持在配置中直接定义读/写连接。)
步骤五:通过SLB访问
- 创建一个应用型负载均衡(ALB),监听80端口,并将上述ECS实例添加到后端服务器组。
- 将域名解析到ALB的公网IP上。
- 现在,用户访问网站时,图片等静态资源从OSS高速下载,数据库读请求被自动分发到只读实例,写请求发往主实例,整个系统的性能和可用性得到了极大提升。
通过本章,不仅了解了各种存储和数据库服务,更掌握了如何将它们有机地组合起来,构建一个专业、健壮的应用架构。