Java + Vert.x在后端挑战中击败Rust?


该应用程序是作为 Rinha de Backend 2023 Q3 挑战说明的解决方案而构建的。

挑战要求
这些说明可在Github中找到。主要要求是:

  • 1 个 nginx(负载均衡器)和 2 个应用程序实例
  • 1 个数据库(PostgreSQL 或其他)
  • 1.5 CPU 和 3 GB 内存用于部署所有组件
  • 创建资源
  • 通过 id 获取资源
  • 通配符搜索资源

此处使用gadling.io定义压力测试,并在创建资源执行数据库插入时将速度提升至 600 RPS。

目前获胜者是 Rust+Redis+PosgreSQL


Java解决方案(源码点击标题)

  • 默认 PostgreSQL 配置。
  • 启用保持活动的标准 Nginx 代理。
  • 没有 Redis/或缓存。
  • 没有队列,也没有 SQL 批处理。
  • 具有默认设置的 Vert.x 反应式框架。
  • 在 Java 20 上使用 GraalVM 构建本地镜像。

在 Apple M2 Pro 上进行了本地基准测试比较,因此我预计它的运行速度会比使用云实例稍快一些。

令人惊讶的是,插入了50996 条记录,响应时间为 120ms @ p99,请求总数为 119412(全部成功)。
Rust 解决方案产生了 47010 条记录,响应时间为 37284ms @ p99,请求总数为 115005。

虽然这个解决方案的吞吐量比Rust仅提高了 9% 左右,但它使用更少的资源(CPU、内存)更高效地完成工作,并产生更低的平均延迟和尾部延迟。

最后一轮
本轮插入记录63450条,响应时间38ms@p99,总共145369个请求。完全消除“预热时间”