【发布时间】:2019-07-04 03:11:58
【问题描述】:
我正在寻找构建一个 Java11 Spring 启动应用程序。该应用程序用于处理非常大的吞吐量(会有高峰和低流量)
应用程序的快乐路径如下所示。
从概念上讲,它相当简单。步骤大致是这样的
- 接受传入的 POST 请求。保存端点处的 DTO 对象。
- 然后应用程序将验证 DTO 并在它无效时返回相关的错误消息。
- 转换为数据库实体对象
- 将实体保存到 Postgres 数据库。
我们对这个应用程序的潜在问题是它会为每个请求进行数据库保存,它会保存很多单独的保存。数据库连接池可以快速用完更多的连接。
我的替代方法如下所示
一旦传入的 DTO 通过验证并在内存队列中排队,我希望返回状态 200。
这里没有外部阻塞,如果数据库出现故障 - 这意味着内部队列将提供一些冗余。
所以一些问题/想法
- 这看起来像一个好方法吗,我应该有什么陷阱吗? 密切注意,提防,小心?
- 也许您已经以更好的方式解决了类似的问题 / 不同的方法?
- 反应式流是否有帮助?
- 我应该为此使用哪些内部 Java 库?我的
是否考虑使用 Java 的 LinkedList
Queue<SomeDto> myQ = new LinkedList<SomeDto>(); )进行内部排队?
【问题讨论】:
-
您的整个前提是基于您的连接池连接不足。您是否挑战了这个前提或证实了这确实发生了?数据库通常每秒能够处理多个事务,具体取决于您使用的硬件。此外,如果没有可用的连接,像 Hikari 这样的连接池将默认等待最多 30 秒。如果你不依赖长事务,你应该问问自己增加的复杂性是否值得。
标签: java spring-boot queue high-volume