2010-07-10 67 views
5

我一直想知道一段时间; Facebook代码如何能够拥有多台服务器?编写多服务器代码

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

或者Web服务器可能处理这个问题而不管代码如何?

回答

4

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

你可以通过数据库,内存与Memcache,负载与平衡器等共享数据。如果你专门服务器像Google一样(一些做URL提取,一些保存数据,一些做数字运算等),硬件到手可以更好地利用。

代码可以使用调度逻辑(通常通过API抽象),以便它在一台服务器或数百万台服务器上工作。

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

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

3

底层架构模式是“无共享架构”。其思想是以可分布的方式构建构架中使用最多的部分,并且分布式对等方不需要了解其他对等方的任何信息,因此它们不需要相互通信。这样他们可以通过添加其他同伴来扩展。

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

这个“古典”体系结构是一个或多个负载均衡器,将流量分配给几个针对公用数据库运行的“无共享”应用服务器。典型的appication服务器硬件相当便宜,数据库硬件是根据负载情况而定的一个或两个大型硬件。

现在,越来越多的解决方案也将数据库分割为多个部分,以便对其进行扩展。最终导致分布式,分片数据库,其中存在多个db节点,并且每个节点仅包含数据的一个子集。