我正在用Spring引导创建一个API,这个API可能会有请求峰值。
所以让我们进入最坏的情况。想象一下,突然间我有了200万个API请求。
,我能做什么才能处理这件事?
我读过一些关于排队和工人的文章,但我不知道这是否是最好的方法。
有什么方法可以用AWS?来做吗?
发布于 2019-05-03 19:40:41
这是一个很难回答的问题。首先,您的应用程序真的需要在峰值时扩展到200万个API请求吗?我之所以这么问,是因为它很容易设计出一个“处理未来规模”的解决方案,它最终会有一点小问题,甚至无法很好地处理当前的规模。
但假设您真的会有大量的请求高峰,目前的微服务方法(或流行词?)是处理这些高需求时期的一种很流行的方法。基本上,您可以将应用程序分成更小的、独立的服务(“microservices”),这些服务可以更容易地按需要进行缩放。
然后,可以使用诸如库伯内斯或亚马逊ECS之类的工具,将单个微服务向上或向下缩放,以匹配负载。
关于Spring与此相关的地方,Spring有一组名为春云的方便的技术--您也会注意到Spring (虽然Spring一般也可以在裸金属服务器、Docker、Kubernetes等上很好地工作)。一年前,我将一个简单的Spring云/微服务演示放在Github上,它展示了不同的Spring驱动的微服务是如何结合在一起的,您可能会发现这是有用的。
使用microservices的另一个好处是,您可以很容易地交换特定服务所用的语言,特别是如果微服务以通用格式(例如通过REST请求进行JSON )彼此“对话”的话。因此,如果您有10个不同的微服务,都是由Spring Boot提供的,但是您发现其中有几个更好地用另一种语言编写,您可以重写它们:只要它们以相同的方式发送和接收数据,那么系统的其他部分就不需要关心了。
好吧,这是很多时髦的词和新的概念。如果我能澄清任何问题,请随意提问,但是microservices + kubernetes/AWS是一个流行的解决方案。
然而,其他可能同样奏效的办法是:
发布于 2019-05-03 19:33:16
你的问题非常广泛,因为有许多不同的解决方案:
1)使用负载均衡器,并具有应用程序的多个实例
2)使用容器化工具(如docker和kubernetes )根据当前负载增加实例数量。您基本上可以按需进行缩放。
3)我们不知道你的应用程序到底做了什么:是读重,写重吗?用户会下载内容吗?这个问题的答案会改变一个特定的解决方案是否可行。
4)您可以使用像RabbitMQ这样的信使队列来帮助在不同的服务之间分配负载。您可以让多个服务从这个队列中读取,并在同一个time...but上再次执行操作,这取决于您的应用程序实际将做什么。
检查AWS EC2和弹性豆柄。您还可以使用nginx获得一个简单的负载均衡器并运行。祝好运
https://stackoverflow.com/questions/55975674
复制相似问题