计算与网络
Yaogress
持久服务登记与域名路由
Yaogress 为内部 HTTP 服务维护持久登记,并按 Host 路由请求。服务名、域名规则和后端集合保存在同一条记录中:先查 Exact,未命中才查 Any,再固定一个后端完成流式交换。配置变化作用于后续请求,已经开始的交换继续使用原来的选择。
为同一服务维护多个域名入口 一条稳定服务记录可以关联多个明确域名后缀及同一组后端。修改时完整替换;任何一个路由键冲突都会保留原记录,避免出现只更新一部分入口的状态。
一条记录保存完整路由意图
维护者通过受保护的服务登记接口管理稳定的服务标识。每条记录包含服务名、完整域名选择和全部后端。后端可使用 HTTP 或 HTTPS,业务入口则是内部 HTTP;公共 TLS 加密与外部入口由独立运营方配置。
设置服务是一次完整替换,删除也作用于该 ID 的全部路由键。若新声明中任何一项与其他服务冲突,整个替换拒绝并保留旧记录。进程重启从持久数据恢复完整登记,不能用空集合代替不可读取的状态。
把一组域名与后端作为一个整体提交
接入一项服务时,维护者需要稳定服务 ID、服务名、完整域名选择以及全部后端地址。Exact 声明列出明确后缀,Any 则表达同名服务的其余合规后缀;二者不是连接失败后的主备关系。
变更前应从应用的实际入口需求整理完整记录,再一次提交。提交成功后可以读取当前记录核对配置,但一次较晚的读回并不能回答之前超时的提交究竟何时完成;它只是当前状态,也不能证明后端已能处理请求。
确定完整路由范围
明确服务名、所有域名后缀与整组 HTTP 或 HTTPS 后端,不把多个入口拆成互不一致的局部更新。
提交整条记录
任一路由键冲突都会拒绝此次替换,保留原记录及其全部绑定。先处理冲突,再决定新的完整声明。
用实际 Host 验证
从需要支持的完整域名发出请求,同时检查匹配服务、固定后端与业务响应。
先匹配完整域名,再固定目的地
请求通过 HTTP Host 指明主机名。其首个标签是服务名,余下部分作为域名后缀,例如 api.example.com 对应 api 与 example.com。Exact 只匹配明确列出的完整组合;Any 在同名 Exact 未命中时接纳其他合规后缀。
网关一次读取一致的登记快照,找到服务后只选择一个后端。Exact 已经命中时,连接失败不会转到 Any。原 Host、路径和查询保持应用原本的含义;路由不会删除、解码或重新组织应用路径。
| 选择 | 匹配规则 | 修改边界 |
|---|---|---|
| Exact | 服务名与列出的后缀组成完整域名 | 全部后缀共用一条服务记录和同一组后端。 |
| Any | 同名 Exact 未命中时匹配合规后缀 | 不能与 Exact 合并在同一条记录中。 |
| 无匹配 | 返回未登记服务的结果 | 不发起后端交换。 |
负载提示只影响一次选择
服务的全部已登记后端始终构成候选集合。显式启用的后端可以提供当前业务请求数;成功观察形成短期有效的内存样本。探测失败、过期或未启用,都只是没有可用提示,不会移除转发候选。
多个后端时随机选取两个不同候选。只有两者都有新鲜且启用的样本,才比较请求数并偏向较低者;否则在这两个候选之间随机选择。缺失样本不是零负载,已提供样本的端点也没有默认优先权。
| 情况 | 选择行为 | 保持的边界 |
|---|---|---|
| 只有一个后端 | 直接选择该后端 | 无需等待探测。 |
| 两个候选都有有效样本 | 比较请求数;相同时随机 | 只使用本次取得的两个样本。 |
| 任一候选缺少有效样本 | 在两者之间随机 | 不虚构负载,也不缩减候选集合。 |
转发保留流,失败保留原来的含义
请求与响应按原生 HTTP 流逐段转发,并通过背压限制在途工作:接收端来不及读取时,发送端随之放慢,无需收集完整请求体或响应体。网关负责每一跳的连接与头部处理,应用认证、Cookie、会话和跨域策略仍由应用或外部入口决定。
可能已经发出的请求不会自动重放或改投其他后端。502 也不能证明后端没有收到请求或产生效果。网关将响应交给入口传输后,后续响应体传输失败表现为不完整响应,不会另造一个状态替换已经交出的响应。
先区分没有路由、转发失败与业务拒绝
定位失败时,先看请求是否取得匹配服务,再看冻结的后端和错误来源。没有匹配路由、网关建立上游连接失败、后端返回业务错误,以及响应体中途结束,属于不同阶段,后续处理也不同。
对可能产生写入的业务,请求失败后应由应用沿原业务身份查询结果。网关不保存业务幂等规则,也不会用更换后端或退到 Any 来消除不确定性。负载样本只用于一次候选选择,不能充当健康检查或安全重试依据。
可以确认:诊断记录给出原选择
命中服务与选定后端可以解释该请求走向,前提是仍区分网关产生的错误与后端原响应。
不能推断:502 表示业务没有执行
请求可能已经到达后端或产生效果。失败状态不授予重新执行写入的权限。
继续核对:负载提示缺失或过期
候选仍然保留;缺失不能当作零负载,也不能解释为端点已被摘除。
以冻结的路由事实解释请求
业务诊断保留请求域名、命中的服务、选定后端、方法和时间关系,路径与查询整体脱敏,不记录请求头、Cookie 或正文。网关生成的错误有专用标记,后端自己的错误响应则保留业务来源,二者不能只凭状态码区分。
设计中的验证覆盖完整登记替换、Exact 优先、样本过期、双向流式传递、失败后的不重放和诊断脱敏。运行看板统计已存储的请求观察,缺失区间不补零,也不宣称完整流量或实时健康;具体结果仍需实际记录支持。