我有一个网站,有主域和子域(我有不同的子域为不同的国家)例如:mysite.com(是主域),country-a.mysite.com(国家a), country-b.mysite.com(国家B)注:每个国家都有独立的用户/数据,并与单独的数据库链接。
现在我在一个EC2实例中管理它们。我有每个国家的子文件夹,并使用Route53将它们指向子域。他们工作得很好。
但现在我希望他们可扩展,因为我期待更多的流量。这种情况下的最佳实践是什么?
是否有可能获得另一个EC2实例并克隆所有子文件夹并引入负载均衡器来处理这两个实例之间的流量?我的意思是,当来自国家a和B的用户将访问负载均衡器时,负载均衡器将正确处理它并将用户重定向到这两个实例中的正确子文件夹并管理流量?
如果是,如何配置Route53
负载均衡器如何处理用户会话?我的意思是,假设一个用户第一次访问负载均衡器,将用户定向到第一个实例,当来自同一用户的其他请求访问第二个实例时。如果一个会话在第一个实例上创建,这个会话数据将在第二个实例上可用?
我也想知道如何在这些情况下管理源代码。我的意思是,如果我想更新代码我需要分别更新这两个实例吗?或者有一个简单的方法,我把文件上传到一个实例,它会克隆到其他实例吗?
顺便说一句,我的网站是用Laravel框架和Postgres建立的。
我刚接触负载平衡器,请帮我找到完美的解决方案。
如果是,应该如何配置Route53
在R53中你不应该做什么。它的负载平衡器(LB)在实例之间分配流量,而不是R53。R53只会引导流量到LB,没有别的。
负载均衡器如何处理用户会话?
它不处理它。您可以在目标组(TG)中启用粘性会话,以便LB尝试"维护状态信息",以便为客户提供持续的体验。
但是,更好的解决方案是使实例无状态。这意味着应用程序的所有会话/状态信息都保存在实例之外,例如在DynamoDB、ElastiCache或S3中。通过这种方式,您可以使应用程序具有可伸缩性,并消除跟踪存储在单个实例上的会话数据的问题。我也想知道如何在这些情况下管理源代码。我的意思是,如果我想更新代码我需要分别更新这两个实例吗?
是的。您的实例应该相同。通常使用CodeDeploy来确保实例数量的平滑和可再现更新。