该应用程序是作为 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个请求。完全消除“预热时间”