【问题标题】:Best option to cache information in order to have a fast http response缓存信息以获得快速 http 响应的最佳选择
【发布时间】:2019-01-31 20:57:39
【问题描述】:

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

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

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

  • 我知道param1 已分配给assign1 并具有prop1 属性。 Param1 也被分配给具有prop3 属性的assign3

  • param2 被分配给assign2 并具有prop2 属性。

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

显然,这个想法是为了避免对其进行硬编码,如果我可以在服务器运行时修改该信息,那就太好了。

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

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

  • 使用像H2 这样的嵌入式数据库,并使用选择获取每个请求的信息。问题是我需要为每个请求进行选择(如果我必须进行任何加入,它会增加响应时间)。但是我可以在服务器运行时修改信息。

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

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

【问题讨论】:

    标签: java spring http spring-boot caching


    【解决方案1】:

    你过早地优化了。

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

    你可以这样更清楚地表达你的目标:

    1. 我需要我的服务每小时处理 99% 的所有请求,延迟不超过 50 毫秒。

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

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

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

    【讨论】:

    • 我可以确认,对于一个空/几乎是空的表,即使在我的笔记本电脑上安装了默认的 mysql,SELECT 请求也几乎不会持续超过 1 毫秒,通常在 200-400 纳秒左右。对于像 H2 这样的嵌入式数据库,我猜它甚至可能低于 100 纳秒,所以它可能足够快,可以用于您的应用程序。
    • 你完全正确。这里的问题是哪个是快速处理大量并发请求的最佳选择。这是我唯一的要求。注:仅供学习使用,不用于生产或任何公司。例如,如果您被问及我的要求,您将如何进行?您会使用哪些技术来实现这一目标?
    • 您首先定义您的需求。每秒可以处理 1000 次请求的系统通常足以满足 99% 的用例。对于 Web 服务,通常 100-200 毫秒的延迟是完全可以接受的。 10 到 20 毫秒内的任何事情都将是一项了不起的壮举,然后您开始遇到更多麻烦,因为与您的服务的连接成为瓶颈。..
    • 但不要开始微优化。你无法优化你无法衡量的东西。仪器、记录指标并根据需要进行优化。并设定切合实际的绩效目标!
    • 好的,根据您的系统定义(每秒 1000 个请求和 100-200 毫秒的延迟),哪个是最好的“架构”?
    猜你喜欢
    • 2018-03-16
    • 2016-07-10
    • 2023-03-17
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    相关资源
    最近更新 更多