我正在使用Spring Boot创建一个API,该API可能会有请求高峰。因此,让我们进入最坏的情况。想象一下,突然我有200万个API请求。我该怎么办才能解决这个问题?我读了一些有关队列和工作程序的信息,但我不知道这不是最好的方法。使用AWS可以通过某种方式做到这一点吗?
谢谢。
答案 0 :(得分:1)
这始终是一个棘手的问题。首先,您的应用程序真的需要在高峰期扩展到200万个API请求吗?我之所以问,是因为过度设计“应对未来规模”的解决方案很容易,该解决方案最终会出现一些问题,甚至无法很好地应对当前规模。
但是,假设您确实会有大量的请求高峰,那么当前的微服务方法(或流行语?)是应对这些高需求时期的一种很流行的方法。基本上,您将应用程序分成较小的自包含服务(“ microservices ”),这些服务可以根据需要更轻松地扩展。
然后可以使用Kubernetes或Amazon 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 :(得分:0)
您的问题非常广泛,因为有许多不同的解决方案:
1)使用负载均衡器,并具有您的应用程序的多个实例
2)使用容器化工具(例如docker和kubernetes)来增加实例数量,具体取决于当前负载。您基本上可以按需扩展
3)我们不知道您的应用程序实际上在做什么:它读得很重,它写得很重吗?用户会下载内容吗?这个问题的答案可以改变特定解决方案是否可行
4)您可能可以使用RabbitMQ之类的Messenger队列来协助跨不同服务分配负载。您可以让多个服务从此队列中读取并同时执行操作...但是同样,这取决于您的应用程序实际将要执行的操作。
查看AWS EC2 和 Elastic Beanstalk 。您还可以使用nginx启动并运行一个简单的负载均衡器。祝你好运