编写多服务器代码

时间:2010-07-10 14:42:49

标签: architecture multiserver

我一直想知道;像Facebook代码的网站如何能够拥有多个服务器?

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

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

2 个答案:

答案 0 :(得分:4)

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

你可以通过数据库共享数据,内存包括Memcache,带平衡器的负载等。如果你专门研究谷歌这样的服务器(有些是URL提取,有些是数据保存,有些是数字运算等)硬件可以更好地利用手。

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

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

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

答案 1 :(得分:3)

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

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

这种“经典”体系结构是一个或多个负载策略程序,它将流量分配给几个针对公共数据库运行的“无共享”应用程序服务器。通常,应用服务器硬件相当便宜,数据库硬件是一个或两个大铁杆,具体取决于负载。

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