Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring boot API-如何随着用户的增长扩展应用程序_Java_Spring_Spring Boot_Scale - Fatal编程技术网

Java Spring boot API-如何随着用户的增长扩展应用程序

Java Spring boot API-如何随着用户的增长扩展应用程序,java,spring,spring-boot,scale,Java,Spring,Spring Boot,Scale,我正在用Spring boot制作一个API,它可能会有请求峰值 让我们进入最坏的情况。想象一下,突然我有200万个API请求 我能做些什么来处理这个问题? 我读了一些关于排队和工人的文章,但我不知道这是否是最好的方法 有什么办法可以用AWS实现吗?您的问题非常广泛,因为有很多不同的解决方案: 1) 使用负载平衡器并拥有多个应用程序实例 2) 根据当前负载,使用docker和kubernetes等容器化工具来增加实例数量。您基本上可以根据需要进行扩展 3) 我们不知道你的应用程序到底做了什么:它

我正在用Spring boot制作一个API,它可能会有请求峰值

让我们进入最坏的情况。想象一下,突然我有200万个API请求

我能做些什么来处理这个问题?

我读了一些关于排队和工人的文章,但我不知道这是否是最好的方法


有什么办法可以用AWS实现吗?

您的问题非常广泛,因为有很多不同的解决方案:

1) 使用负载平衡器并拥有多个应用程序实例

2) 根据当前负载,使用docker和kubernetes等容器化工具来增加实例数量。您基本上可以根据需要进行扩展

3) 我们不知道你的应用程序到底做了什么:它是读重还是写重?用户会下载内容吗?这个问题的答案可能会改变具体解决方案是否可行

4) 您可以使用RabbitMQ之类的信使队列来帮助跨不同服务分配负载。您可以让多个服务从该队列读取数据并同时执行操作……但这取决于您的应用程序实际执行的操作


查看AWS EC2和Elastic Beanstalk。您还可以使用nginx启动并运行一个简单的负载平衡器。祝你好运

你的问题非常广泛,因为有很多不同的解决方案:

1) 使用负载平衡器并拥有多个应用程序实例

2) 根据当前负载,使用docker和kubernetes等容器化工具来增加实例数量。您基本上可以根据需要进行扩展

3) 我们不知道你的应用程序到底做了什么:它是读重还是写重?用户会下载内容吗?这个问题的答案可能会改变具体解决方案是否可行

4) 您可以使用RabbitMQ之类的信使队列来帮助跨不同服务分配负载。您可以让多个服务从该队列读取数据并同时执行操作……但这取决于您的应用程序实际执行的操作


查看AWS EC2和Elastic Beanstalk。您还可以使用nginx启动并运行一个简单的负载平衡器。祝你好运这总是一个棘手的问题。首先,你的应用程序真的需要在峰值时扩展到200万个API请求吗?我这样问是因为很容易过度设计一个“处理未来规模”的解决方案,结果导致有点问题,甚至不能很好地处理当前规模

但是,假设您真的会有大量的请求高峰,那么当前的微服务方法(或流行语?)是处理这些高需求时期的一种非常流行的方法。基本上,您可以将应用程序拆分为更小、自包含的服务(“微服务”),这些服务可以根据需要更容易地进行扩展

然后,可以使用或之类的工具放大或缩小单个微服务以匹配负载

关于Spring与此的关系,Spring有一套方便的技术,称为——你也会注意到Spring Cloud AWS(尽管Spring Cloud通常也可以在裸机服务器、Docker、Kubernetes等上正常工作)。一年前,我在Github上做了一个简单的演示,展示了不同的Spring驱动的微服务如何组合在一起,您可能会发现这很有用

微服务的另一个好处是,您可以相当轻松地交换编写特定服务的语言,特别是如果微服务以通用格式(如通过REST请求的JSON)相互“交谈”的话。因此,如果你有10种不同的微服务,都是由Spring Boot提供动力的,但是你发现其中有两种是用另一种语言编写的,你可以重写它们:只要它们以相同的方式发送和接收数据,那么系统的其他部分就不必在意

好吧,这是很多流行语和新概念。如果我能澄清任何问题,请随时提问,但microservices+kubernetes/AWS是一种流行的解决方案

然而,其他可能同样有效的方法有:

  • Serverless-在这里,您可以使用云提供商的一系列工具和解决方案为您的Web应用程序提供支持,包括lambdas等,而不是将应用程序托管在传统的服务器/VM上。简单介绍无服务器
  • Monoliths-这是一个传统的web应用程序,它是一个单一的、大型的、扩展的代码库,但这并不意味着您只能运行一个实例(即,您仍然可以扩展它)。这正是网站的整体

  • 这总是一个很难回答的问题。首先,你的应用程序真的需要在峰值时扩展到200万个API请求吗?我这样问是因为很容易过度设计一个“处理未来规模”的解决方案,结果导致有点问题,甚至不能很好地处理当前规模

    但是,假设您真的会有大量的请求高峰,那么当前的微服务方法(或流行语?)是处理这些高需求时期的一种非常流行的方法。基本上,您可以将应用程序拆分为更小、自包含的服务(“微服务”),这些服务可以根据需要更容易地进行扩展

    然后,可以使用或之类的工具放大或缩小单个微服务以匹配负载

    关于Spring与此的关系,Spring有一套方便的技术,称为——你也会注意到Spring Cloud AWS(尽管Spring Cloud通常也可以在裸机服务器、Docker、Kubernetes等上正常工作)。一年前,我在Github上做了一个简单的演示,展示了不同的Spring驱动的微服务如何组合在一起,您可能会发现这很有用

    微服务的另一个好处是你可以