cd ..
~/articles / high-concurrency-api-gateway
Engineering team building an API gateway

从零构建一个高并发 API 网关:Go + gRPC 实战

API 网关是很多系统的入口。它看起来像一层薄薄的转发器,真实工作却横跨流量治理、认证鉴权、可观测性、协议转换和故障隔离。

这篇文章记录一次从零实现高并发网关的过程:不追求炫技,而是把每个关键设计拆到可以落地的程度。

为什么要自己写网关

成熟网关当然很多,但当团队需要更细的运行时控制、更低的部署成本,或更深地贴合内部协议时,自研一个窄而稳的网关会变成可选项。

自研不是为了重复造轮子,而是为了明确轮子到底要承受哪几种真实路况。

核心架构拆解

整体结构分为配置中心、路由匹配、过滤器链、上游连接池和观测性管线。请求进入后,先完成上下文初始化,再经过认证、限流、熔断和转发。

type Middleware func(Handler) Handler

func Chain(endpoint Handler, middleware ...Middleware) Handler {
  for i := len(middleware) - 1; i >= 0; i-- {
    endpoint = middleware[i](endpoint)
  }
  return endpoint
}

限流与熔断策略

限流使用令牌桶模型,适合处理稳定流量下的短时突刺。熔断器则通过滑动窗口统计错误率,让上游异常时快速失败,避免请求继续堆积。

熔断阈值不应该只看错误率,还要结合最小请求量,否则低流量接口很容易被偶发错误误伤。

链路追踪与观测性

每个请求在入口处生成 Trace ID,并贯穿日志、指标和下游调用。排查慢请求时,工程师可以从一次请求直接跳到对应的上游耗时分布。

性能压测结果

在本地压测环境中,开启基础过滤器链后,网关仍能保持稳定吞吐。真正的瓶颈通常不是 Go 本身,而是日志 IO、连接池配置和上游服务延迟。