AWS API 架构
我最近参与了一个项目,涉及将 API 从单体应用中分离出来,然后进行容器化并部署到 AWS。这是我第一次部署到 AWS,为了巩固我在这个过程中学到的知识,我决定记录一些我使用过的资源以及它们之间的交互方式。
区域和可用区域
区域是指位于特定地理位置的 AWS 资源的分组。每个区域内都包含一组数据中心,称为可用区 (Availability Zone)。
每个区域包含多个可用区,这些可用区在物理上彼此隔离,以确保它们不受其他可用区的故障影响。然后,这些可用区通过超低延迟网络连接。
您创建的任何 AWS 资源都必须放置在 VPC 子网内(我们将介绍这一点),而该子网必须位于可用区内。在多个可用区中启动资源通常是一个好主意,以确保最大程度的正常运行时间。
虚拟私有云 (VPC)
VPC 是一个私有虚拟网络,您可以在其中配置 AWS 资源,本质上是您在 AWS 内部的私有区域。您可以完全控制此环境,包括选择 IP 地址、路由表和网络网关。
通过子网,我们可以设置私有和公有环境,并控制访问这些环境的人员和方式。VPC 将覆盖一个区域内的所有可用区。
子网
子网是网络的子部分,可以是公有的,也可以是私有的。主要区别在于,公有子网有到互联网的路由,而私有子网没有,并且只能与同一 VPC 内的其他子网通信。
每个可用区域有一个或多个子网,但每个子网必须完全位于一个区域内,并且不能跨区域。
对目前为止讨论的所有内容进行快速类比
想象一下办公楼是一个区域——包含许多东西的外层。
每层楼都是一个可用区。一个区域可以(而且很可能)拥有多个可用区,就像一栋建筑和多个楼层一样!
每个部门都是一个VPC,可以跨楼层。
最后,子网是办公套件 - 它只能位于一个楼层内。
安全组
安全组充当虚拟防火墙——允许或拒绝流量。它们在实例级别而非子网级别运行,因此您需要将安全组应用于启动的每个实例。
您可以为每个安全组应用规则,以允许流量进出其实例。这些规则可以随时修改,并会立即应用于与该安全组关联的所有实例。每个实例可以添加多个安全组。
默认情况下,所有入站流量都被拒绝,所有出站流量都被允许。
继续我们的办公楼类比,安全组将是进入建筑物不同区域的钥匙卡。
应用程序负载均衡器
应用程序负载均衡器本质上是一个位于应用程序前端的服务器,它将流量转发到下游实例——在我们的例子中是 Fargate 实例。它用于将负载分散到多个实例,同时提供单一访问点。
它还会对我们的实例执行健康检查,如果一个实例发生故障,负载均衡器会将流量引导至其余健康的实例。我们提供了一个路由,例如“/health”,如果返回 200,则表明该实例是健康的。
负载均衡器的其他功能包括:
- 提供对 SSL/HTTPS 的支持。
- 跨可用区域工作,因此如果一个区域出现故障,负载均衡器将把所有流量转移到其他区域。
- 将公共交通与私人交通分开。
Route 53 && 互联网网关
Route 53 是一种托管 DNS,即一系列将 IP 地址映射到 URL 的规则和记录。它既可用于公有域名,也可用于私有域名(私有域名只能由 VPC 内的实例解析)。Route 53 还可以通过 DNS 和有限的健康检查提供负载均衡。
互联网网关为 VPC 提供通往互联网的路由。如果您将家庭网络视为子网,则调制解调器就是互联网网关,用于访问您的 ISP 和更广泛的互联网。
任何 VPC 只能应用一个互联网网关,并且只要 VPC 上仍有活动实例在运行,网关就无法与 VPC 分离。
AWS Fargate
最后一个关键点是 Fargate——“一个适用于容器的无服务器计算引擎,可与 Elastic Container Service (ECS) 和 Elastic Kubernetes Service 协同工作”。我们在这里配置 API 容器。
Fargate 是 Elastic Container Service 的一种演进版本。它由 AWS 管理,无需预置和管理服务器,并且可以无缝扩展和缩减,这意味着您只需按实际使用量付费。您可以将其视为按需容器,所有资源都在容器级别进行管理。
结论
希望本文能帮助您大致了解在 AWS 上搭建容器化应用程序所需的一些资源。当然,想要完全掌握这些概念,最好的方法还是深入实践。
以下是我发现特别有用的一些资源:
文章来源:https://dev.to/stubrew24/aws-api-architecture-57j2