【问题标题】:Splitting load of an API between multiple servers在多个服务器之间拆分 API 的负载
【发布时间】:2019-09-30 17:05:17
【问题描述】:

我正计划为我的一个项目构建一个 API。但我正在寻找一种管理它和管理服务器负载的好方法。

在一台服务器上创建所有内容会更好,还是应该创建多个?

想法:

如果我创建了一台服务器并且该服务器崩溃了,整个系统就会崩溃。但是,如果我创建了多个服务器来处理这个问题,其中一个崩溃了,那么只有那一部分会宕机。

我是如何考虑做到这一点的:

1) 创建一个 API ENDPOINT

2) 当用户向 API ENDPOINT 发送 REQUEST 时,ENDPOINT 会向包含特殊任务的正确服务器发送另一个请求,当任务完成后,它将数据返回给用户。

又名:

用户 => 端点 => 端点 1,端点 2,端点 3,=> 端点 => 用户

我应该这样做吗?

附:我不知道这是否是正确的术语,但我正在尝试学习如何扩展我的 ENDPOINTS/API/代码。

【问题讨论】:

  • 更好地了解微服务,它提供了多服务器工作的灵活性。 microservices.io
  • 旨在简化应用程序/api 的部署,以便您可以轻松地将其部署在 docker、lxd 映像、git 部署、now.sh 等任何东西上,然后您只需要前面的反向代理即可nginx 可以将所有请求代理到上游服务器,如果一个出现故障,它将进行故障转移,但如果您使用 mysql 等,您还需要考虑抽象 db,这也需要部署/备份和负载平衡策略。

标签: node.js api express server endpoint


【解决方案1】:

关于负载均衡器,您应该使用特定的网络服务器应用程序来做到这一点,nginxapache。这类Web服务器工具已经实现了负载均衡机制,只需要配置即可。

另外,我建议您在docker 图像中打包您的服务器。通过这种方式,您可以使用 Docker Swarm 或 Kubernetes 来部署和扩展/缩减您的应用程序。更轻松地管理服务、检查应用程序状态和部署新版本。

您可以将 dockernginx 一起使用,其中每个 docker 容器都有一个您的应用程序实例,nginx 将负责在您的实例之间重定向/分发您的请求。

【讨论】:

    【解决方案2】:

    您基本上要寻找的是基于微服务的架构(或 SOA)与单体架构之间的比较。

    在微服务中,有多个服务执行特定任务。它们都依次用于执行复杂的任务。另一方面,Monoliths 由一个大型服务器组成,它可以完成所有工作,并且像您指出的那样也是单点故障。

    你应该转向微服务吗?

    人们普遍认为,项目应该建立在单体架构中,然后随着复杂性的增加转移到微服务。 Martin Fowler's article很好地解释了这个概念。

    这是因为这种架构存在某些缺点和权衡——例如,不一致和延迟。

    TLDR; 启动时坚持一台服务器,当它变得复杂时中断服务。

    【讨论】:

      猜你喜欢
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多