【问题标题】:Scalable server hosting可扩展的服务器托管
【发布时间】:2019-04-10 21:41:18
【问题描述】:
我现在有一个简单的服务器(一些 xeon cpu 托管在某处),运行 apache/php/mysql(没有 docker,但它有可能),我期待一些繁忙的流量,我需要我的服务器来处理它。
目前服务器一次可以处理大约 100 个用户,我可能需要它来处理几千个用户。
将我的应用迁移到一些可扩展的主机上最简单、最快速的解决方案是什么?
我没有使用 AWS 或类似的经验。
我正在阅读有关 AWS 和类似内容的信息,但我很困惑,不知道应该选择什么。
【问题讨论】:
标签:
amazon-web-services
server
cloud
web-hosting
【解决方案1】:
基本选择是:
-
垂直缩放使用更大的计算机。但是,您最终会遇到限制,并且您将遇到单点故障(一台服务器!),或
-
横向扩展通过添加更多服务器并在服务器之间分散流量。这具有处理故障的额外优势,因为如果一台服务器出现故障,其他服务器可以继续提供流量。
在云中进行水平扩展的一个好处是能够根据工作负载添加/删除服务器。当事情忙时,添加更多服务器。当事情平静下来时,移除服务器。这还可以让您在安静时降低成本(当您拥有自己的设备时,这在本地是不可能的)。
该架构涉及在负载均衡器后面放置多个服务器:
- 流量进入 负载平衡器
- 负载均衡器将请求发送到服务器(通常基于对每个服务器“忙碌”程度的某种衡量)
- 服务器处理请求并发送响应回负载均衡器
- 负载均衡器将响应发送给原始请求者
AWS 有多个可用的负载均衡器,它们会因需要而异。如果您只是将流量发送到安装在所有服务器上的单个应用程序,则 网络负载均衡器 就足够了。对于应用程序的不同部分位于不同服务器上的情况(例如移动界面与 Web 界面),您可以使用 Application Load Balancer。
AWS 还通过提供 Amazon EC2 Auto Scaling 服务来协助横向扩展。这允许您指定要启动的服务器的详细信息(磁盘映像、实例类型、网络设置),然后 Auto Scaling 可以在需要时自动启动新服务器并终止那些不是必需的。 (请注意,它们启动和终止,而不是启动和停止。)
您可以进一步定义扩展策略,通过测量 CPU 利用率等指标告诉 Auto Scaling何时启动/终止实例。这样,服务器的数量可以大致匹配流量。
应该提到,如果您有一个数据库,它应该单独存储到应用程序服务器中,这样它就不会被终止。您可以使用 Amazon Relational Database Service (RDS) 为您运行数据库,也可以在单独的 Amazon EC2 实例上运行数据库。
如果您想了解有关上述任何技术的更多信息,YouTube 上的大量讲座或博客文章可以解释和展示它们的用途。