跳到主要内容

博客

多语言基准:为正确的工作选择正确的工具

多语言基准测试如何帮助您为每个应用程序选择正确的堆栈 - 不是一种语言可以统治所有应用程序

  • Balinder Walia
  • 阅读约 1 分钟
  • Updated

简短易读的伴侣。要深入了解完整的架构 - 线束布局、决策矩阵、反模式以及如何分叉基准 - 请阅读长文。

您的组织在 2019 年选择了一个堆栈。您的工作负载没有。

大多数团队仍然为每项新服务标准化单一语言:Node 中的所有内容、Python 中的所有内容、Java 中的所有内容,或者仅在 Rust 上进行大胆的赌注。这种习惯是可以理解的——当堆栈统一时,招聘、CI 模板和安全审查都会变得更容易。问题是工作负载不均匀。 API 网关、夜间 ETL 作业、NGINX 边缘转换、JVM 微服务资产以及具有长期连接的聊天后端对运行时的不同部分产生压力。从走廊辩论或单个微基准中选出一个获胜者,最终会导致错误的工具承载错误的负载。

多语言基准是解药:一种可重现的工具和实时仪表板,可在上比较的八个运行时以及相同的HTTP 工作负载,因此架构师可以将证据与有界上下文相匹配,而不是默认堆栈偏差。

Polyglot Benchmarks — right tool, right job cover

它测量什么

公共仪表板比较NGINX njs、OpenResty Lua、Python (FastAPI)、Go (net/http)、Rust (Actix)、Bun、Java (Javalin / Jetty)和Kotlin (Ktor / Netty)跨七个综合测试,反映真实的 API 和边缘模式:纯文本基线、JSON 序列化、CPU 绑定斐波那契、字符串操作、请求检查、内部子请求 + 转换和路由逻辑。每个测试都会报告每秒请求数、平均延迟和尾部延迟(包括 P99)、从curl 到第一个字节的时间以及错误计数——在bench.sh完成时进行实时流式传输。

Java 和 Kotlin 与编译和脚本运行时并存,因此 JVM 商店可以看到 Javalin 和 Ktor 如何在相同的路线上与 Go、Rust、Bun 和 FastAPI 进行交易,而不是与挥手的“企业 vs 绿地”叙述。该工具位于工作流程示例/基准中:Docker Compose 服务、共享wrk配置文件(10 秒、4 个线程、100 个连接)以及仪表板使用的 JSON 结果。您可以为自己的候选人和热路径分叉它。

为什么这是一个决策框架,而不是排行榜

多语言基准测试不会永远为一种语言加冕。每个测试行的获胜者都会发生变化——这正是您在设计微服务时想要的。仪表板的结论部分将结果映射到用例(Lua/njs 中的边缘路由、Rust/Go 中的核心并发、Java/Kotlin 中的 JVM 服务、Python 中的速度)。这就是论文:设计的多语言,使用架构审查委员会的数据而不是意见。

Polyglot Benchmarks four-step approach: define workload, run harness, compare, decide
一帧中的四步方法:定义工作负载、运行线束、在实时仪表板上进行比较,然后通过 ADR 做出决定。

平台和工程主管的六大优势

  • 证据胜过意见— 将图表和配置附加到 ADR;通过测量运行来解决堆栈争论。
  • 特定工作负载的获胜者— 延迟敏感路径、批处理、边缘转换、JVM 资产获得不同的领先者。
  • 总体拥有成本— 原始 RPS 不够;权衡构建时间、图像大小、团队技能配合和运营负担。
  • 可重复的工作流程— 相同的存储库、相同的 Compose 文件、相同的 wrk 脚本;可在 CI 中重新运行。
  • 合法的多语言微服务— 每个服务边界使用不同的语言,无需感到羞耻或惊讶。
  • 降低风险— 在组织范围内授权之前获得亚军的原型。

Polyglot benchmarks workflow from problem spec to ADR

快速入门

  1. 在运行过程中打开实时仪表板(或在本地启动运行)。
  2. 克隆workflow-examples、cd benchmarks、docker compose up— 八种语言服务以及仪表板和工作台运行程序。
  3. 读取仪表板上的results.json卷,并将获胜者映射到您的工作负载行。
  4. 写入 ADR — 包括持续时间、线程、连接和硬件类别。

阅读完整版本

长文涵盖了完整的存储库布局、标准表、决策矩阵图、每个测试系列的案例模式(包括 Java 和 Kotlin)、反模式、限制以及可与 ARB 共享的 SEO 就绪片段。由TenthMatrix发布;基准测试网站托管于polyglot-benchmarks.fictionally.org。

#Rust #GoLang #Bunjs #Java #Kotlin #Lua #Python #njs #FastAPI #Javalin #Ktor #OpenResty #polyglot #benchmarks