上游/下游术语用反了? (例如 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 相同)以及其他一些地方。
在自然语言的“下载”和“上传”中也可以看到相同的逻辑。大多数数据流是从服务器到客户端,这就是为什么“下载”意味着从服务器加载一些东西到客户端,而“上传”是从客户端到服务器。
我一直认为上游和下游是一条实际的溪流,信息的流动就像水一样。所以上游是 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 相同)以及其他一些地方。
在自然语言的“下载”和“上传”中也可以看到相同的逻辑。大多数数据流是从服务器到客户端,这就是为什么“下载”意味着从服务器加载一些东西到客户端,而“上传”是从客户端到服务器。