You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Envoy接收请求的时间或让其将该信息注入请求?

解决方案

方法一:通过Envoy Lua过滤器注入请求接收时间

Envoy支持通过Lua过滤器在请求转发给后端服务前,将自身接收请求的时间注入到请求头中,具体配置步骤如下:

  1. 修改Envoy配置,在HTTP过滤器链中添加Lua过滤器,注入请求起始时间:
# Envoy配置片段
http_filters:
  - name: envoy.filters.http.lua
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua
      inline_code: |
        function envoy_on_request(request_handle)
          -- 获取Envoy接收请求的毫秒级时间戳
          local start_time_ms = request_handle:start_time()
          -- 将时间戳添加到自定义请求头
          request_handle:headers():add("X-Envoy-Request-Start-Time", tostring(start_time_ms))
        end
  - name: envoy.filters.http.router
    typed_config: {}
  1. Flask服务中读取该请求头,用Envoy的接收时间替代服务处理时间做验证:
# Flask代码片段
from flask import Flask, request

app = Flask(__name__)

@app.route('/node/join', methods=['POST'])
def node_join():
    # 获取客户端发送的request_time(假设为秒级Unix时间戳)
    client_request_time = float(request.args.get('request_time'))
    # 获取Envoy注入的接收时间(毫秒级转秒级)
    envoy_start_time = float(request.headers.get('X-Envoy-Request-Start-Time')) / 1000
    # 验证时间误差是否在2秒内
    if abs(client_request_time - envoy_start_time) <= 2:
        return "节点加入成功", 200
    return "时间验证失败", 403

关键注意事项

  • 确保所有节点(包括运行Envoy的节点)时钟同步误差不超过2秒,否则仍可能出现验证失败。
  • 若你的request_time是毫秒级时间戳,无需做除以1000的转换,直接对比即可。

替代思路:优化Gunicorn队列压力

如果不想修改Envoy配置,也可以通过调整Gunicorn参数减少请求等待时间:

  • 增加worker数量(比如--workers 8),提升并行处理能力。
  • 调整--backlog参数,控制队列长度,避免请求长时间排队。
    但这种方法无法彻底解决高负载下的排队问题,优先级低于Envoy注入时间的方案。

内容的提问来源于stack exchange,提问作者Zvi Rosenfeld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 05:45:42