AWS 存储、VPC 与数据库服务知识解析
1. AWS 存储
1.1 存储服务选择
读写访问需求
:Storage Gateway 和 EFS 可提供所需的读写访问。S3 虽可用于共享文件,但不提供低延迟访问,且其最终一致性在文件系统中效果不佳。EBS 卷一次只能用于单个实例。
S3 存储限制
:理论上,单个存储桶或账户中的所有存储桶可上传的数据量及上传次数无限制,但默认每个账户仅允许 100 个 S3 存储桶。
1.2 S3 相关操作
HTTP 请求
:HTTP(Web)请求必须指定 s3.amazonaws.com 域名以及存储桶和文件名。
对象分组前缀
:前缀是要分组的对象的公共名称,斜杠字符(/)可作为分隔符,竖线字符(|)会被视为名称的一部分而非分隔符。
1.3 加密与日志
客户端加密
:客户端加密在对象到达存储桶之前进行,只有 AWS KMS 管理的密钥提供审计跟踪,AWS 端到端管理密钥并非 AWS 服务。
S3 服务器访问日志
:S3 服务器访问日志不报告源存储桶的当前大小,也不跟踪 API 调用,API 调用由 AWS CloudTrail 负责。
1.4 存储特性
存储类型
可用性
耐久性
一致性
版本控制
生命周期规则
Standard - IA
99.9%
有保证
不保证即时一致性
需手动启用
可按前缀指定对象
Intelligent - Tiering
生命周期内变化
有保证
不保证即时一致性
需手动启用
可按前缀指定对象
1.5 存储成本与安全性
成本
:S3 Glacier 是 AWS 生态系统中最便宜且最具弹性的存储方式,Reduced Redundancy 缺乏弹性且不再推荐,S3 One Zone 和 S3 Standard 相对较贵。
安全性
:ACLs 是旧版功能,不如 IAM 或 S3 存储桶策略灵活,安全组不用于 S3 存储桶,KMS 是加密密钥管理工具,不用于身份验证。
2. Amazon 虚拟专用云(VPC)
2.1 VPC CIDR 与子网
VPC CIDR 前缀长度
:VPC CIDR 的允许前缀长度范围是 /16 到 /28(含),/56 不是有效长度。
二级 CIDR
:二级 CIDR 可来自与主 CIDR 相同的 RFC 1918 地址范围,但不能与主 CIDR 重叠。
子网选择
:10.0.0.0/24 和 10.0.0.0/23 位于 VPC CIDR 内且可为第二个子网留出空间,前缀长度小于 /16 不被允许,/16 则无法为另一个子网留出空间。
2.2 网络接口与安全组
弹性网络接口(ENI)
:每个 ENI 必须有一个主私有 IP 地址,可有辅助 IP 地址,但所有地址必须来自 ENI 所在的子网,创建后不能移动到不同子网,可独立于实例创建并稍后附加到实例。
安全组
:每个 VPC 包含一个无法删除的默认安全组,可单独创建安全组,但使用时必须附加到 ENI,也可将多个安全组附加到同一个 ENI。
2.3 网络访问控制列表(NACL)与互联网网关
NACL
:NACL 是无状态的,不跟踪连接状态,每个入站规则必须有相应的出站规则以允许流量,反之亦然。NACL 附加到子网,可与多个子网关联,但一个子网只能有一个 NACL。
互联网网关
:互联网网关没有管理 IP 地址,一次只能与一个 VPC 关联,不能为多个 VPC 中的实例提供互联网访问,是逻辑 VPC 资源,而非虚拟或物理路由器。
2.4 路由与公共 IP
默认路由
:目标 0.0.0.0/0 匹配所有 IP 前缀,涵盖互联网上所有可公开访问的主机,::0/0 是 IPv6 前缀,互联网网关是默认路由的目标,而非目的地。
公共 IP 地址
:实例必须有公共 IP 地址才能直接从互联网访问,可通过 NAT 设备访问互联网,自动分配的私有 IP 地址不一定相同,访问子网内其他实例不需要公共 IP 地址。
2.5 NAT 网关与 VPC 对等连接
NAT 网关
:NAT 网关的默认路由必须指向互联网网关,实例的默认路由必须指向 NAT 网关,使用 NAT 网关不需要子网之间有不同的 NACL 配置,安全组应用于 ENI 级别,NAT 网关不需要单独的公共和私有接口。
VPC 对等连接
:每个对等 VPC 需要一条指向其对等方 CIDR 的路由,因此必须创建两条以对等连接为目标的路由,实例的安全组必须允许双向通信,一对 VPC 之间不能创建多个对等连接。
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(实例):::process -->|默认路由| B(NAT 网关):::process
B -->|默认路由| C(互联网网关):::process
C --> D(互联网):::process
3. 数据库服务
3.1 数据库基础概念
关系数据库术语
:不同的关系数据库使用不同的术语,行、记录和元组都描述了一组有序的列,而属性是列的另一个术语,表包含行和列。
表的组成
:表必须至少包含一个属性或列,主键和外键用于关联不同表中的数据,但不是必需的,表可以没有行而存在。
数据检索
:SELECT 语句用于从表中检索数据,INSERT 用于向表中添加数据,QUERY 和 SCAN 是 DynamoDB(非关系数据库)使用的命令。
3.2 数据库类型与引擎
数据库类型
:在线事务处理(OLTP)数据库旨在每秒处理多个事务,在线分析处理(OLAP)数据库用于对大型数据集进行复杂查询,键/值存储(如 DynamoDB)可以处理多个事务每秒,但不是关系数据库,不存在离线事务处理数据库。
数据库引擎
:虽然有六种数据库引擎可供选择,但单个数据库实例只能运行一个数据库引擎,如果要运行多个数据库引擎,则需要为每个引擎单独创建一个数据库实例。
兼容引擎
:MariaDB 和 Aurora 设计为 MySQL 的二进制替换,PostgreSQL 设计为与 Oracle 数据库兼容,Microsoft SQL Server 不支持 MySQL 数据库。
3.3 存储引擎与性能
推荐存储引擎
:InnoDB 是 Amazon 为 RDS 中的 MySQL 和 MariaDB 部署推荐的唯一存储引擎,也是 Aurora 支持的唯一引擎,MyISAM 是另一个适用于 MySQL 的存储引擎,但与自动备份不兼容,XtraDB 是 MariaDB 的另一个存储引擎,但 Amazon 不再推荐,PostgreSQL 数据库引擎使用同名的存储引擎,与其他数据库引擎不兼容。
实例类型与性能
:
内存优化实例
:EBS 优化,为 EBS 存储提供专用带宽。
标准实例
:非 EBS 优化,磁盘吞吐量最高为 10,000 Mbps。
突发性能实例
:设计用于开发和测试工作负载,提供所有实例类中最低的磁盘吞吐量。
不存在存储优化实例类。
3.4 存储与 IOPS 配置
存储类型
IOPS 分配规则
示例计算
General - purpose SSD
每 GB 分配 3 个 IOPS,最高 10,000 IOPS
要获得 600 IOPS,需分配 200 GB
io1
IOPS 与存储的比例不超过 50:1
要获得 12,000 IOPS,需分配 240 GB
3.5 数据库复制与恢复
读副本
:读副本仅用于服务查询,不能写入数据库。
多 AZ 部署
:使用 Oracle、PostgreSQL、MariaDB、MySQL 或 Microsoft SQL Server 的多 AZ 部署从主实例同步复制数据到备用实例,只有使用 Aurora 的多 AZ 部署使用集群卷并将数据复制到特定类型的读副本(Aurora 副本)。
快照恢复
:从快照恢复时,会创建一个新实例,不会对失败的实例进行任何更改,快照是整个实例的副本,而不仅仅是单个数据库的副本,恢复后不会删除快照。
3.6 数据分布与节点类型
数据分布风格
:
ALL 分布风格
:确保每个计算节点都有每个表的完整副本。
EVEN 分布风格
:将表均匀地分布在所有计算节点上。
KEY 分布风格
:根据指定列中的值分布数据,不存在 ODD 分布风格。
节点类型
:
密集计算类型
:可在磁存储上存储多达 326 TB 的数据。
密集存储类型
:可在固态硬盘上存储多达 2 PB 的数据。
领导者节点
:协调计算节点之间的通信,但不存储任何数据库,不存在密集内存节点类型。
3.7 非关系数据库要点
主键要求
:在非关系数据库中,主键是唯一标识项目所必需的,因此在表中必须唯一,表内所有主键值必须具有相同的数据类型,只有关系数据库使用主键来关联不同表中的数据。
键的选择
:订单日期在表中不唯一,因此不适合作为分区(哈希)键或简单主键,适合作为排序键,因为 DynamoDB 会根据订单日期对项目进行排序,从而可以查询特定日期或日期范围内的项目。
读取容量单位
:对最多 4 KB 的项目进行一次强一致性读取消耗一个读取容量单位,因此每秒使用强一致性读取 11 KB 的数据将消耗三个读取容量单位,如果使用最终一致性读取,则只需要两个读取容量单位,无论如何,必须指定至少 1 的读取容量。
索引创建
:创建表时,可以选择创建具有不同分区和哈希键的全局二级索引,本地二级索引可以在表创建后创建,但分区键必须与基表相同,尽管哈希键可以不同,不存在全局主键索引或最终一致性索引。
查询优化
:NoSQL 数据库针对主键查询进行了优化,如果只需要根据一个属性查询数据,则将该属性作为主键,NoSQL 数据库不适合复杂查询,NoSQL 和关系数据库都可以存储 JSON 文档,并且两种数据库类型都可以被不同的应用程序使用。
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(表创建):::process -->|选择| B(全局二级索引):::process
A -->|之后创建| C(本地二级索引):::process
B -->|不同分区和哈希键| D(索引使用):::process
C -->|相同分区键| D
综上所述,AWS 提供了丰富的存储、VPC 和数据库服务,每种服务都有其特点和适用场景。在实际应用中,需要根据具体的需求和业务场景来选择合适的服务和配置,以实现最佳的性能和成本效益。例如,在存储方面,如果对成本敏感且对数据访问频率较低,可以选择 S3 Glacier;在数据库方面,如果需要处理大量的事务,可以选择 OLTP 数据库。同时,合理配置网络和安全策略,如使用 VPC 和安全组,可以确保数据的安全性和可靠性。