缓存信息以便快速获得http响应的最佳选择

时间:2018-08-25 18:57:23

标签: java spring http spring-boot caching

我正在开发一个侦听HTTP请求的Web服务。该服务必须非常快速地响应并处理可能的最大并发请求数。

该服务的一个端点带有2个请求参数(param1param2),用于验证某些信息然后发送响应。

我预定义了一些信息,这些信息将用于验证请求参数。例如:

  • 我知道param1被分配给assign1并具有属性prop1Param1也被分配给具有属性assign3的{​​{1}}。

  • 并将prop3分配给param2,并具有属性assign2

有了这些信息,当我收到HTTP请求时,我需要验证prop2是用param1还是assign1分配的,否则,我应该返回一个空响应。

显然,这种想法是避免对其进行硬编码,如果我可以在服务器运行时修改该信息,那将是很好的选择。

为了实现这一点,我知道两个现有的解决方案(可能还有更多):

  • 使用assign2,并在.yml文件中设置该信息,以便使用spring boot等占位符通过spring bean读取它们。问题是我将需要如果我想查看该.yml文件中所做的更改,请重新加载该应用程序,因此从技术上讲,我无法在服务器运行时修改缓存的信息。

  • 使用@Value(${param1})之类的嵌入式数据库,并使用select获得每个请求的信息。问题是我需要为每个请求进行选择(如果必须进行任何连接,则会增加响应时间)。但是我可以在服务器运行时修改信息。

我想知道哪种是“缓存”该信息并让服务非常快速的最佳选择,因为每个请求都被阻止。

我也在使用Spring Boot来提供该服务,但是如果您知道更好的Web容器,我愿意尝试一下。

1 个答案:

答案 0 :(得分:0)

您过早地进行了优化。

其中之一:“我需要非常快速地处理请求”和“处理尽可能多的请求”是模糊的性能标准。

您可以像这样更清晰地表达自己的目标:

  1. 我需要我的服务每小时处理99%的所有请求,并且延迟为50ms或更短。

  2. 我需要我的服务才能每秒处理1000个请求(或您需要的任何数量)

然后,您可以开始评估性能并根据需要进行优化。

当然,缓存结果是个好主意,您应该这样做。但是,如果您担心在同一服务器上运行的本地数据库会增加服务的延迟,那么您可能会发现情况并非如此。