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