代码之家  ›  专栏  ›  技术社区  ›  Oskar Kjellin

编写多服务器代码

  •  5
  • Oskar Kjellin  · 技术社区  · 14 年前

    我一直在想,像Facebook这样的网站如何能够拥有多个服务器?

    代码如何考虑到几个服务器将运行相同的代码并从添加更多代码中获益?

    或者,无论代码如何,Web服务器都可能处理这个问题?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Metalshark    14 年前

    通过共享和联网。一台或多台服务器的代码“应该”相同。

    您可以通过数据库、内存与memcache、负载与均衡器等共享数据。如果您专门使用像google这样的服务器(一些服务器执行URL提取、一些保留数据、一些服务器执行数字处理等),则可以更好地利用手头的硬件。

    代码可以使用分派逻辑(通常是通过API抽象的),这样,如果有一台或数百万台服务器,它的工作方式是相同的。

    IPC(进程间通信)可以启用网络并允许“更紧密”的服务绑定。谷歌甚至有一个 protocol buffer 项目来帮助这个。

    基本上,服务器必须共享才能获得任何真正的好处(除了故障转移/备份),代码需要使用抽象级别来帮助共享。实际共享通常使用 Round-Robin Map/Reduce 逻辑。

        2
  •  3
  •   Bernd    14 年前

    底层架构模式是“无共享架构”。其思想是构建架构中使用最频繁的部分,使其能够被分发,并且分布式对等端不需要了解其他对等端的任何信息,因此它们不需要彼此通信。这样就可以通过添加其他对等点来扩展它们。

    通常,这需要某种类型的流量路由(负载平衡)来提供共享组件,以及一些持久性和/或状态同步。

    这种“经典”架构是一个或多个负载均衡器,将流量分配给几个“不共享”的应用程序服务器,这些服务器运行在一个公共数据库上。通常,应用服务器硬件相当便宜,数据库硬件是一个或两个很大的负担,这取决于负载。

    如今,越来越多的解决方案也将数据库分割成多个部分,以便进行扩展。最终,这将导致分布式、分片的数据库,其中存在多个DB节点,并且每个节点只包含数据的一个子集。

    推荐文章