Architecture 从这些架构中,有什么更好的架构来扩展系统?

Architecture 从这些架构中,有什么更好的架构来扩展系统?,architecture,server,scalability,Architecture,Server,Scalability,让我们假设,我正在运行一台机器,上面运行着nodejs、websocket服务和redis服务。我想从规模的角度来分配系统,这两种方法中哪一种更好: 在不同的机器上运行每个服务。因此,在负载平衡器后面有两台机器用于Websocket服务,一台机器用于nodejs,三台机器用于Redis 继续在同一台机器上运行所有服务,现在将此机器克隆到其他五台机器上,并在负载平衡器后面运行它们 我一直致力于/看到第一个建筑。但一位经验丰富的开发运营人员建议我采用第二种方法,他说这种方法易于管理,而且扩展性更好

让我们假设,我正在运行一台机器,上面运行着nodejs、websocket服务和redis服务。我想从规模的角度来分配系统,这两种方法中哪一种更好:

  • 在不同的机器上运行每个服务。因此,在负载平衡器后面有两台机器用于Websocket服务,一台机器用于nodejs,三台机器用于Redis

  • 继续在同一台机器上运行所有服务,现在将此机器克隆到其他五台机器上,并在负载平衡器后面运行它们

  • 我一直致力于/看到第一个建筑。但一位经验丰富的开发运营人员建议我采用第二种方法,他说这种方法易于管理,而且扩展性更好


    此外,这并不是特定于nodejs、redis等。我提到它们是为了更好地解释。一般来说,我想知道哪种体系结构更好。

    第二种方法通常更好,特别是如果您可以配置负载平衡器,将流量路由到具有处理请求所需的所有数据的节点。这种类型的体系结构称为完全隔离的不同节点,其中一个节点的故障不会影响另一个节点。这种类型的体系结构几乎可以线性扩展(不是线性扩展,因为您仍然需要复制数据以获得高可用性,但如果可能的话,也可以异步扩展)


    或者,您可以拥有所有节点中的所有数据。。。但是这可能会很昂贵,而且复制可能会成为一个问题,特别是当您需要同步复制时。

    一种看待这个问题的方法是通过书中提出的AKF可伸缩性多维数据集。它是一个框架,使用一个立方体来观察可伸缩性,其中3个轴分别表示不同的伸缩方式

    x轴:克隆服务和数据,以便可以轻松地跨实例分发工作。 y轴:通过数据或工作分离工作责任。或者是数据和工作的结合。提供故障隔离。 z轴:基于请求/客户的工作分离。按地理位置划分服务的能力


    理想的组合是1个或多个量表-取决于您的需要。根据需要,您可以开始沿所有3个维度进行缩放。这将为您提供几乎无限的规模。

    没有比这更好的通用架构。它取决于您的非功能性需求,如可用性、数据一致性、响应时间、(峰值)负载、业务逻辑的复杂性、机器数量(复制数量)、用例等等。。。