在多个服务器之间拆分 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。
关于负载平衡器,您应该使用特定的网络服务器应用程序来做到这一点,如nginx
或apache
。这类web服务器工具已经实现了负载均衡机制,你只需要配置即可。
此外,我建议您将服务器 打包到 docker
映像中。这样您就可以使用 Docker Swarm 或 Kubernetes 来部署和扩展 up/down 您的应用程序。更容易管理您的服务、检查应用程序状态和部署新版本。
您可以将 docker
与 nginx
一起使用,其中每个 docker 容器都有一个您的应用程序实例,并且 nginx
将负责 redirect/distribute 您的您的实例之间的请求。
您基本上要寻找的是基于微服务的架构(或 SOA)与整体架构之间的比较。
在微服务中,有多个服务执行特定的任务。它们都 in-turn 用于执行复杂的任务。另一方面,Monoliths 由一个大型服务器组成,它可以完成所有工作,并且也是像您指出的那样的单点故障。
你应该转向微服务吗?
人们普遍认为,项目应该构建在单体架构中,然后随着复杂性的增加而转向微服务。 Martin Fowler's article 很好地解释了这个概念。
这是因为此架构存在某些缺点和权衡——例如,不一致和延迟。
TLDR;开始就坚持一台服务器,复杂了就打断服务。
我打算为我的一个项目构建一个 API。但我正在寻找一种管理它和管理服务器负载的好方法。
我最好只在一台服务器上创建所有内容,还是应该创建多个?
想法:
如果我创建了一个服务器,而该服务器崩溃了,整个系统就会崩溃。但是如果我创建多个服务器来处理这个问题,并且其中一个崩溃了,那么只有那个部分会崩溃。
我是如何想完成这个的:
1) 创建一个 API ENDPOINT
2) 当用户向 API ENDPOINT 发送请求时,ENDPOINT 将向包含特殊任务的正确服务器发送另一个请求,当任务完成时它会 return数据返回给用户。
又名:
用户 => 端点 => 端点 1、端点 2、端点 3,=> 端点 => 用户
我应该这样做吗?
P.S。我不知道这是否是正确的术语,但我正在努力学习如何扩展我的 ENDPOINTS/API/code。
关于负载平衡器,您应该使用特定的网络服务器应用程序来做到这一点,如nginx
或apache
。这类web服务器工具已经实现了负载均衡机制,你只需要配置即可。
此外,我建议您将服务器 打包到 docker
映像中。这样您就可以使用 Docker Swarm 或 Kubernetes 来部署和扩展 up/down 您的应用程序。更容易管理您的服务、检查应用程序状态和部署新版本。
您可以将 docker
与 nginx
一起使用,其中每个 docker 容器都有一个您的应用程序实例,并且 nginx
将负责 redirect/distribute 您的您的实例之间的请求。
您基本上要寻找的是基于微服务的架构(或 SOA)与整体架构之间的比较。
在微服务中,有多个服务执行特定的任务。它们都 in-turn 用于执行复杂的任务。另一方面,Monoliths 由一个大型服务器组成,它可以完成所有工作,并且也是像您指出的那样的单点故障。
你应该转向微服务吗?
人们普遍认为,项目应该构建在单体架构中,然后随着复杂性的增加而转向微服务。 Martin Fowler's article 很好地解释了这个概念。
这是因为此架构存在某些缺点和权衡——例如,不一致和延迟。
TLDR;开始就坚持一台服务器,复杂了就打断服务。