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

时间:2019-05-03 18:56:07

标签: java spring spring-boot scale

我正在使用Spring Boot创建一个API,该API可能会有请求高峰。因此,让我们进入最坏的情况。想象一下,突然我有200万个API请求。我该怎么办才能解决这个问题?我读了一些有关队列和工作程序的信息,但我不知道这不是最好的方法。使用AWS可以通过某种方式做到这一点吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

这始终是一个棘手的问题。首先,您的应用程序真的需要在高峰期扩展到200万个API请求吗?我之所以问,是因为过度设计“应对未来规模”的解决方案很容易,该解决方案最终会出现一些问题,甚至无法很好地应对当前规模。

但是,假设您确实会有大量的请求高峰,那么当前的微服务方法(或流行语?)是应对这些高需求时期的一种很流行的方法。基本上,您将应用程序分成较小的自包含服务(“ microservices ”),这些服务可以根据需要更轻松地扩展。

然后可以使用KubernetesAmazon ECS之类的东西来放大和缩小单个微服务以匹配负载。

就Spring与之相关的方面而言,Spring有一套便捷的技术,称为Spring Cloud-您也会注意到那里的Spring Cloud AWS(尽管Spring Cloud通常也可以在裸机服务器上正常工作,Docker,Kubernetes等)。一年前,我在Github上放了一个简单的Spring cloud/microservices demo,展示了各种Spring支持的微服务如何组合在一起,您可能会发现这很有用。

微服务的另一个好处是,您可以很容易地交换以特定服务编写的语言,特别是如果微服务以通用格式(例如通过REST请求的JSON)彼此“讲话”时,尤其如此。因此,如果您有10种不同的微服务,全部由Spring Boot提供支持,但是您发现其中的一些更好用另一种语言编写,则可以重写它们:只要它们以相同的方式发送和接收数据,然后系统的其他部分无需关心。

好的,这是很多流行语和新概念。可以问我是否可以澄清任何问题,但是微服务+ kubernetes / AWS是一种流行的解决方案。

其他可能同样有效的方法是:

  1. 无服务器-在这里,您可以使用一堆云提供商的工具和解决方案为web应用(包括lambda之类)提供动力,而不是将应用托管在传统的服务器/ VM上。 This medium tutorial简单介绍了无服务器。
  2. Monoliths -这是一个传统的Web应用程序,它是一个庞大的庞大代码库,但这并不意味着您只能运行它的一个实例(即,您仍然可以扩展它)。这个网站is a successfully scalable独树一帜。

答案 1 :(得分:0)

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

1)使用负载均衡器,并具有您的应用程序的多个实例

2)使用容器化工具(例如docker和kubernetes)来增加实例数量,具体取决于当前负载。您基本上可以按需扩展

3)我们不知道您的应用程序实际上在做什么:它读得很重,它写得很重吗?用户会下载内容吗?这个问题的答案可以改变特定解决方案是否可行

4)您可能可以使用RabbitMQ之类的Messenger队列来协助跨不同服务分配负载。您可以让多个服务从此队列中读取并同时执行操作...但是同样,这取决于您的应用程序实际将要执行的操作。

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