让我们假设,我正在运行一台运行nodejs,websocket服务和redis服务的机器。我想从规模角度分配系统,这两种方法中的哪一种会更好:
在不同的计算机上运行每项服务。因此,负载均衡器后面有两台用于Websocket服务的机器,一台用于nodejs的机器,三台用于Redis的机器。
继续在同一台计算机上运行所有服务,现在将此计算机克隆到其他五台计算机上并在负载均衡器后面运行它们。
我一直致力于/见过第一个架构。但是一位经验丰富的开发人员建议我采用第二种方法,他说它易于管理和扩展。
此外,这不是nodejs,redis等特有的。我提到它们可以更好地解释。我想知道哪个是更好的架构。
答案 0 :(得分:0)
第二种方法通常更好,特别是如果您可以配置负载均衡器以将流量路由到具有处理请求所需的所有数据的节点。这种类型的体系结构称为Shared Nothing Architecture,因为不同的节点完全隔离,一个节点中的故障不会影响另一个节点。这种类型的体系结构几乎是线性扩展的(不是线性的,因为您仍然需要复制数据以实现高可用性,但如果可能的话,这也可以异步完成)。
或者,您可以拥有所有节点中的所有数据......但这可能很昂贵,并且复制可能会成为一个问题,特别是如果您需要同步复制。
答案 1 :(得分:0)
查看此问题的一种方法是按照The Art of Scalability一书中提出的AKF Scalability Cube。它是一个使用立方体来查看可伸缩性的框架,每个3轴代表不同规模的扩展方式。
x轴:克隆服务和数据,以便可以跨实例轻松分配工作。 y轴:通过数据或工作分离工作责任。或者数据和工作的组合。提供故障隔离。 z轴:根据请求/客户分离工作。能够按地理划分服务
理想情况是一个或多个秤的组合 - 取决于您的需求。随着您的需求,您可以开始沿所有3个维度进行扩展。这将给你几乎无限的规模。