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

Architecture 扩大规模:分工还是裁员?,architecture,scaling,horizontal-scaling,distributed-programming,Architecture,Scaling,Horizontal Scaling,Distributed Programming,这是我一直想知道的事情。我知道水平缩放是指在混合中添加更多的机器。但我可以想出两种方法。假设我有20台想要使用的服务器(加上一个数据库)。我可以: 使所有20台服务器都作为应用程序服务器运行 让不同的服务器执行任务的不同部分。例如,让一组服务器处理请求,然后让另一组服务器应用业务逻辑,然后让另一组服务器进行数据库调用 数字1似乎更常见、更容易理解,但数字2似乎被认为是“最佳实践”(因为它主要是一种n层体系结构)。如何在这两种模式中进行选择?每种方法的优缺点是什么?这取决于任务,以及您的瓶颈是什么

这是我一直想知道的事情。我知道水平缩放是指在混合中添加更多的机器。但我可以想出两种方法。假设我有20台想要使用的服务器(加上一个数据库)。我可以:

  • 使所有20台服务器都作为应用程序服务器运行
  • 让不同的服务器执行任务的不同部分。例如,让一组服务器处理请求,然后让另一组服务器应用业务逻辑,然后让另一组服务器进行数据库调用

  • 数字1似乎更常见、更容易理解,但数字2似乎被认为是“最佳实践”(因为它主要是一种n层体系结构)。如何在这两种模式中进行选择?每种方法的优缺点是什么?

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

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

    如果您知道数据库不会受到太多流量的影响(例如:您运行的是一个基于实时聊天的网站,并且没有太多数据被永久存储或同步),那么除了应用服务器之外什么都不做的选择可能是好的

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


    不过,老实说,我不会花太多时间担心可伸缩性。一旦您的服务器负载变得过高,您将能够负担一些源代码重写。要么通过新发现的资金来源,要么通过网站外的直接利润举例说明:Twitter仍然做得很好。

    并非所有情况都是如此。问题是我在“企业”软件领域工作。我们有一些客户需要在签订合同时就扩大规模。