5

我想了一阵子;像 facebook 代码这样的网站如何能够拥有多个服务器?

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

或者无论代码如何,网络服务器都会处理这个问题?

4

2 回答 2

4

通过共享和网络。对于一台或多台服务器,代码“应该”相同。

您可以通过数据库共享数据,内存与 Memcache 之类的东西共享,负载与平衡器等。如果您像 Google 那样专门化服务器(一些做 URL 获取,一些保存数据,一些做数字运算等),手头的硬件可以得到更好的利用。

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

IPC(进程间通信)可以启用网络并允许“更紧密”的服务绑定。谷歌甚至有一个协议缓冲区项目来帮助解决这个问题。

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

于 2010-07-10T14:49:29.687 回答
3

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

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

对此的“经典”架构是一个或多个负载均衡器,将流量分配到多个针对公共数据库运行的“无共享”应用服务器。通常,应用服务器硬件相当便宜,而数据库硬件是一两个大铁杆,具体取决于负载。

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

于 2010-07-11T10:06:23.637 回答