11 KiB
11 KiB
Changelog
Unreleased
- 新增独立
transport/http2实验 Runner:支持 h2c/TLS h2、连接上限、全局请求并发闸门、GOAWAY 排空、RST_STREAM 单流取消和生命周期统计;不改变 native HTTP/1.1 默认路径。 - HTTP/2 实验 Runner 增加标准 1 MiB 头部上限、默认 8 MiB 请求体上限、128 路同连接多路复用、2 MiB 慢读取流控验收、协议错误、RST_STREAM 和 GOAWAY 帧计数;已声明超限请求在进入业务 handler 前返回 413。
- 新增可配置时长的 HTTP/2 TLS soak:默认 3 秒,Linux 验收可通过
GO_OMNI_HTTP2_SOAK_DURATION=30m覆盖,混合验证 128 路 stream、慢 handler、请求体、Keep-Alive 和退出回收。 - HTTP/2 soak 每 15 秒输出请求/失败数、Go 堆、Linux RSS、goroutine、FD 和协议统计;校验响应协议、内容和独立请求 ID,不再忽略压测期限附近已发出请求的失败。
- 补充 HTTP/2 慢响应流窗口为零时的隔离与恢复验收:同连接 204、另一连接带 body 响应、WINDOW_UPDATE 恢复发送及 RST_STREAM 释放请求槽位;补充 TLS 握手未完成时的连接上限拒绝、握手超时回收和正常请求恢复。
- 新增
scripts/verifyHTTP2.py,固定在 Go 1.25 Linux 容器中运行 HTTP/2 TLS 长测;默认使用普通模式,--race默认运行 60 秒。容器默认限制为 2 核、2 GiB 内存、256 个进程/线程,带总时限、中断清理和日志大小限制。 - 完成 Linux amd64 单 TLS 连接、128 个 worker 的 30 分钟 HTTP/2 长测:58,102,476 次请求,0 失败与协议错误,采样 RSS 峰值约 22.6 MiB(包含客户端和服务端),退出后连接/请求/FD 回收;保留原始日志和 120 份采样。多连接、持续慢客户端与 HTTP/2 回源联调仍是后续门槛。
- native TLS 明确限制 ALPN 为
http/1.1:缺省自动宣告该协议,误配置h2等未实现协议时在启动阶段报错。 - native
Server.Stats()新增连接和请求过载拒绝计数;新增可信代理配置,访问日志只在 socket 对端属于配置网段时解析X-Forwarded-For。 - 新增 transport-neutral
metrics包,支持请求数、错误数、in-flight、累计耗时和状态分布,并可直接注册/metrics接口。 - native 新增
Server.Stats(),提供 accepted connections、active connections 和 active requests 生命周期指标。 - native 请求体改为流式读取,Content-Length 与 chunked body 不再在进入 Handler 前整体复制到内存;保留大小限制、读超时、trailer 校验和 Keep-Alive 排空。
- 统一标准库与 native 的真实 TCP benchmark,增加固定并发档位、响应状态与读写错误检查。
- 新增独立进程并发与长连接内存测量工具,记录成功吞吐、P95/P99、服务端分配、空闲连接堆内存和回收情况;修正并行
ns/op与客户端/服务端混合分配的解释。 - 加固 native HTTP/1.1 解析边界:校验 Host、重复 Content-Length、Connection token、Transfer-Encoding、控制字符和响应头名称;补充 HTTP/1.0 Keep-Alive、HEAD、204 以及异常请求测试。
- native 支持带 trailers 的 chunked 请求体,并继续通过
MaxBodyBytes、读超时和头部上限控制解析内存与连接占用。 - native 响应实现
http.Flusher:HTTP/1.1 流式响应自动使用 chunked framing,普通响应继续自动生成Content-Length。 - native 在长 Handler 运行期间监测客户端断开并取消请求 context,流式写失败同步取消;短请求延迟启动监测,管线数据保留给下一次请求。补充断开、监测退出和长连接复用验收。
- native 增加
ServeTLS/RunTLS和TLSConfig启动入口,App.RunWith 可以直接启用 TLS;补充真实 TLS 客户端握手、请求和优雅退出验收。 - native 请求补齐
Request.TLS连接状态;Linux/arm64 容器通过全量 race、vet、build,以及 TLS 并发、Keep-Alive、慢握手和连接上限回收验收。 - 补充慢请求体超时、大请求体和同连接管线请求验收,确认流式 body 读取超时会取消请求并关闭连接,连续请求不会串线。
- 补充
MaxConnections满载拒绝与槽位释放验收,确认请求完成后连接容量可再次使用。 - 补充
MaxConcurrentRequests过载恢复验收,确认 503 拒绝后请求槽位释放并可继续处理新请求。 - 增加高频建连/断连的状态池 churn 验收,覆盖连接对象回收与容量复用。
- 新增 Linux Nginx 反向代理验收脚本,覆盖 native TLS、Keep-Alive、上游超时和优雅关闭。
v0.6.0-preview
- native 网络层完成流式 Content-Length / chunked body、慢请求头、慢 body、慢 TLS 握手和 TLS 请求元数据验收;Handler 可在 body 未完全到达时开始读取,超时、畸形和超限 body 会被拒绝并关闭连接。
- 将 native 连接 churn race 验收扩展为 16 个 worker、3,200 次建连/断连,并覆盖明文与 TLS 的连接上限、Keep-Alive 和槽位回收。
- perfcheck 支持最长 30 分钟持续场景,新增 Linux 文件描述符采样;固定记录服务端堆、goroutine、连接数、accept 数和 FD 回收状态。
- 新增
scripts/verifyLinux.py,在golang:1.25Linux 容器内统一执行 race、vet、build 和可选 TLS / 非 TLS 压测。 - 完成 Linux/arm64 30 秒高并发回归:128 并发流量、512 条空闲连接,TLS 与非 TLS 均为 0 错误,连接、goroutine 和 FD 回收正常;原始报告见
performance/linuxSoak.json和performance/linuxSoakTLS.json。
v0.5.0
- 新增
transport/native第一版自研 HTTP/1.1 服务端,接管 TCP 监听、连接、Keep-Alive、请求解析、响应写回和优雅关闭。 - 新增
App.RunWith/omni.Runner启动边界;native 通过标准http.Handler接入,现有 Handler、Service 和 Repository 无需修改。 - native 支持
Content-Length/ chunked 请求体、请求头 / 请求体限制、读写超时和服务关闭时的请求取消;通过对象池和MaxConnections/MaxConcurrentRequests控制高并发内存。 omni.New()默认仍使用只依赖标准库的transport/nethttp路由,native 作为显式启用的网络层预览实现。
v0.4.0
- 破坏性变更:移除 Gin 适配器及其全部依赖,
omni.New()默认使用只依赖标准库的transport/nethttp。 - 移除 Gin 专属的
Config.Mode/WithModeAPI;网络层运行模式由具体适配器或启动层自行配置。 - 公共
httpx.Router、transport/transporttest.Run和omni.NewWithRouter保留,自研网络层无需修改业务 Handler / Service 即可接入。 - benchmark 改为标准库路由和完整 GoOmni 请求链,新增
scripts/verifyPerformance.py作为 race、vet、build 和性能基线入口。 - 远程业务试用、脚手架、适配器契约和 MySQL 验收全部迁移到
v0.4.0。
v0.3.1
- 新增独立业务模块验收
scripts/verifyBusiness.py:从远程v0.2.0升级到v0.3.1,验证无本地 replace、配置加载、结构化日志、requestId、CRUD、校验错误、业务错误和优雅退出。 - 脚手架与各项远程验收脚本默认跟随
v0.3.1,新项目会固定到最新补丁版本。
v0.3.0
- 新增公共适配器验收套件
transport/transporttest.Run和远程消费验收脚本scripts/verifyTransports.py。Gin、nethttp 使用同一套路由与业务处理链测试,并通过完整用户 CRUD 与 race 验证。 - 统一参数、分组、方法、URL 解码、路由优先级及 404/405 规则;Gin 405 的 Allow 由适配层计算,避免方法树回退状态带入无关方法。
- 统一路由注册校验;非法路径、重复路由、参数名冲突和 catch-all 冲突在注册时 panic。
App.Handle/RouterGroup.Handle支持在完整业务中间件链内显式注册 HEAD、OPTIONS 与扩展方法。- JSON 在提交响应前编码,编码失败可正确返回统一 500;通过 Context 已提交的响应不会因后续错误、panic 或重复响应追加内容,访问日志保留实际提交的状态。
- 验证 requestId 与业务日志关联、认证授权短路、请求并发隔离、context 值与 deadline 保留,以及真实客户端取消传入 Service。
- 升级行为调整:Gin 不再自动重定向尾部斜杠;nethttp 不再忽略尾部斜杠,通配参数包含开头的
/,Any 收敛为九种标准方法。HEAD 不自动回退 GET,其他方法需显式注册。404/405 为统一纯文本响应,405 附排序后的 Allow。 gin.NewWithEngine应用 GoOmni 路由策略;原生 Gin 扩展与 Raw 流式响应不属于可移植契约。详见transport/README.md。- 新增业务试用验收
scripts/verifyBusiness.py:独立目录内固定远程版本,执行v0.2.0→v0.3.0升级,验证生成业务服务的配置、日志、requestId、CRUD、参数校验、错误映射和优雅退出。
v0.2.0
- 新增
go-omni new --database mysql,生成数据库配置、MySQL Repository、ServiceContext、schema.sql和数据库就绪探针;默认仍使用内存存储。 - 两种存储模式的脚手架均提供完整 CRUD、分页、输入校验与统一响应。新生成项目的
POST /users从直接返回用户对象改为标准响应封装,用户对象位于data。 - MySQL 启动时检查连接和表结构,失败时清理连接池;数据库停机后 readiness 返回 503,恢复后自动重新检查。
- MySQL Repository 支持
*sql.DB和*sql.Tx,可在同一事务中复用业务查询。 - 修复
MaxIdleConns=0未生效的问题,数据库健康检查增加超时限制。 - 新增隔离 MySQL 容器验收脚本,覆盖真实 CRUD、事务提交和错误/panic/取消回滚、持久化、资源清理及数据库停机恢复。
v0.1.1
- 修复脚手架生成项目固定依赖不存在的
v0.0.0;远程安装的 CLI 默认使用自身版本,支持--framework-version指定完整版本号。 - 显式远程版本禁用自动本地替换;本地替换路径支持空格,并按精确 module path 识别框架目录。
- 生成项目通过
signal.NotifyContext接入优雅退出,启动过程中的错误会先执行 defer 清理再报告。 App.Run自动处理SIGINT/SIGTERM;RunContext仍由调用方控制,退出超时会关闭活跃连接。- 增加请求排空、超时取消、启动失败清理测试,以及远程脚手架和真实进程信号验收脚本。
v0.1.0
- 首个可试用版本:应用生命周期、HTTP 抽象、Gin 与标准库路由适配器、统一响应与错误。
- 提供配置、日志、校验、认证接口、数据库基础能力、健康探针和项目脚手架。