我将负责管理一个特定活动的活动票务系统。我认为我们可能预计流量会总体较低,不过当门票销售开始时,可能会出现几次突然的流量高峰(最多有 1000 名访客同时尝试购买门票)。该活动的 Web 服务器之前曾崩溃过,因此我们希望避免这种情况再次发生。
我考虑将其托管在 Amazon 上,使用 1 个 Apache(可能带有前端 Nginx 代理)+ Redis 服务器来处理请求,使用 1 个 MySQL 服务器来作为后端数据库。这两台服务器可能各自使用一个微型实例。售票系统可能是内部的,使用 Laravel 构建,并将经常访问的信息(例如售票数量、表单提交内容)存储在 Redis 中以便快速访问。这足以处理如此大量的预期流量吗?对于如此大量的流量来说,这是否有点过度了?我应该对 Web 和数据库服务器进行哪种形式的优化?
答案1
设计问题并不是 SF 的真正意义所在,但作为一名亚马逊架构师,我会回答。
我认为微型实例不会满足您的需要,但这取决于您的性能测试结果。编写软件以跨 ELB 后面的多个服务器进行扩展,记住会话状态,并假设单个服务器随时会停止工作。您的性能/负载测试将告诉您需要多少台服务器。您可以自动扩展以设置新实例,但这可能不够快,因此您应该在预计高负载时安排或手动启动实例。如果您使用负载平衡器,您可以轻松地让微型实例在大多数时间运行,然后为预期的高负载添加更大的实例,关闭微型实例。
使用 Amazon RDS(又称托管 MySQL),而不是运行服务器。除非您需要 RDS 不提供的功能,否则这样做更简单,而且可能更快。同样,您需要加载测试实例类型。