EC2:按需取用的计算力
Amazon Elastic Compute Cloud(EC2)服务器变成了像自来水一样随开随用的资源:
- 分钟级部署:点几下鼠标,几分钟后就能用上
- 精确计费:只对运行中的实例付费,停止就停止计费
- 灵活变配:从小型博客站点到大型数据处理,随时调整配置
AWS已经帮我们搞定了最头疼的部分——数据中心建设、硬件采购、网络布线、电力供应这些脏活累活。我们只需要关心自己的业务代码。
虚拟化
EC2的核心是虚拟化技术。可以想象一台强大的物理服务器被切成多个"虚拟服务器",每个都像独立机器一样运行
关键点在于:
- 多租户但安全隔离:虽然共享底层硬件,但各EC2实例互不可见
- 资源动态分配:CPU、内存、存储都能按需调整
- 全控制权限:从操作系统到应用软件,完全自主配置
网络与安全控制
EC2的网络配置同样灵活:
- 可以设置成完全公开的Web服务器
- 也能做成仅内网访问的数据库服务器
- 精细控制进出流量规则
这些特性使得EC2既能托管面向公众的网站,也能构建高度安全的内部系统架构。
安全最佳实践
- 最小权限原则:严格限制安全组规则
- IAM角色应用:避免在实例中存储长期凭证
- 系统加固:
- 定期更新SSM Agent
- 启用EBS加密
- 使用AWS Systems Manager进行补丁管理
- 网络隔离:私有子网部署数据库等敏感服务
EC2实例类型全景图
AWS提供了五大类实例类型,每种都针对特定场景进行了优化:
1. 通用型实例(如M5、T3系列)
特点:计算、内存和网络的平衡组合
适用场景:
- 中小型数据库
- 企业应用后台服务
- 开发测试环境
- 轻量级Web应用
为什么选择:当你无法准确预测资源需求时,这是最安全的起点
2. 计算优化型实例(如C5、C6g系列)
特点:高CPU性能,低内存比
适用场景:
- 科学计算模拟
- 游戏服务器
- 高频交易系统
- 视频转码
典型案例:某量化交易系统使用c5.9xlarge实例处理实时市场数据,延迟降低40%
3. 内存优化型实例(如R5、X1e系列)
特点:超大内存容量,TB级内存支持
适用场景:
- SAP HANA等内存数据库
- 实时大数据处理
- 缓存服务
性能指标:x1e.8xlarge实例提供1TB内存,适合基因组分析等内存密集型任务
4. 加速计算型实例(如P3、G4系列)
特点:配备GPU/FPGA等专用加速器
适用场景:
- 深度学习训练
- 3D渲染
- 地震分析
硬件配置:p3dn.24xlarge实例配备8块NVIDIA V100 GPU,提供1.8TB/s的显存带宽
5. 存储优化型实例(如I3、D2系列)
特点:超高本地存储IOPS
适用场景:
- NoSQL数据库(如Cassandra)
- 数据仓库
- 日志处理
性能表现:i3en.metal实例可提供高达100万随机IOPS
如何选择合适的实例类型?
决策树参考:
- 需要GPU/FPGA? → 选加速计算型
- 数据量远大于内存? → 选存储优化型
- 需要处理海量数据集? → 选内存优化型
- CPU持续高负载? → 选计算优化型
- 以上都不是? → 从通用型开始
成本优化技巧:
- 测试阶段:使用t3系列突发性能实例
- 生产环境:根据监控数据逐步调整
- 长期稳定负载:考虑预留实例节省成本
- 批量作业:使用Spot实例获取折扣
真实场景案例分析
案例1:电商大促
- 前端Web层:m5.large(通用型)
- 订单处理:c5.xlarge(计算优化型)
- 推荐引擎:r5.2xlarge(内存优化型)
- 用户行为分析:i3.xlarge(存储优化型)
案例2:AI平台
- 模型训练:p3.8xlarge(加速计算型)
- 特征存储:r5.4xlarge(内存优化型)
- 数据管道:m5.2xlarge(通用型)
EC2 Auto Scaling 核心机制
1. 自动扩展组(Auto Scaling Group)
- 最小容量:安全底线(如始终保留2台实例)
- 期望容量:日常运行规模(如4台)
- 最大容量:扩展上限(如20台)
# 典型ASG配置示例
asg_config = {
"min_size": 2, # 即使半夜也要有2台值班
"desired_capacity": 4, # 平时保持4台运行
"max_size": 20 # 双十一最多扩展到20台
}
2. 扩展策略类型
策略类型 | 工作原理 | 适用场景 |
---|---|---|
动态扩展 | 根据CPU/请求数等指标实时调整 | 突发流量(如秒杀活动) |
预测扩展 | 基于机器学习预测提前扩容 | 周期性波动(如工作日) |
3. 健康检查机制
- 每5分钟检查实例状态
- 异常实例自动替换(就像生病的咖啡师立即有人顶班)
- 支持跨AZ部署实现高可用
实战配置指南
步骤1:创建启动模板
aws ec2 create-launch-template \
--launch-template-name CoffeeShopTemplate \
--version-description v1 \
--launch-template-data '{
"ImageId": "ami-0c55b159cbfafe1f0",
"InstanceType": "t3.medium",
"KeyName": "coffee-shop-key"
}'
步骤2:配置自动扩展组
aws autoscaling create-auto-scaling-group \
--auto-scaling-group-name CoffeeShopASG \
--launch-template LaunchTemplateName=CoffeeShopTemplate \
--min-size 2 \
--max-size 10 \
--desired-capacity 4 \
--vpc-zone-identifier "subnet-123456,subnet-789012"
步骤3:设置扩展策略
aws autoscaling put-scaling-policy \
--policy-name ScaleOutPolicy \
--auto-scaling-group-name CoffeeShopASG \
--scaling-adjustment 2 \
--adjustment-type ChangeInCapacity \
--cooldown 300
ELB负载均衡核心工作机制
1. 流量分发原理
ELB采用多种算法决定路由:
- 轮询:依次分配给各实例
- 最少连接:选择当前连接数最少的实例
- IP哈希:相同客户端总是分配到相同实例
2. 与Auto Scaling的完美配合
- Auto Scaling组新增实例
- 自动向ELB注册
- ELB开始将流量导向新实例
- 缩容前先排干实例流量
3. 健康检查机制
- 定期发送"心跳"请求(如HTTP/health)
- 标记不健康实例并停止向其发送流量
- 与Auto Scaling协同自动替换故障实例
ELB类型选型指南
类型 | 适用协议 | 典型场景 | 独特优势 |
---|---|---|---|
ALB | HTTP/HTTPS | 微服务、容器化应用 | 基于路径/主机的路由规则 |
NLB | TCP/UDP | 游戏服务器、金融交易 | 超低延迟(毫秒级) |
CLB | HTTP/HTTPS | 传统Web应用(逐步淘汰) | 简单易用 |
GWLB | IP包 | 第三方安全设备集成 | 透明流量镜像 |
写在最后
选择EC2实例类型不是一次性的决定,而是一个持续优化的过程。
- 使用AWS Compute Optimizer获取建议
- 建立完善的监控体系
- 定期进行成本审查
- 保持对新型实例的关注