这是我一直想知道的事情。我知道水平扩展是关于在组合中添加更多机器。但我可以想到两种方法。假设我有 20 台服务器要使用(加上一个数据库)。我可以:
- 使所有 20 台服务器作为应用程序服务器运行。
- 让不同的服务器执行任务的不同部分。例如,让一组服务器处理请求,然后另一组应用业务逻辑,然后另一组进行数据库调用。
数字 1 似乎更常见且更容易理解,但数字 2 似乎被认为是“最佳实践”(因为它主要是 n 层架构)。如何在这两种模式之间进行选择?每种方法的优缺点是什么?
这是我一直想知道的事情。我知道水平扩展是关于在组合中添加更多机器。但我可以想到两种方法。假设我有 20 台服务器要使用(加上一个数据库)。我可以:
数字 1 似乎更常见且更容易理解,但数字 2 似乎被认为是“最佳实践”(因为它主要是 n 层架构)。如何在这两种模式之间进行选择?每种方法的优缺点是什么?
这取决于任务,以及您的瓶颈是什么。
几乎无一例外,您至少需要两种服务器:1) 应用程序和 2) 数据库。如果您分发应用程序服务器,您仍然需要在它们之间同步数据,使这些服务器之一(或单独的服务器)成为您的数据库服务器。
如果您知道数据库不会受到太多流量的影响(例如:您正在运行一个基于实时聊天的站点,并且没有多少数据被永久存储或同步),那么选择只做应用程序服务器可能会很好。
然而,对于大多数站点,选择#2 更好,特别是如果您事先不知道哪些服务器会成为瓶颈。如果您不允许每种服务器类型进行扩展,那么在意外的增长突增期间,您将不得不重写源代码。然后您将不得不做出艰难的决定,例如“我们应该禁用哪些功能,以便在我们进行扩展时网站仍然可以运行?”
不过,老实说,我不会花太多时间担心可扩展性。一旦达到服务器负载变得过高的程度,您将能够承受一些源代码重写。要么通过新发现的资金来源,要么通过场外的直接利润。恰当的例子:Twitter 仍然做得很好。