扩大规模:分工还是裁员?

时间:2009-12-24 17:43:18

标签: architecture scaling horizontal-scaling distributed-programming

这是我一直想知道的事情。我知道横向扩展是关于添加更多的机器。但我可以想到两种方法。假设我有20个我想要使用的服务器(加上一个数据库)。我可以:

  1. 将所有20台服务器作为应用程序服务器运行。
  2. 让不同的服务器执行任务的不同部分。例如,让一组服务器处理请求,然后另一组处理业务逻辑,然后另一组处理数据库。
  3. 1号似乎更常见,更容易理解,但2号似乎被认为是“最佳实践”(因为它主要是n层架构)。如何在这两种模型之间进行选择?每种方法的优点和缺点是什么?

1 个答案:

答案 0 :(得分:1)

这取决于任务,以及你的瓶颈是什么。

几乎无一例外,您将需要至少两种服务器:1)应用程序和2)数据库。如果分发应用程序服务器,则仍需要在它们之间同步数据,使其中一个服务器(或单独的服务器)成为您的数据库服务器。

如果您知道数据库不会受到大量流量的影响(例如:您正在运行基于聊天的实时站点,并且没有多少数据被永久存储或同步)那么除了应用程序服务器之外什么都不做就可以了

对于大多数网站而言,选择#2更好,特别是如果您事先不知道哪些服务器会成为瓶颈。如果您不允许每种服务器类型进行扩展,那么您将不得不在意外增长突发期间重写源代码。那么你将不得不做出一些困难的决定,比如“我们应该禁用哪些功能,以便在我们进行缩放时网站仍能正常运行?”

老实说,我不会花太多时间担心可扩展性。一旦达到服务器负载变得过高的程度,您就可以负担一些源重写。通过新发现的资金来源,或通过网站的直接利润。 例证:Twitter仍然表现不错。