Amazon web services AWS体系结构-Web应用程序(图表)

Amazon web services AWS体系结构-Web应用程序(图表),amazon-web-services,web,architecture,Amazon Web Services,Web,Architecture,我正在为一个web项目建立一个中型AWS基础设施。我可能想得太多了,因此想征求社区的意见。欢迎您的任何意见 请参见图示: 说明(从左到右): 我的域名托管在GoDaddy上,只需路由到Cloudfront即可全局缓存静态内容 Cloudfront将指向Route53,它负责根据地理最大值和/或延迟将用户路由到最近的区域 每个区域都有一个指向EC2实例的可用性负载平衡器(灾难回退的不同可用性区域) 从那里,每个EC2实例都写入一个MySQL数据库。静态内容从S3存储桶加载 此MySQL数据库跨可

我正在为一个web项目建立一个中型AWS基础设施。我可能想得太多了,因此想征求社区的意见。欢迎您的任何意见

请参见图示:

说明(从左到右):

  • 我的域名托管在GoDaddy上,只需路由到Cloudfront即可全局缓存静态内容
  • Cloudfront将指向Route53,它负责根据地理最大值和/或延迟将用户路由到最近的区域
  • 每个区域都有一个指向EC2实例的可用性负载平衡器(灾难回退的不同可用性区域)
  • 从那里,每个EC2实例都写入一个MySQL数据库。静态内容从S3存储桶加载
  • 此MySQL数据库跨可用性区域和区域复制/同步自身,并创建读取副本
  • 如果EC2实例有一个读取请求,它会联系另一个Route53路由器,该路由器会根据请求的来源(地理相似性/延迟)将读取请求转发给负载平衡器(每个区域)。我在这里看到的唯一替代方法是直接将读取请求从欧洲EC2实例指向欧洲负载平衡器。(反之亦然)
  • 然后,每个区域中的负载平衡器将根据运行状况或请求量决定从哪个数据库读取
  • 每个EC2实例还可以通过API网关触发LAMBDA函数
  • 我错过了什么?这是不是太多了?这种结构的起伏是什么


    非常感谢大家

    在第6步之前,事情看起来是合理的。不需要找到最近的MySQL数据库,因为您的实例已经知道它在哪里——它是本地区的数据库

    步骤7有问题,因为ELBs不能用于平衡RDS实例。但是,使用Aurora/MySQL,您可以获得一个集群“阅读器”端点主机名,该主机名带有一个短TTL,用于跨Aurora副本进行负载平衡。如果复制副本死亡,它将自动从DNS中删除

    步骤8严格来说,不必使用API网关——实例可以通过Lambda API直接调用Lambda函数

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


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

    非常感谢!这是巨大的投入。我想第7点和第8点现在已经清楚了。不过,我确实要跟进第6点。如果我删除了路由db读取请求的Route53,我的读取副本不是有多个端点吗?如果是这样,那就需要我更改代码,以便欧盟区域从欧盟读取副本终结点读取,对吗?代码可以从实例元数据服务中发现它正在运行的区域,从而知道要使用哪个终结点。谢谢Michael…将关闭您的电子邮件;-)