java - 使用外部数据库处理非常大的吞吐量

标签 java spring-boot queue high-volume

我正在寻找构建一个 Java11 Spring 启动应用程序。该应用程序要处理非常大的吞吐量(会有峰值和低流量)

应用程序的幸福路径如下所示。

happy path

从概念上讲,它相当简单。步骤大致如下

  • 接受传入的 POST 请求。保存端点处的 DTO 对象。
  • 应用程序将验证 DTO,如果无效则返回相关错误消息。
  • 转换为数据库实体对象
  • 将实体保存到 Postgres 数据库。

我们对这个应用程序的潜在问题是,它将根据每个请求进行数据库保存,并进行大量单独的保存。数据库连接池可能会很快耗尽所建立的更多连接。

我的替代方法如下所示

internal queue

一旦传入的 DTO 通过验证并在内存队列中排队,我希望返回状态 200。
这里没有外部阻塞,如果数据库出现故障,这意味着内部队列将提供一些冗余。

一些问题/想法

  • 这看起来是个好方法吗?我应该避免哪些陷阱吗? 密切注意,提防,小心?
  • 也许您已经在更好的/中解决了类似的问题 不同的方式?
  • 响应式(Reactive)流有什么帮助吗?
  • 为此我应该使用哪些内部 Java 库?我的 想法是使用Java的LinkedList Queue<SomeDto> myQ = new LinkedList<SomeDto>(); )用于内部排队?

最佳答案

如果应用程序因内部队列中的数据而失败,会发生什么情况?或者内存中的保存操作是否溢出?

如果您想构建更强大的东西,您可以考虑使用事件日志解决方案(例如基于 Kafka),其中消费者填充数据库(Kafka 将取代您的内部队列)。

但是,在这里很难真正回答您的问题,因为必须考虑许多其他因素。

我建议你读一本类似Designing Data-Intensive Applications的书:这绝对是一个宝贵的资源,它将帮助您根据您的需求和环境设计可靠的解决方案。

关于java - 使用外部数据库处理非常大的吞吐量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56755559/

相关文章:

java - OS X sleep 后 Java 客户端无法访问 Solr 服务器

Python 进程完成

java - Spring Security - 注册用户后自动登录不起作用

java - Spring Boot应用程序定期运行方法

.net - 在 F# 中使用 System.Collections Queue 类时出现类型参数错误

c - 为队列实现删除函数时出现原型(prototype)声明错误

java - Android:如何从蓝牙设备控制音乐服务播放/暂停?

java - Xerces Java 解析器可以从 ClassPath 加载资源并使用 Jar 可执行文件运行它吗?

Java -install 与 PATH

java - 如果我只是添加一个新的子对象 java hibernate spring ,可以保存父对象吗?