在多个服务器之间拆分 API 的负载

Splitting load of an API between multiple servers

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

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

想法:

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

我是如何想完成这个的:

1) 创建一个 API ENDPOINT

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

又名:

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

我应该这样做吗?

P.S。我不知道这是否是正确的术语,但我正在努力学习如何扩展我的 ENDPOINTS/API/code。

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

此外,我建议您将服务器 打包到 docker 映像中。这样您就可以使用 Docker Swarm 或 Kubernetes 来部署和扩展 up/down 您的应用程序。更容易管理您的服务、检查应用程序状态和部署新版本。

您可以将 dockernginx 一起使用,其中每个 docker 容器都有一个您的应用程序实例,并且 nginx 将负责 redirect/distribute 您的您的实例之间的请求。

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

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

你应该转向微服务吗?

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

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

TLDR;开始就坚持一台服务器,复杂了就打断服务。