【发布时间】:2012-11-28 22:12:27
【问题描述】:
这里有点复杂。我在过去几个月完成了一个更大的基于 Web 的项目,因为我试图保持低预算(并自己学习一些东西),所以我没有触及我以前从未接触过的问题:使用 NGINX 进行负载平衡,以及面向未来的可扩展性。
设置如下: 1 台网络服务器 1 台数据库服务器 1 个文件服务器(也用于存储备份)
使用 PHP 5.4
现在,所有这些服务器都应该是“可扩展的”——从某种意义上说,如果可用磁盘空间越来越低,我可以添加一个新的文件服务器,或者如果我需要处理比预期更多的请求,我可以添加一个新的 Web 服务器。
另一件事是:我想在一个域上做所有事情,这样前端就不会真正注意到对不同后端服务器的访问(一些后端服务器基本上是通过子域调用的 - 例如:文件服务器,通过'http ://file.myserver.com/...' 仅在文件服务器之间发生负载平衡)
- 我是否需要额外的独立服务器来实现负载平衡?或者我可以只使用其中一个 Web 服务器吗?如是:
- 这样的负载平衡服务器需要多少功率(CPU / RAM)?它是否必须与网络服务器相同,或者拥有一个“更轻”的服务器就足够了?
- “负载平衡”服务器是否也必须具有可扩展性?如果请求太多,我需要多个吗?
- 整个负载平衡究竟是如何工作的?我的意思是:
- 我看到很多条目指出,负载平衡系统上存在会话处理/同步等问题。我可以找到 2 个可能适合我需求的解决方案:要么始终将用户定向到同一台机器,要么将数据存储在数据库中。但是对于第二个,我基本上必须重建 PHP 已经拥有的 $_SESSION 功能的一部分,对吗? (我怎么知道哪个用户获得了哪个会话,cookie 真的足够了吗?)
- 除了不同步的会话之外,我会遇到什么问题?
- 编写可扩展的代码 - 这是我经常阅读的一句话。但是以 PHP 为例,它的真正含义是什么?通常,一个用户的整个计算只发生在一台服务器上(NGINX 将用户重定向到的服务器) - 那么 PHP 本身如何可扩展,因为它实际上并没有被 NGINX 重定向?
- 是否可以使用不同的“负载平衡”池?我的意思是,所有文件服务器都在一个“池”中,所有 Web 服务器都在一个“池”中,基本上,如果您在文件服务器上请求一个有太多事情要做的图像,它会重定向到一个不太繁忙的文件服务器
- SSL - 我只需要一个用于平衡加载服务器的证书,对吗?由于数据总是通过负载平衡服务器返回 - 或者这究竟是如何工作的?
我知道这是一个很大的问题 - 基本上,我真的只是在寻找一些建议/有点帮助,我对整个事情有点迷茫。我可以阅读部分回答上述问题的 sn-ps,但真正“做”它完全是另一回事。所以我已经知道不会有一个明确的、确定的答案,但也许是一些经验。
最终目标是在未来易于扩展,并且已经提前计划(甚至购买负载平衡器服务器之类的东西)。
【问题讨论】:
-
关于分布式会话的问题:你不必重写PHP的会话功能。阅读custom session handlers。
标签: php mysql ssl nginx load-balancing