Architecture 编写多服务器代码

Architecture 编写多服务器代码,architecture,multiserver,Architecture,Multiserver,我一直在想一段时间;像facebook代码这样的网站如何能够拥有多个服务器 代码如何考虑到多个服务器将运行相同的代码并从添加更多代码中获益 或者Web服务器是否可以通过共享和联网来处理此问题,而不考虑代码。一台或多台服务器的代码“应”相同 您可以通过数据库、内存与Memcache、负载与均衡器等共享数据。如果您专门使用Google这样的服务器(一些进行URL获取,一些保存数据,一些进行数字运算等),那么手头的硬件可以得到更好的利用 代码可以使用分派逻辑(通常通过API进行抽象),因此如果有一台或

我一直在想一段时间;像facebook代码这样的网站如何能够拥有多个服务器

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


或者Web服务器是否可以通过共享和联网来处理此问题,而不考虑代码。一台或多台服务器的代码“应”相同

您可以通过数据库、内存与Memcache、负载与均衡器等共享数据。如果您专门使用Google这样的服务器(一些进行URL获取,一些保存数据,一些进行数字运算等),那么手头的硬件可以得到更好的利用

代码可以使用分派逻辑(通常通过API进行抽象),因此如果有一台或数百万台服务器,它的工作原理是相同的

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


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

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

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

这方面的“经典”体系结构是一个或多个负载平衡器,将流量分配给多个“无共享”应用服务器,这些服务器运行在一个公共数据库上。通常,应用服务器硬件相当便宜,数据库硬件是一个或两个大铁杆,具体取决于负载

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