Spring boot API - 如何随着用户的增长扩展应用程序
Spring boot API - How to scale an App as users grow
我正在用 Spring 制作一个 API 启动,这可能会有请求高峰。
让我们进入最坏的情况。想象一下,我突然有 200 万 API 个请求。
我该怎么做才能处理这个问题?
我阅读了一些关于队列和工作人员的内容,但我不知道这是否是最好的方法。
有什么方法可以用 AWS 实现吗?
你的问题很宽泛,因为有很多不同的解决方案:
1) 使用 负载平衡器 并拥有应用程序的多个实例
2) 使用 容器化工具,如 docker 和 kubernetes 以根据当前负载增加实例数量。您基本上可以按需扩展
3) 我们不知道您的应用程序实际做了什么:读重还是写重?用户会下载内容吗?这个问题的答案可以改变一个特定的解决方案是否可行
4) 您也许可以使用像 RabbitMQ 这样的信使队列来帮助在不同的服务之间分配负载。您可以让多个服务同时从该队列中读取数据并执行操作……但这同样取决于您的应用实际将要执行的操作。
查看 AWS EC2 和 Elastic Beanstalk。您还可以获得一个简单的负载均衡器和 运行 nginx。祝你好运
这总是一个很难回答的问题。首先,您的应用 真的需要 在峰值时扩展到 200 万 API 请求吗?我问是因为很容易过度设计一个解决方案 'to deal with future scale',最终会出现一些问题,甚至无法很好地处理当前规模。
但假设您真的会有大量请求高峰,当前的微服务方法(或流行语?)是处理这些高需求时期的一种非常流行的方法。基本上,您将应用程序拆分为更小的独立服务(“微服务”),这些服务可以根据需要更轻松地进行扩展。
然后可以使用 Kubernetes or Amazon ECS.
之类的方法放大和缩小单个微服务以匹配负载
就 Spring 与此相关的位置而言,Spring 在 Github 上有一套名为 Spring Cloud - you'll notice Spring Cloud AWS there, too (although Spring Cloud in general can also work fine on bare metal servers, Docker, Kubernetes etc etc). A year ago I put together a simple Spring cloud/microservices demo 的便捷技术,这表明 Spring 有多么不同-powered 微服务可以组合在一起,您可能会发现它很有用。
微服务的另一个好处是,您可以相当容易地换出编写特定服务所用的语言,尤其是当微服务 'speak' 以通用格式(例如 JSON 通过 REST 请求)。因此,如果你有 10 个不同的微服务,全部由 Spring Boot 提供支持,但你发现其中一些用另一种语言编写的更好,你可以重写它们:只要它们以相同的方式发送和接收数据方式,那么您系统的其他部分就不需要关心了。
好的,这是很多流行语和新概念。如果我能澄清任何问题,请随时提问,但微服务 + kubernetes/AWS 是一种流行的解决方案。
但是,其他可能同样有效的方法是:
- Serverless - 在这里您可以使用一堆云提供商的工具和解决方案来为您的 Web 应用程序提供动力,包括 lambda 之类的东西,而不是将您的应用程序托管在传统的 server/VM。 This medium tutorial简单介绍了serverless。
- Monoliths - 这是一个传统的 Web 应用程序,它是一个单一的、庞大的、庞大的代码库,但这并不意味着你只能拥有它的一个实例 运行(即你仍然可以缩放它)。这个网站 is a successfully scalable 单体。
我正在用 Spring 制作一个 API 启动,这可能会有请求高峰。
让我们进入最坏的情况。想象一下,我突然有 200 万 API 个请求。
我该怎么做才能处理这个问题?
我阅读了一些关于队列和工作人员的内容,但我不知道这是否是最好的方法。
有什么方法可以用 AWS 实现吗?
你的问题很宽泛,因为有很多不同的解决方案:
1) 使用 负载平衡器 并拥有应用程序的多个实例
2) 使用 容器化工具,如 docker 和 kubernetes 以根据当前负载增加实例数量。您基本上可以按需扩展
3) 我们不知道您的应用程序实际做了什么:读重还是写重?用户会下载内容吗?这个问题的答案可以改变一个特定的解决方案是否可行
4) 您也许可以使用像 RabbitMQ 这样的信使队列来帮助在不同的服务之间分配负载。您可以让多个服务同时从该队列中读取数据并执行操作……但这同样取决于您的应用实际将要执行的操作。
查看 AWS EC2 和 Elastic Beanstalk。您还可以获得一个简单的负载均衡器和 运行 nginx。祝你好运
这总是一个很难回答的问题。首先,您的应用 真的需要 在峰值时扩展到 200 万 API 请求吗?我问是因为很容易过度设计一个解决方案 'to deal with future scale',最终会出现一些问题,甚至无法很好地处理当前规模。
但假设您真的会有大量请求高峰,当前的微服务方法(或流行语?)是处理这些高需求时期的一种非常流行的方法。基本上,您将应用程序拆分为更小的独立服务(“微服务”),这些服务可以根据需要更轻松地进行扩展。
然后可以使用 Kubernetes or Amazon ECS.
之类的方法放大和缩小单个微服务以匹配负载就 Spring 与此相关的位置而言,Spring 在 Github 上有一套名为 Spring Cloud - you'll notice Spring Cloud AWS there, too (although Spring Cloud in general can also work fine on bare metal servers, Docker, Kubernetes etc etc). A year ago I put together a simple Spring cloud/microservices demo 的便捷技术,这表明 Spring 有多么不同-powered 微服务可以组合在一起,您可能会发现它很有用。
微服务的另一个好处是,您可以相当容易地换出编写特定服务所用的语言,尤其是当微服务 'speak' 以通用格式(例如 JSON 通过 REST 请求)。因此,如果你有 10 个不同的微服务,全部由 Spring Boot 提供支持,但你发现其中一些用另一种语言编写的更好,你可以重写它们:只要它们以相同的方式发送和接收数据方式,那么您系统的其他部分就不需要关心了。
好的,这是很多流行语和新概念。如果我能澄清任何问题,请随时提问,但微服务 + kubernetes/AWS 是一种流行的解决方案。
但是,其他可能同样有效的方法是:
- Serverless - 在这里您可以使用一堆云提供商的工具和解决方案来为您的 Web 应用程序提供动力,包括 lambda 之类的东西,而不是将您的应用程序托管在传统的 server/VM。 This medium tutorial简单介绍了serverless。
- Monoliths - 这是一个传统的 Web 应用程序,它是一个单一的、庞大的、庞大的代码库,但这并不意味着你只能拥有它的一个实例 运行(即你仍然可以缩放它)。这个网站 is a successfully scalable 单体。