上游/下游术语用反了? (例如 nginx)

Upstream / downstream terminology used backwards? (E.g. nginx)

我一直认为上游和下游是一条实际的溪流,信息的流动就像水一样。所以上游是 water/data 的来源(例如 HTTP 请求),下游是它的去向(例如为请求提供服务的底层系统)。

我最近一直在查看 API 网关并注意到其中一些使用了与此定义相反的方式。当时我觉得这很奇怪,不以为然。然后我发现一些 API 网关所基于的 nginx 也以与我预期相反的方式使用术语。 nginx 调用它向 "upstream servers" 发送请求的服务器,因此传入的请求可能是 "downstream clients".

从概念上讲,如果转到 "upstream server",nginx 似乎会推送请求 "uphill",这完全违反直觉......在反向代理和 API 网关,显然!

我看到其他讨论谈论上游/下游表示系统之间的依赖关系,但对于位于系统之间的中间件或基础结构组件,依赖关系的概念有点宽松,我发现从以下方面考虑更有帮助信息流仍然存在——因为这通常是你依赖的来源。

我对流类比的理解从根本上是错误的,还是这些软件组件让概念倒退了?

在 HTTP 世界中,HTTP/1.0 规范中引入了“上游服务器”术语,RFC 1945:

502 Bad Gateway

The server, while acting as a gateway or proxy, received an invalid response from the upstream server it accessed in attempting to fulfill the request.

正式定义是后来添加的,在RFC 2616:

upstream/downstream

Upstream and downstream describe the flow of a message: all messages flow from upstream to downstream.

根据这个定义:

  • 如果是看一个请求,那么客户端是上游,服务器是下游;
  • 相反,如果您正在查看响应,则客户端在下游,服务器在上游。

同时,HTTP 中的大部分数据流不是针对请求,而是针对响应。因此,如果您考虑响应流,那么“上游服务器”一词听起来很合理且合乎逻辑。并且该术语再次用于 502 响应代码描述(与 HTTP/1.0 相同)以及其他一些地方。

在自然语言的“下载”和“上传”中也可以看到相同的逻辑。大多数数据流是从服务器到客户端,这就是为什么“下载”意味着从服务器加载一些东西到客户端,而“上传”是从客户端到服务器。