我们的应用程序是一个 ASP.Net 3.5 Web 应用程序。目前,我们将应用程序托管在位于美国的专用服务器上。现在我们有来自美国和亚洲的用户,根据当前设置,美国用户的速度很快,但亚洲用户的速度却没有那么快。然后我们了解了 Amazon EC2 服务,我们想了解一下这项服务,但在进一步了解之前,我们想知道我们是否能够在 Amazon EC2 服务上进行所需的设置。
我们想要在 Amazon EC2 上设置以下环境:
- 1 个美国地区的网络服务器
- 新加坡地区 1 个 Web 服务器
- 美国地区 1 个数据库服务器
- 在这两个实例之间创建负载均衡器
我们希望进行上述设置,因为我们的应用程序正在被居住在美国和亚洲的用户使用,所以我们希望他们都能从良好的速度中受益。根据我们目前的研究,我们发现在属于不同区域的两个实例之间设置负载平衡器是不可能的。这是正确的吗?
另一个问题是关于亚马逊的 AutoScaling 功能。我们浏览了几个博客和网站,了解到 AutoScaling 也是亚马逊的一个很好的功能,但我们想知道考虑到上述设置,它是否对我们有用。我们对 AutoScaling 进行了一些研究,并了解到为了在亚马逊上设置它,我们需要运行一些 API 脚本或使用他们的 API 命令行工具。那么这些是唯一的设置方法吗?或者有一些基于 GUI 的工具可用于执行此操作。
编辑:
Web 应用程序已被世界各地的用户使用了 4 年以上。我们的应用程序具有图像、皮肤、主题、css、视频等
有了它们,我们还可以使用角色管理等功能。为了从 CloudFront 运行此应用程序,我们可以将代码(即 dll)和
CloudFront 上的其他代码相关项目,然后使用它?我们还需要为此使用数据库连接。所以,你能告诉我吗
如果在我的场景中,是否有可能从两个不同区域的多个实例运行我们的应用程序,这些实例使用来自 CloudFront 的代码?请告诉我。我的另一个问题是关于设置 AutoScaling。根据我们的研究,这对我们来说是一个不错的选择,因为在某些情况下,我们在特定时间段内会获得更多点击量,因此,我们可以使用 AutoScaling 功能,通过根据要求自动添加一个或多个实例,让我们的应用程序继续为用户提供服务。但我们找不到使用某些 GUI 工具进行配置的任何选项。所以你能告诉我们这件事吗?
答案1
您需要一步完成很多工作:
- 从专用服务器进入云端
- 运行应用程序的多个实例而不是一个实例
- 引入负载平衡
每一步都可能有很多陷阱。仅举一个例子:如果您仍然只有一个数据库服务器,并且世界不同地区之间的延迟是一个问题,那么如果您遍布全球的 Web 服务器与仅在一个位置的数据库服务器之间的通信比用户代理和 Web 浏览器之间的通信更“频繁”,那么您提议的设置很可能会比以前更慢!
因此我建议这样做:
- 使用 Amazon CloudFront 等内容交付网络来处理所有静态文件(如 JavaScript、图像、CSS、静态 HTML 文件等)。它易于集成到您当前的应用程序和部署中,价格便宜得多(没有最低费用,例如全天候运行多个 EC2 实例),并且您的页面加载速度会显著加快,尤其是每个会话的第一个页面请求。您的文件将分布在世界各地的许多数据中心(而不仅仅是两个),而您的实际应用程序仍在单个 Web 服务器上运行。
- 尝试使用具有更好的国际主干网和路由链接的托管服务提供商。对于单个 HTTP 请求,延迟的影响对于“普通”用户来说不应该很明显(当然仍然可以测量),通常不超过 300 毫秒。在第一次请求(或访问)时,效果会累积,因为可能需要同时加载许多文件。