首页 / 资讯中心 / 文章详情

基于 silverlining 的 Go 底层 HTTP 框架基准测试实战指南

基于 silverlining 的 Go 底层 HTTP 框架基准测试实战指南 ★ FEATURED ARTICLE
性能测试测试后端开发者工具【免费下载链接】FrameworkBenchmarksSource for the TechEmpower Framework Benchmarks project项目地址https://gitcode.com/gh_mirrors/fr/FrameworkBenchmarks点击查看免费下载导读本文以 frameworks/Go/silverlining 目录为核心系统讲解 TechEmpower FrameworkBenchmarks 项目中 Go 底层 HTTP 框架 silverlining 的基准测试实现。你将掌握如何用 silverlining 的ContextAPI 完成plaintext与json两个基准测试端点、如何通过-prefork参数切换多进程复用端口模型、如何阅读benchmark_config.json与config.toml的测试元数据以及两个容器镜像如何构建出默认单进程与 prefork 多进程两种测试变体。silverlining 在 FrameworkBenchmarks 中的角色silverlining 是一个面向 Go 语言的低级low-levelHTTP 框架。与引入大量抽象、路由中间件体系或 ORM 的框架不同它直接暴露请求上下文与响应写入接口把控制权完全交给开发者。正是这种零封装开销的定位使它成为本仓库 Go 语言阵营中 Platform 分类、无数据库、Raw ORM 的代表性测试用例。从仓库中的测试元数据可以清晰看到它的定位frameworks/Go/silverlining/benchmark_config.json字段值含义approachRealistic贴近真实生产场景的实现方式classificationPlatform归类为平台级框架databaseNone不依赖数据库ormRaw直接手写数据访问/输出无 ORMwebserverNone框架自带 HTTP 服务无需外部 Web 服务器languageGoGo 语言实现versusgo与 Go 标准库/同类实现对比核心实现main.go 路由与响应启动参数解析入口文件 通过标准库flag包定义了两个运行时参数var BindAddr string var prefork *bool func init() { flag.StringVar(BindAddr, bind, :8080, set bind host) prefork flag.Bool(prefork, false, use prefork) flag.Parse() }-bind监听地址默认:8080对应测试配置中port: 8080-prefork是否启用 prefork 多进程模式默认false。Handler 与两条基准路由核心路由逻辑 完全围绕 README 中列出的两个测试 URL 展开Handler : func(r *silverlining.Context) { switch string(r.Path()) { case /plaintext: r.ResponseHeaders().Set(Content-Type, text/plain) r.WriteFullBodyString(200, Hello, World!) case /json: type Message struct { Message string json:message } msg : Message{Message: Hello, World!} r.WriteJSON(200, msg) default: r.WriteFullBody(404, nil) } }这段代码揭示了 silverlining 的几个关键 API 用法r.Path()读取请求路径作为路由匹配依据r.ResponseHeaders().Set(...)设置响应头这里显式声明Content-Type: text/plainr.WriteFullBodyString(status, body)一次性写入完整响应体字符串形式r.WriteJSON(status, struct)直接序列化 Go 结构体为 JSON 并写出——从 src/go.mod 可以看到框架内部依赖github.com/goccy/go-json v0.10.5完成高性能 JSON 编码未匹配路径返回404空响应体。单进程与 prefork 两种服务启动方式主流程 依据-prefork标志选择启动模型var err error if *prefork { var id int id, err silverlining.PreforkChildID() ... if id 0 { log.Println(Starting prefork leader process) } else { log.Printf(Starting prefork replica process %d, id) } err silverlining.ListenAndServePrefork(BindAddr, Handler) } else { err silverlining.ListenAndServe(BindAddr, Handler) }默认模式ListenAndServe单进程提供服务prefork 模式调用PreforkChildID()获取当前进程编号——编号0为 leader 进程其余为 replica 工作进程随后通过ListenAndServePrefork让多个进程共享同一监听端口。从依赖github.com/libp2p/go-reuseport v0.4.0可以推断框架利用端口复用特性实现多进程共享监听从而在多核环境下提升并发吞吐能力。这一设计也直接对应仓库中的两个镜像与两个测试变体详见下文。测试端点的验证标准README 只给出两个 URL而仓库的测试工具链定义了它们必须满足的严格验证规则json 端点json 测试类型 的verify()要求响应必须可被json.loads反序列化toolset/test_types/verifications.py是包含message键的 JSON 对象且值忽略大小写后必须等于hello, world!verify_helloworld_object状态码必须为 200必须携带Server、Date、Content-Type头以及Content-Length或Transfer-Encoding之一Content-Type必须匹配^application/json(; ?charset(UTF|utf)-8)?$内容类型校验。同时若 JSON 响应体超过最小必需的 26 个字节出现多余键或冗余空白会被标记为 warning因为多余的字节会拖慢基准成绩。plaintext 端点plaintext 测试类型 的verify()要求响应体忽略大小写必须包含hello, world!若返回的字节数超出所需长度会产生 warning——这正是WriteFullBodyString(200, Hello, World!)精确返回 13 字节的原因状态码 200Content-Type匹配^text/plain(; ?charset(UTF|utf)-8)?$。压测方式两类测试在通过验证后分别使用不同的 wrk 压测脚本json使用 toolset/wrk/concurrency.sh按配置的多个并发级别逐级加压包含 Primer-d 5 -c 8和 Warmup 阶段plaintext使用 toolset/wrk/pipeline.sh 与 toolset/wrk/pipeline.lua通过 16 级 HTTP pipelining 深度测量框架的原始吞吐上限。测试元数据benchmark_config.json 与 config.tomlbenchmark_config.jsonbenchmark_config.json 声明了silverlining框架下的两个测试变体defaultdisplay_name为silverlining运行默认单进程模式preforkdisplay_name为silverlining [prefork]运行-prefork多进程模式。两个变体都指向/json与/plaintext监听 8080 端口其余元数据完全一致。这种同一框架、多运行模式的组织方式让基准可以横向对比单进程与多进程端口复用模型在同一硬件上的差异。config.tomlconfig.toml 是同一元数据的 TOML 表达按[main]与[prefork]两个测试段展开字段含义与 JSON 版本一一对应urls.plaintext、urls.json、approach、classification、database、orm、versus等。该文件与 JSON 配置共同服务于工具链的元数据解析例如 toolset/utils/benchmark_config.py 负责在frameworks根目录下收集各框架的测试配置。容器镜像与构建流程仓库为该框架提供了两个 Dockerfile均基于docker.io/golang:1.24.2默认镜像 silverlining.dockerfilesilverlining.dockerfile 内容如下FROM docker.io/golang:1.24.2 WORKDIR /silverlining COPY ./src /silverlining RUN GOAMD64v3 go build -ldflags-s -w -o app . EXPOSE 8080 CMD ./appprefork 镜像 silverlining-prefork.dockerfilesilverlining-prefork.dockerfile 与默认镜像的唯一差异在启动命令CMD ./app -prefork两个镜像共用的构建细节GOAMD64v3针对支持 AVX2 等指令集的现代 x86-64 CPU 启用更积极的指令优化-ldflags-s -w去除符号表与 DWARF 调试信息缩小二进制体积工作目录/silverlining直接拷贝src目录后以app为可执行文件名构建暴露 8080 端口与测试配置一致。运行与验证在本地复现该测试的完整流程为构建默认镜像并启动docker build -f frameworks/Go/silverlining/silverlining.dockerfile -t silverlining . docker run -p 8080:8080 silverlining验证两个基准端点curl http://localhost:8080/plaintext # 期望输出 Hello, World! curl http://localhost:8080/json # 期望输出 {message:Hello, World!}若需对比 prefork 模式使用 silverlining-prefork.dockerfile 构建并运行即可获得多进程端口复用变体的测试结果。运行时会输出Listening on http://localhost:8080默认模式或Starting prefork leader process/Starting prefork replica process Nprefork 模式便于确认当前处于哪种启动模型。小结silverlining 在本仓库中以极简实现 双模式镜像的方式为 TechEmpower 基准提供了 Go 底层 HTTP 框架的代表性数据/plaintext使用WriteFullBodyString精确返回 13 字节纯文本/json使用WriteJSON序列化结构体两者共同覆盖了框架在最原始响应路径下的性能基线而-prefork模式则通过多进程端口复用展示了横向扩展对高并发场景的增益。其完整源码、双 Dockerfile 与双测试变体配置都是复现或扩展该基准实验的现成起点。赞分享性能测试测试后端开发者工具【免费下载链接】FrameworkBenchmarksSource for the TechEmpower Framework Benchmarks project项目地址https://gitcode.com/gh_mirrors/fr/FrameworkBenchmarks点击查看免费下载相关推荐三步跑起来免费的打字练习工具qwerty-learner 边背单词边练英文手速三步跑起来免费的打字练习工具qwerty learner 边背单词边练英文手速 中文敲得飞快英文单词却怎么也拼不对qwerty learner 是一款免费前端教育Dgraph GraphQL 层 custom HTTP 查询基准测试与性能剖析框架实战指南Dgraph GraphQL 层 custom HTTP 查询基准测试与性能剖析框架实战指南 导读 Dgraph 的 GraphQL 层支持通过 custo数据库图数据库分布式数据库后端Apache Ignite性能测试指南基于Yardstick框架的基准测试Apache Ignite性能测试指南基于Yardstick框架的基准测试 引言 在分布式系统开发中性能测试是验证系统能力的关键环节。Apache Igni数据库分布式数据库后端上一篇CANN/asc-devkit寄存器对齐存储API下一篇Crater数据库索引优化查询性能提升的实战技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站