AWS架构-Web应用程序(图)

时间:2018-08-29 18:23:16

标签: amazon-web-services web architecture

我正在为一个Web项目设置一个中等大小的AWS基础设施。我可能在考虑一些事情,因此想向社区征求意见。任何输入表示赞赏。

请参见图形: here

说明(从左到右):

  1. 我的域托管在GoDaddy上,并将仅路由到Cloudfront以便全局缓存静态内容。
  2. Cloudfront将指向Route53,Route53负责根据Geoprximity和/或Latency将用户路由到最近的区域
  3. 每个区域都将有一个指向EC2实例的可用性负载均衡器(灾难回退的不同可用性区域)
  4. 从那里,每个EC2实例都写入单个MySQL数据库。静态内容是从S3存储桶加载的。
  5. 此MySQL数据库跨可用性区域和区域复制/同步自身,并创建只读副本
  6. 如果EC2实例具有读取请求,它将与另一个Route53路由器联系,该路由器根据请求的来源(地理近似性/等待时间)将读取请求转发到负载均衡器(在每个区域中)。我在这里看到的唯一选择是将读取请求从欧洲EC2实例直接指向欧洲负载平衡器。 (在美国则相反)
  7. 然后,每个区域中的负载均衡器将根据运行状况或请求量来决定从哪个数据库读取数据
  8. 每个EC2实例也可以通过API网关触发LAMBDA功能。

我想念什么?这太多了吗?这种结构的起伏是什么?

非常感谢大家!

1 个答案:

答案 0 :(得分:1)

在第6步中,一切看起来都很合理。无需查找最近的MySQL数据库,因为您的实例已经知道它的位置-它是本地区域中的一个。

步骤7存在问题,因为不能使用ELB来平衡RDS实例。但是,使用Aurora / MySQL,您将获得具有短TTL的单个群集“读取器”端点主机名,该TTL在整个Aurora副本之间实现负载平衡。如果副本死亡,它将自动从DNS中删除。

步骤8并不一定要使用API​​网关-实例可以通过Lambda API直接调用Lambda函数。

此外,还有Lambda @ Edge允许直接从CloudFront触发Lambda函数-尽管如果您需要的Lambda函数尺寸较大(依赖项)或需要在VPC内运行,则您必须将其中的两个级联-边缘功能(不在VPC中)调用区域功能(大型或在VPC中)-但这通常仍比API网关便宜。边缘函数自动全局复制,并在最接近处理单个请求的CloudFront边缘的区域中运行,并且在任何给定的函数调用中,都可以通过检查process.env.AWS_REGION来识别。边缘功能还可以用于更改提供内容的来源-例如如果您的函数看到它已在EU区域中被调用,则它可以重写请求,以便CloudFront将S3请求发送到EU桶。

如果您的网站位于域的最高点,例如example.com而不是www.example.com,您的域将需要托管在Route 53中,而不是Go Daddy中,因为DNS标准中的约束不允许CloudFront在顶点处要求动态行为。您仍然可以向他们注册域名,但不能由他们托管。