0

我有一个应用程序,我正在为 SaaS 多租户情况做准备,但我正在尝试找出服务器冗余和负载平衡以同时支持大量活跃用户的最佳方法。

我使用似乎支持集群或服务器镜像的 ISPConfig,但是镜像支持大规模使用的正确方法?应该在多服务器情况下设置 ISPConfig,并拥有许多单独的服务器/数据库,还是应该将许多服务器作为镜像集群?这会对数据库产生什么影响?是否应该寻找所有服务器都连接到的外部数据库,也许是 Amazon RDS?

我感谢任何人可以提供的任何方向。

4

1 回答 1

0

如果您正在开发需要大量用户的软件的新版本,通常会有一个大瓶颈:数据库。

出于这个原因,许多大型网站,例如 Facebook 和 Twitter,已经远离 SQL 数据库,转而使用允许它们大部分水平扩展的系统。这些被称为 NoSQL 数据库。我使用的这个叫做Cassandra。你获得的用户越多,你添加的 Cassandra 节点就越多,它可以增长到你想要的大小。Netflix 在 2015 年左右表示,他们拥有超过 2,000 个这样的节点。

Cassandra 自动在节点之间镜像数据。

如果您愿意,您还可以查看Scyllab,它是 C++ 中的 Cassandra,而不是 Java。如果我从数据库中删除没有问题,我会使用它......现在,不幸的是,它不是我的选择。还有其他几个 NoSQL 系统,但这是我尝试过的仅有的两个。

接下来...您编写在单独的计算机上运行的应用程序(在进行开发时,您可以在同一台计算机上进行,这很好,但 Cassandra 需要至少 4Gb 的 RAM...)确保 100% 确保所有您的应用程序安装的非只读静态数据的数据保存在数据库中。否则,您将在计算机 A 上而不是计算机 B 上拥有副本。因此,访问计算机 B 的人将永远无法访问计算机 A 上的该数据。但是,如果所有数据(即甚至上传的文件)都在数据库中,则任何前端最终应用程序实例可以访问它。这是什么意思?您可以拥有尽可能多的前端来维持负载。你的结构变成了这样:

                        Internet Users
                               |
                               v
                     +--------------------+
                     |                    |
                     |   Load Balancer    |
                     |                    |
                     +--------------------+
                               |
       +-----------------------+--------------------+
       |                       |                    |
       v                       v                    v
+----------------+    +----------------+    +----------------+
|                |    |                |    |                |
|  Apache/App    |    |  Apache/App    |    |  Apache/App    |
|                |    |                |    |                |
+----------------+    +----------------+    +----------------+
       ^                       ^                    ^
       |                       |                    |
       v                       v                    v
+----------------+    +----------------+    +----------------+
|                |    |                |    |                |
|  Cassandra     |<-->|  Cassandra     |<-->|  Cassandra     |
|                |    |                |    |                |
+----------------+    +----------------+    +----------------+

注意:每个框代表一台计算机,您的最小集群可能是 7 台计算机左右。但是,每个都可以是相当便宜的云计算机,而不是 16 个处理器的专用服务器......

一个重要的注意事项:要正常运行(如数据安全),Cassandra 需要至少 4 个节点和 3 的复制因子。您还需要一个安全的(私有)LAN 网络。如果这不可用,您将不得不安装诸如 OpenVPN 之类的东西,以确保所有数据在节点之间传输加密(即使对于提供此类复制的其他产品也是如此。)

负载均衡只是一个检查前端计算机负载并决定将下一个请求发送到哪个进程的过程。Apache2 有一个模块。请注意,我知道 Apache,我敢打赌其他 HTTP 服务器也提供类似的模块。这取决于您决定哪种解决方案最适合您的公司。您也可以完全从头开始并使用DNS 循环功能。它不是那么好,但肯定更容易设置,如果每次访问您的应用程序可能就足够了。非常对称(使用大约相同的时间)。如果某些请求需要 3 秒而其他请求使用 50 毫秒,那么您可能会遇到仅使用 DNS RR 设置的问题。

该应用程序可以是任何语言。我使用 C++,但我可以使用 Java、PHP、纯 C(真的吗?!)、perl 等。任何适合你的东西。请记住,前端没有数据。所有在数据库中,你会没事的。镜像由 Cassandra 完成,因此您的工作此时已完成。

请注意,我上面显示的图表并不完全正确。前端应该连接到任何 Cassandra 节点。驱动程序通常会连接到 2 或 3 个节点,以确保您始终可以访问数据。然后,一旦您从 1,000 个用户增加到 10,000 个,您只需添加一些前端和一些 Cassandra 节点,瞧!这一切都将像以前一样工作(客户端的速度相同)。

至于使用 ISPConfig,当然可以。ISPConfig 会帮助您解决所有这些问题吗?可能不是。至少在不添加您自己的模块的情况下并非如此......但是您应该能够将它用于它提供的功能:设置您的 DNS,设置您的电子邮件,可能执行大部分 Apache 设置等。

于 2016-09-08T05:12:58.263 回答