我在 Hostican.com 有 VPS 服务。2.7GHz CPU,2GB RAM(级别 5,如果你看看地点)。我有一个智能手机应用程序,它向 PHP 表单发出请求,然后查询 MySQL 数据库。由于即将开展的广告活动,我预计一天内活动量会激增。广告活动的成功至关重要;当活动量激增时,我不能承受服务器瘫痪。
信息:
- 我预计一天内会新增约 20,000 个账户。创建一个账户需要 2 个 SELECT、2 个 INSERT,然后在 START/COMMIT 块中执行 11 个 GRANT 语句。SELECT 和 INSERT 很简单,没有连接。
- 用户创建新帐户后,即可执行各种功能,所有这些功能都会访问 PHP 表单并查询数据库。大多数表单执行 1 或 2 个简单查询(即 SELECT 和 INSERT)并返回结果。有些表单可能执行多达 4 个查询,但这些查询都不复杂。大多数表单都是单表,只有少数两个表的 JOIN。
- 数据字段都相对较小;没有查询返回超过几行文本。
- 所有表都是 InnoDB。我已对任何我认为有用的字段进行了索引。
- 对服务器的所有请求都是 HTTPS。
大部分流量可能来自于账户创建。
我可以依赖这个 VPS 设置来处理这类流量吗?
此外,假设这一天成功了,那么此后我可能每天都会处理这么多的帐户请求(以及适当增加的其他 PHP 表单请求数量)。每天可能有 20,000 个新帐户。我不认为我拥有的 VPS 可以处理很长时间,但我不确定它大概在什么时候无法处理,以及我应该在升级方面追求什么。
更新
我正在研究 MySQL 和 PHP 优化,以及升级到专用服务器的选项。如果需要的话,我当然愿意花钱购买专用服务器(听起来迟早会这样)。
有两点我忘记了,想补充一下:
- 所有对服务器的 HTTP 请求都使用 SSL,这是否会增加很多处理开销?从我读到的内容来看,我似乎不应该太担心这一点……
- 我忘记提到的一个重要点:服务器正在与之通信的应用程序是一个消息传递应用程序,传入的消息存储在数据库中,直到用户检索它们(因此需要大量写入的 SQL 语句)。传出的消息通过电子邮件发送;因此,我还运行了一个电子邮件服务器(我相信是 exim,尽管我可以更改它)并且非常频繁地发送电子邮件。一旦活动全面展开,电子邮件可能会每秒发出 1 封或更多。一般来说,这会增加很多处理/内存开销吗?
总之,服务器使用 Apache、MySQL、PHP、SSL 和 exim(或其他电子邮件服务器)来为这款智能手机应用程序提供服务。与 PHP 和 MySQL 相比,SSL 和电子邮件会更令人担忧吗?
答案1
首先,我建议你最好对整个应用程序(MySQL/PHP,而不是其中一个)进行基准测试,看看你的服务器的性能如何。这可能涉及一些模拟用户操作的自定义脚本。这将让你很好地了解你可以处理多少流量以及是否需要更强大的服务器。
您的查询平均每秒大约 4 次,这相当低,所以我会猜测即使是最小的 MySQL 设置也应该能够处理它。例如,我有一个中低端专用 MySQL 服务器,平均每秒 100 个查询(MediaWiki),CPU 空闲率为 95%。然而,我的应用程序读取量很大,而您的应用程序写入量很大,这有很大的不同。
假设 20000 个帐户会分散在 24 小时内也可能很危险。您可能会在头一两个小时内获得大部分流量,在这种情况下,您可能需要每秒处理数百次查询。除非您恰好已经设置了备份数据库,否则一旦现有服务器超载,就为时已晚。
另一件需要考虑的事情不是 MySQL 的性能,而是 PHP 脚本的性能。根据使用 PHP 构建网站的经验,我担心的查询数远不止每秒 4 次。即使是小型 PHP 脚本也会很快耗尽 CPU。
问问自己,这个活动值多少钱,如果你的数据库在活动开始 1 小时后宕机,你能承受多少损失?你可以花 100 美元购买一个不错的专用服务器,使用一个月。购买两台(或更多)服务器甚至可能值得,其中一台作为备用服务器,以防第一台服务器过载或意外宕机。
您可以问自己一些问题:
- 失败的代价是什么?
- 我愿意/能够花多少钱来防止失败?
- 如果我们获得的点击量比预期的多,或者多很多,会发生什么情况?
- 我的服务器的点击次数/秒和客户端/秒的测量容量是多少?
- 我的服务器/应用程序架构当前的瓶颈是什么?
编辑:回答更新的问题
我没有使用这种规模的 SSL/电子邮件的经验。额外的进程肯定会消耗 CPU,更重要的是,还会消耗 RAM。由于这个应用程序相对复杂,因此需要进行某种形式的基准测试。当您在一台服务器上运行多个服务器进程时,很难猜测性能,因为进程间交互变得非常复杂,性能问题也更加微妙。如果不进行某种测试,您真的不知道您的服务器是否可以处理 10 个用户或 10,000 个用户。
事实上,您只有很短的时间窗口,在此期间流量会快速增加,这使得基准测试变得更加重要。如果您的流量会在几周/几个月内稳步增加,那么您可以先使用低端服务器,然后根据需要慢慢升级/扩展。