跳到正文课后总结 · Jimmy Huang's Blog
2.3 创建两个 EC2 Web Server
这两个 Web Server 可以理解成两台“运行网站的服务器”。
它们会负责响应网页请求,例如返回 HTML 页面,或者通过程序查询 RDS 数据库后再返回结果。
一台服务器坏了,网站就挂了;
一台服务器压力太大,用户访问会变慢;
多台服务器可以分担访问流量;
多台服务器更接近高可用架构。
2.4 创建 Application Load Balancer
然后,你创建 Application Load Balancer,简称 ALB。
用户不会直接记住某一台 EC2 的 IP 地址,而是访问 ALB 的 DNS 地址。
ALB 收到用户请求后,再把请求分发给后面的 EC2 Web Server。
2.5 配置 Target Group
ALB 本身不知道后面有哪些服务器,所以需要 Target Group。
Target Group 就是 ALB 后面的“服务器名单”。
哪些 EC2 是后端 Web Server;
应该用什么协议和端口转发请求;
如何检查这些 EC2 是否健康。
ALB 是前台,Target Group 是前台手里的“后厨员工名单”。
2.6 创建 Launch Template
Launch Template 是创建 EC2 的模板。
它记录了如果以后要新开一台 Web Server,应该怎么开:
使用哪个 AMI;
使用什么实例类型;
使用哪个 Security Group;
启动时运行什么脚本;
其他 EC2 启动配置。
Launch Template 是“开新服务器的说明书”。
2.7 创建 Auto Scaling Group
最后你创建 Auto Scaling Group,简称 ASG。
ASG 会根据 Launch Template 自动创建或减少 EC2 实例。
数量问题:当前应该有几台 Web Server?
健康问题:如果某台 Web Server 坏了,要不要自动换一台新的?
所以 ASG 的作用不是分发流量,而是管理 EC2 数量。
3. 每个核心组件有什么用
3.1 RDS MySQL:托管数据库
它是什么
AWS 帮你开好、运行好、维护好的 MySQL 数据库。
它在 Lab 里负责什么
用户信息;
商品信息;
订单记录;
帖子内容;
登录数据;
应用状态数据。
没有它会怎样
如果没有 RDS,你可能要把数据库装在某台 EC2 上。
数据库安装要自己做;
数据库补丁要自己维护;
备份要自己处理;
故障恢复要自己设计;
扩容也更麻烦。
Lab 使用 RDS,是为了让你理解真实云项目中常见的做法:
和其他组件的关系
3.2 EC2 Web Server:真正处理网页请求的服务器
它是什么
Web Server 是安装了网页服务程序的 EC2,例如 Apache、Nginx 或后端应用程序。
它在 Lab 里负责什么
接收 ALB 转发过来的 HTTP 请求;
运行网页或后端程序;
必要时连接 RDS 查询数据;
把结果返回给用户。
没有它会怎样
和其他组件的关系
EC2 Web Server 位于 ALB 和 RDS 中间:
它是应用层,既负责处理用户请求,也负责访问数据库。
3.3 Application Load Balancer:网站统一入口和分流器
它是什么
Application Load Balancer,简称 ALB,是 AWS 的应用层负载均衡器。
它在 Lab 里负责什么
作为网站统一入口;
接收用户请求;
把请求转发给后端 EC2;
检查后端 EC2 是否健康;
避免用户直接依赖某一台 EC2。
没有它会怎样
用户可能要直接访问某台 EC2 的 IP;
某台 EC2 挂了,用户可能无法访问;
多台 EC2 无法自动分担流量;
扩容后用户不知道应该访问哪台新 EC2。
和其他组件的关系
3.4 Target Group:ALB 后面的服务器名单
它是什么
Target Group 是 ALB 用来管理后端目标的一组配置。
EC2 实例;
IP 地址;
Lambda 函数;
其他支持的目标类型。
在这个 Lab 中,Target Group 主要管理 EC2 Web Server。
它在 Lab 里负责什么
后端有哪些 EC2;
请求应该转到哪个端口;
使用 HTTP 还是 HTTPS;
如何做健康检查。
没有它会怎样
没有 Target Group,ALB 不知道请求应该转发给谁。
和其他组件的关系
ALB Listener 收到请求后,会把请求交给 Target Group。
Target Group 再把请求分发给健康的 EC2。
3.5 Launch Template:开 EC2 的模板
它是什么
Launch Template 是创建 EC2 实例时使用的配置模板。
它在 Lab 里负责什么
Launch Template 规定了新 EC2 应该怎么创建,例如:
使用哪个 AMI;
使用哪种实例类型;
使用什么安全组;
启动时执行什么脚本;
是否安装 Web 服务;
是否自动配置应用环境。
没有它会怎样
ASG 不知道该怎么创建新 EC2;
你只能手动创建服务器;
每台服务器可能配置不一致;
后续自动扩容很难实现。
和其他组件的关系
Launch Template 和 ASG 经常配合使用:
3.6 Auto Scaling Group:自动增减 EC2 的管理器
它是什么
Auto Scaling Group,简称 ASG,是 AWS 用来自动管理 EC2 数量的服务。
它在 Lab 里负责什么
保持指定数量的 EC2;
根据需要增加 EC2;
根据需要减少 EC2;
替换不健康的 EC2;
配合 ALB 维持 Web 服务可用性。
没有它会怎样
流量变大时,你要手动加服务器;
流量变小时,你要手动删服务器;
某台服务器坏了,你要自己发现并重建;
架构不够自动化,也不够弹性。
和其他组件的关系
ASG 使用 Launch Template 创建 EC2。
这些 EC2 可以加入 ALB 的 Target Group,由 ALB 分发流量。
3.7 Security Group:资源级安全门卫
它是什么
Security Group 是 AWS 里的虚拟防火墙。
它控制某个资源允许哪些流量进入、允许哪些流量出去。
它在 Lab 里负责什么
用户能不能访问 ALB;
ALB 能不能访问 EC2;
EC2 能不能访问 RDS;
哪些端口可以通信;
哪些来源可以访问服务。
没有它会怎样
用户可能打不开网站;
ALB 可能访问不了 EC2;
EC2 可能连不上 RDS;
数据库可能暴露给不该访问的人。
很多 Lab 报错不是服务本身坏了,而是 Security Group 没放行正确来源和端口。
和其他组件的关系
Security Group 不是应用,也不是数据库。
4. 用初学者类比解释
4.1 用户 / 浏览器 = 顾客
4.2 ALB = 前台接待
接待顾客;
判断哪个厨师比较空;
把订单分给合适的厨师;
如果某个厨师今天不能工作,就不把订单分给他。
4.3 EC2 Web Server = 厨师
4.4 Target Group = 厨师排班表
Target Group 像前台手里的厨师排班表。
今天有哪些厨师上班;
谁现在可以接单;
谁状态不好,暂时不要接单。
4.5 RDS = 后厨仓库 / 账本
4.6 Security Group = 门卫和门禁规则
顾客可以进前台;
前台可以找厨师;
厨师可以查仓库;
顾客不能直接进仓库;
外人不能随便从后门进入厨房。
4.7 Launch Template = 招聘和培训说明书
Launch Template 像餐厅招新厨师时的培训说明书。
要穿什么制服;
用什么工具;
学什么流程;
怎么接单;
怎么和仓库配合。
4.8 ASG = 店长
人多时,多安排厨师;
人少时,减少厨师;
某个厨师病了,安排新人替换。
5. 重点区分容易混淆的概念
6. 这个 Lab 有什么实际用途
真实网站通常不会只靠一台服务器直接面对所有用户,而是会使用:
负载均衡器做统一入口;
多台应用服务器分担请求;
托管数据库保存数据;
自动扩缩容应对访问高峰;
安全组控制服务之间的访问边界。
6.1 对后端开发的意义
用户从哪里访问;
请求怎么分发;
多台服务器如何配合;
数据库如何连接;
某台服务器挂了怎么办;
流量突然变大怎么办。
6.2 对 DevOps 的意义
6.3 对安全设计的意义
7. 文字版架构图
图片版不放入本文档,这里保留一个文字版结构,方便复习。
8. 你要记住的核心区别
用户访问 ALB,ALB 转给 EC2,EC2 再访问 RDS;ALB 管流量,ASG 管数量,RDS 管数据,Security Group 管权限。
用户浏览器
↓
Application Load Balancer
↓
多台 EC2 Web Server
↓
RDS MySQL 数据库
浏览器用户 → Application Load Balancer → 多台 EC2 Web Server → RDS MySQL 数据库
用户不直接找 EC2
用户先找 ALB
ALB 再决定把请求转给哪台 EC2
用户 → ALB → EC2 Web Server → RDS
ALB → EC2 Web Server → RDS
Launch Template = 说明书
ASG = 按说明书创建 EC2 的管理器
EC2 = 实际被创建出来的服务器
ASG 负责生产服务器
ALB 负责给服务器分配请求
用户 → ALB:允许 HTTP/HTTPS
ALB → EC2:允许 Web 端口
EC2 → RDS:允许 MySQL 端口
用户 → RDS:不允许
用户只访问 ALB
用户不直接访问 EC2 或 RDS
ALB 接收用户请求
ALB 把请求分发给健康的 EC2
EC2 Web Server 真正运行应用
EC2 Web Server 负责返回网页
Target Group 告诉 ALB 哪些 EC2 可以接请求
用户不能直接访问 RDS
EC2 Web Server 可以访问 RDS
Launch Template 规定新 EC2 如何创建和配置
公网用户只能访问 ALB
ALB 可以访问 EC2
EC2 可以访问 RDS
公网用户不能直接访问 RDS
公网用户也不应该直接访问后端 EC2
用户浏览器
|
v
Internet / 公网
|
v
+-----------------------------------------+
| Application Load Balancer, ALB |
| 统一入口:接收 HTTP/HTTPS 请求 |
+-----------------------------------------+
|
v
+-----------------------------------------+
| Target Group |
| 后端服务器名单 + 健康检查 |
+-----------------------------------------+
| | |
v v v
+----------------+ +----------------+ +----------------+
| EC2 Web Server | | EC2 Web Server | | EC2 Web Server |
| 应用服务器 1 | | 应用服务器 2 | | 应用服务器 N |
+----------------+ +----------------+ +----------------+
\ | /
\ | /
\ v /
+------------------------------+
| RDS MySQL |
| 托管数据库,只给应用访问 |
+------------------------------+
Auto Scaling Group:
- 使用 Launch Template 创建 EC2
- 自动增加 EC2
- 自动减少 EC2
- 自动替换不健康 EC2
被阻止的路径:
用户 X 直接访问 RDS
用户 X 直接访问后端 EC2
ALB X 直接访问 RDS
ALB 管入口和流量分发
EC2 管真正的应用处理
RDS 管数据存储
Target Group 管后端服务器名单
Launch Template 管新服务器怎么创建
ASG 管服务器数量和自动替换
Security Group 管谁能访问谁