我正在开发一个监听 HTTP 请求的 Web 服务。该服务必须非常快速地响应并处理尽可能多的并发请求。
该服务有一个带有 2 个请求参数(param1
和 param2
)的端点,用于验证某些信息然后发送响应。
我有一些预定义的信息,我将使用这些信息来验证请求参数。例如:
我知道
param1
已分配给assign1
并且具有属性prop1
。Param1
也被分配给assign3
,它具有属性prop3
。param2
被分配给assign2
并具有属性prop2
。
有了这些信息,当我收到一个 HTTP 请求时,我需要验证 param1
是否分配了 assign1
或 assign2
,否则,我应该返回一个空的响应。
显然,这个想法是为了避免对其进行硬编码,如果我可以在服务器运行时修改该信息,那就太好了。
为了实现这一点,我知道两个现有的解决方案(可能还有更多):
使用
spring boot
,并在 .yml 文件中设置该信息,以便使用@Value(${param1}) 等占位符通过 spring bean 读取它们
等问题是,如果我想查看在该 .yml 文件中所做的更改,我将需要重新加载应用程序,因此从技术上讲,我无法在服务器运行时修改缓存信息。使用像
H2
这样的嵌入式数据库,并使用 select 获取每个请求的信息。问题是我需要为每个请求进行选择(如果我必须进行任何连接,则会增加响应时间)。但是我可以在服务器运行时修改信息。
我想知道哪个是“缓存”该信息的最佳选择,并让服务在每个请求都被阻塞时非常快。
我也在使用 spring boot 来提供该服务,但如果您知道任何更好的 Web 容器,我愿意尝试一下。
最佳答案
您过早地进行了优化。
其中之一:“我需要非常快地处理请求”和“处理尽可能多的请求”是一种模糊的性能标准。
您可以像这样更清楚地表达您的目标:
我需要我的服务每小时处理 99% 的所有请求,延迟不超过 50 毫秒。
而且我需要我的服务能够每秒处理 1000 个请求(或您需要的任何数量)
然后,您可以开始衡量性能并根据需要进行优化。
当然,缓存结果是个好主意,您应该这样做。但是,如果您担心在同一台服务器上运行的本地数据库会给您的服务增加显着的延迟,您可能会发现情况并非如此。
关于java - 缓存信息以获得快速 http 响应的最佳选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52020363/