工作中,有一些术语比较容易混淆,聊半天,最后发现双方对术语的理解不一致。这个时候用英文原本的表达或者换一种方式来表述能让沟通更顺畅。

像我们经常说的『上下游』便是经常发生混淆的一对名词。

以前,我经常说『梳理一下我们依赖的下游』,后来发现这种说法是错误的。正确的是:梳理一下我们依赖的上游。

是不是听着很奇怪?

可以这样理解,越是上游的地方,越是离源头更近的地方,源头就是指数据源。

对于互联网服务用户而言,数据沿着源头、上游、下游,一直流到用户的设备上。源头可能是数据库,上游可能是后端服务、下游可能是 gateway。对于某个微服务的 owner 也一样:你的服务做的事就是从上游获取某项数据,然后经过一些加工处理,吐出加工后的数据,数据会流向下游。

有人可能会反问:服务之间的交互,一问一答,请求和响应都有数据,那流向该怎么算?其实这里的数据是指响应数据,是终端用户最终需要的数据:可能是短视频,可能是公众号文章。

我们记住这张图就可以了:

上面这张图来自这篇文章,文中介绍了好几种 downstream/upstream,但对于后端研发来说,弄清服务调用间的上下游就足够了。

实在不好区分的,想想 nginx 中的 upstream 配的是什么地址能就回忆起来。

最后,在有可能要频繁说起上下游的场合,一定要先和大家约定好名词的定义。这时用 upstream、downstream 可能会更好一些;或者改叫调用方、被调用方也很清晰。