面试了不少于 100 个后端工程师, 初级到高级都有. 有相当一部分 (>70%) 的人, 都会说我做的服务调用下游服务如何如何.
为什么会这样? 只要认真思考一下, downstream 和 upstream 的概念不至于记不住吧?
1
LandCruiser 2023-09-19 16:32:17 +08:00
你招聘写薪资 100k ,来的肯定什么都懂
|
2
darksword21 2023-09-19 16:33:04 +08:00 10
为什么论坛里每次问这种问题我都懂但是没人招我 🐶
|
3
dyllen 2023-09-19 16:34:07 +08:00 3
我依赖的是上游;依赖我的叫下游,我就是下游的上游,这样吗?
|
4
NoKey 2023-09-19 16:55:33 +08:00
我方调用的全是上游?灌数据的咋算?🤣
|
5
zhaohua 2023-09-19 16:57:30 +08:00 26
70%的人理解的上下游和你不同,会不会是你错了呢?
|
6
tianxin8431 2023-09-19 17:00:10 +08:00
这个问题我问过我的 mentor ,他的解释是这里的下游相当于是金字塔的塔基,越是基础的服务,越靠下。为了降低理解成本,我现在更喜欢叫 caller 、callee 了。
|
7
abcdexx 2023-09-19 17:01:33 +08:00 1
很多人把单设备登录理解成单点登录
|
8
Ayanokouji 2023-09-19 17:02:13 +08:00 1
求科普:上游/下游怎么理解
|
9
pkoukk 2023-09-19 17:03:51 +08:00 7
我调一个服务,从他那获取我需要的数据,他是我的上游
我调用一个服务,把需要处理和执行的任务发送给他,他去处理后续操作,他是我的下游 我是这么理解的,有问题么? 上下游是根据主动被动划分的么?那 callback 怎么算? |
10
dobelee 2023-09-19 17:03:55 +08:00 5
没必要过分迷信权威而反常识。
|
11
tairan2006 2023-09-19 17:07:32 +08:00 5
上游、下游;南向、北向,这些词感觉都挺莫名其妙的。
你就说后端前端不就完了,调用后端服务 |
14
mcfog 2023-09-19 17:13:06 +08:00 via Android 1
如果上下游按南北方向或一般架构图方位算,最上游是网关最下游是数据库,上游到下游是请求流动的方向,请求来自客户,来自上游
如果上下游按数据流向或依赖方向算则恰好相反,最上游是数据库而下游是网关,上游到下游是数据流动的方向,数据来自数据库,来自上游 那么 op 是不认可哪一边呢? 如果说调用就是上游那也未免太单纯一点了,难道我订阅做个推拉,还能推模式和拉模式的上下游就反过来了? |
15
lincanbin 2023-09-19 17:16:10 +08:00 1
上下游是一个相对概念,你要知道一般的后台服务是双向通信。
当处理传输请求的时候,数据从接入层到逻辑层到存储层流动,逻辑层就是接入层的下游,存储层就是逻辑层的下游。 当处理响应回包的时候,数据从逻辑层流向接入层,这时候逻辑层是上游,接入层是下游。 downstream 和 upstream 是处理响应时的概念。 而处理服务逻辑的时候,指的是处理请求。 |
16
hsfzxjy 2023-09-19 17:17:48 +08:00 via Android
前向兼容和后向兼容🤣
|
17
5waker 2023-09-19 17:20:48 +08:00 17
你在河里尿尿( bug ),谁能喝到你的尿谁就是下游。
|
18
leehomyhh 2023-09-19 17:21:11 +08:00
相对论没听说过吗???
|
19
Tinu 2023-09-19 17:23:06 +08:00
以数据流转方向进行区分 不是很明晰么
|
20
zpm683 2023-09-19 17:36:54 +08:00
有时候太学院派了也不好。。
|
21
RainCats 2023-09-19 17:38:13 +08:00
数据来源是上游,数据去处是下游,这都是相对的概念吧
|
22
zpm683 2023-09-19 17:38:43 +08:00 1
面试见过太多概念门清,一上手啥也不是的
|
23
Tink 2023-09-19 17:40:10 +08:00
看你怎么理解了,都能解释通
|
24
ljrdxs 2023-09-19 17:42:30 +08:00
|
25
8355 2023-09-19 17:44:33 +08:00 2
上游/下游指的是调用链路
描述的目的是负责人所参与的系统在整个业务链路中的位置。 面试了 100 个人都搞不懂别人在说啥? |
26
KKKKKKKKKKKKKKKK 2023-09-19 18:01:44 +08:00
这个问题就好比 1:N -> N:1 的问题,站的角度不同理解就不一样,不知道 OP 想知道的答案是什么呢?
|
28
merryMa 2023-09-19 18:23:20 +08:00
我理解越基础的服务,在整个请求链路中越往下的服务,越属于下游。比如,后端会依赖搜索服务,那搜索服务就是下游服务。我是这么理解的
|
29
iblessyou 2023-09-19 18:24:52 +08:00 4
@tianxin8431 他这种应该叫下层而不是下游吧?
就只从语义说,上下游是流向概念吧,水是从上游流到下游。我的数据是从上游传递过来的。 产业里也会说上下游,越下游越接近用户,上游就是供应商。 金字塔那种是应该叫下层。建筑是从下往上盖的。我这一层是在下一层的基础上来的。 所以你那个 mentor 可能计算机很懂,语文估计不大行。 |
30
iblessyou 2023-09-19 18:32:00 +08:00
@merryMa 那你也反了。比如产业链里:
上游供应商一般是指原材料供应商的意思。下游供应商是指商品的分销处。 你如果是个造汽车的,你肯定依赖的是上游啊。 后端会依赖搜索服务,那搜索服务那不叫下游,那叫下层或底层。 用“游”表示的话,就是说的你的数据流,数据像水一样,从“搜索服务”流到你的后端,这不明显的他是你上游么。 |
31
zdking08135 2023-09-19 18:33:40 +08:00
我们这边一般叫主调,被调
|
32
hidemyself 2023-09-19 18:44:00 +08:00
@tairan2006 南北向,感觉只在物联网看到过。
上北下南,越往下层叫南向,越往上层叫北向 |
33
xiaotianhu 2023-09-19 18:50:47 +08:00
这个问题整不明白真的拿不到贵司的 offer 吗
|
34
v2nika OP @merryMa 你说的这个叫下层, 上层服务依赖下层, 但是上下游是把过来的, 指的是数据流向, 或者依赖方向, 被依赖的是上游.
|
35
buchikoma 2023-09-19 19:31:13 +08:00
公司里很多人讨论过这个问题,中文语境一直从请求流量的角度定义,所以上游是调用方。行业里英语一般是应答流量角度看的,上游是被调用方。
最后结论是再问一句,你是 client 还是 server |
36
realpg 2023-09-19 19:51:15 +08:00
|
37
kkwa56188 2023-09-19 20:02:45 +08:00 1
贵司 的职位 在市场上吸引了 被贵司筛选后 还有 超过 100 工程师 进入面试, 却大部分 连 OP 觉得很理所当然 的事情都搞不清,
到底是哪一方 不靠谱 ? |
38
54qyc 2023-09-19 20:09:10 +08:00 1
我知道我说的上下游反了,但是我就是喜欢这么说,大部分人也都这么说,我就觉得正确的上下游违反我的直觉,我就爱说反了的上下游行不行?大家沟通名词不是关键,互相懂自己的意思不就行了吗?纠结名词的意义是啥? MYSQL 怎么读? Linux 咋读?
|
40
ShuWei 2023-09-19 21:50:19 +08:00 5
抠字眼也成为一种技术了吗?
|
41
nothingistrue 2023-09-19 22:23:02 +08:00
调用方把参数传递给被调用方去处理,这里明显被调用方是数据流的下游。如果改成消息队列投递模式,方向会更明显。不知道楼主为何会有相反的理解,难不成你的被调用那一方,全部都是查询接口。
我实在不想往“面试后端开发的面试官,并没有做过程序开发”这个方向上去想。 |
42
zjsxwc 2023-09-19 22:35:19 +08:00 via Android
请解释:
上游,下游,左游,右游, 东游,西游,南游,北游。 |
43
ratazzi 2023-09-19 22:42:45 +08:00
如何快速区分 ln 命令以及各种语言的 symlink 函数的 src 和 dst
|
44
me1onsoda 2023-09-20 00:46:55 +08:00
可能是中文导致的歧义吧。
A 调用 B ,B 调用 C ,流向看起来就像 A-> B-> C:) |
45
liberty1900 2023-09-20 01:27:04 +08:00
什么是代理什么是反向代理
|
46
dayeye2006199 2023-09-20 02:20:35 +08:00
建议招个英语母语的人,很难讲错
|
47
kanepan19 2023-09-20 08:46:45 +08:00
这种概念后端需要知道?
|
48
poplar89 2023-09-20 08:46:46 +08:00
OP 为何不把你认为正确的写清楚
|
49
dumbbell5kg 2023-09-20 08:52:46 +08:00 2
|
50
huihuiHK 2023-09-20 09:05:48 +08:00
你懂别人不懂的东西,别人也有懂你不懂的东西,谁也不要瞧不起谁。
|
51
maguazhou 2023-09-20 09:16:21 +08:00
这难道不是相对而言的吗?
|
52
hooych 2023-09-20 09:24:32 +08:00
向上兼容、向下兼容、向前兼容、向后兼容
啥意思? |
53
zhuzhibin 2023-09-20 09:35:56 +08:00 via iPhone
这个回答不出来就是犯法了?
|
54
v2nika OP @54qyc 这种说法的结果是: 如果我是个前端, 用相同的语义来表达的话, 我调的后端成了下游服务, 前端反而成了后端的上游.
|
55
chippai 2023-09-20 10:16:16 +08:00
啊,按照数据流向的,A 调用 B ,可以是查询,也可以是通知。
|
56
0Kelvin 2023-09-20 10:21:01 +08:00
我会避免使用这种不同人理解不同的概念,争论不如换些确切的名词
|
57
codersdp1 2023-09-20 10:21:04 +08:00
这个问题,着实没必要纠结。
|
59
awalkingman 2023-09-20 10:28:05 +08:00
长江上游,长江下游。上下游是不是从这里出来的
|
60
gtexpanse 2023-09-20 10:32:09 +08:00
数据流和依赖关系里的上下游正好相反,70%的人跟你的认知不一样你没有怀疑过自己?
|
61
ryan4yin 2023-09-20 10:39:16 +08:00
这不能证明面试者有问题,只能证明这套术语本身有毛病。
就如同什么南向北向,鲁棒性之类的傻逼玩意儿。 |
62
coyove 2023-09-20 10:40:03 +08:00
不好意思,在我司依赖的 3 方服务叫上游,依赖的内部服务叫下游。
定义每家都不一样,为什么要来 yygq ? |
63
22F41628gA98q4Lx 2023-09-20 10:45:14 +08:00
维基百科
upstream 在 计算机网络中的解释 In computer networking, upstream refers to the direction in which data can be transferred from the client to the server (uploading). upstream 在软件开发中的解释 In software development, when software has been forked or uses a chain of libraries/dependencies, upstream refers to an issue that occurs in software related to the chain. It is the direction that is toward the original authors or maintainers of software. It is usually used in the context of a version, a bug, or a patch. upstream 在水文学中的解释 The term upstream (or upriver) refers to the direction towards the source of the stream (or river), i.e. against the direction of flow. Likewise, the term downstream or downriver describes the direction towards the mouth of the stream or river, in which the current flows. The term "left bank" and "right bank" refers to banks as seen from the direction of flow. 看起来和调用没太多关系 |
64
leeg810312 2023-09-20 10:47:06 +08:00 via Android
了解或做过供应链或者物流系统的可能比较容易理解,永远是下游获取上游的数据,哪有反过来的说法,获取方式可以是推或者拉,是否上下游取决于业务流程,而不是获取方式,无论是业务处理系统还是数据类系统应该都是这样,楼上好些人这都搞不懂吗?
|
65
RedisMasterNode 2023-09-20 10:47:30 +08:00
@v2nika 听起来没什么问题?一直都是这么用的。不需要强加自己的理解于别人之上,面试只需要表达清楚意思就可以了。
上下游的定义一直都有(至少)两类, 第一类: 按 action 的方向定义 上游: 指收到了哪里的请求 / 要响应给谁。 - 上游服务调用了我,我要响应给上游服务。 下游: 发请求给谁 / 从谁那接收它的响应。 - 我正在调用我的下游。 第二类:依赖关系 上游: 发请求给谁 / 从谁那接收它的响应。 - 我正在调用服务的上游 下游: 指收到了哪里的请求 / 要响应给谁。 - 下游服务调用了我。 面试里面结合语义这些东西并不值得纠结,而且既然不是个所有人都同意的东西,hh ,我也觉得会有人发帖: ``` 为什么这么多后端开发上下游不分? 面试了不少于 100 个后端工程师, 初级到高级都有. 有相当一部分 (>70%) 的人, 都会说我做的服务调用上游服务如何如何. 为什么会这样? 只要认真思考一下, downstream 和 upstream 的概念不至于记不住吧? ``` |
66
zp324511 2023-09-20 10:49:28 +08:00
@darksword21 我猜因为你是老板
|
67
wr516516 2023-09-20 10:58:20 +08:00
我建议你要是想 pass 人家就直说.
这种东西不管怎么说怎么理解,进公司了统一口径就行了呗. 面试在这种问题上挑刺得话,招聘到的就只能是符合个人审美和面试者习惯性格的人而已,这种点也考察不了啥啊. 你还不如跟东堂葵似的直接问他喜欢什么什么样的女人 |
68
IvanLi127 2023-09-20 10:58:36 +08:00
我感觉问题是在这个语境下,用上下游不是个明确的说法。如果一定要用,那 OP 的说法基本上是正确的。
上下游能互换的话那能叫上下游吗?只有层层递进的用法,不可能 A 和 B 互为下游,更不可能反过来。狭义上不是说这个服务收到别的服务的数据就被称做下游,只能说这个接口是这个数据的下游。大概这样,所以我觉得 OP 思路没毛病。 |
69
xiaooloong 2023-09-20 11:01:05 +08:00 4
引用「在微服务或者服务链路中,"上游"和"下游"的概念确实和 Nginx 的 "upstream" 方向相反。
在微服务架构中,如果服务 A 调用了服务 B ,那么我们通常认为服务 A 是"上游"服务,服务 B 是"下游"服务。而在 Nginx 中的"upstream"则定义了后端服务器群组,这些服务器是被 Nginx (作为代理服务器)调用的,所以从这个角度看,它们应当被看作是"下游"。 这样的混淆源于不同领域对"上游"和"下游"概念的使用有所不同。在 Nginx 配置中,"upstream"是指代理服务器发送请求的目标服务器列表,这是从流量的流动方向来定义的。而在许多其他上下文中,"上游"和"下游"通常是从数据处理或依赖关系的角度来定义的。」 |
70
coolmenu 2023-09-20 11:20:50 +08:00
孔乙己文字游戏吗?问点技术问题,这种上游下游本身就有分歧的含义,有什么可抱怨的?
|
71
runzekk 2023-09-20 11:31:26 +08:00
不用杠,一般以用户的视角来看,用户首先访问的就是上游服务,然后上游服务一层层往下调用。
|
72
Desiree 2023-09-20 11:33:29 +08:00
懂了你也不会招的
|
73
liuzhedash 2023-09-20 11:35:47 +08:00
你要是在华为,面试 100 个人能有 70 个知道啥是 [胶片] 么
|
74
yongzhenchen682 2023-09-20 11:38:25 +08:00
数据流向 a->b
a 是上游,个人理解 |
75
RedisMasterNode 2023-09-20 11:56:43 +08:00
@yongzhenchen682 数据可以是提交数据,也可以是查询数据,你怎么去定义呢?
服务 A 向服务 B 查询了一堆数据,数据是从 B 流向 A ,所以你觉得 B 是上游,A 是下游; 服务 A 向服务 B 写入了一堆数据,数据从 A 流向 B ,所以说 A 是上游,B 是下游。 根本就没办法解释和通用地定义“流向”和“依赖”,文字游戏是没啥意思的 |
76
hackersee 2023-09-20 11:59:33 +08:00
沟通的目的就是意会,你知道他要表述的是内容就行了。
概念比较适合团队,可以让团队内的沟通效率更快,而团队之外则普通意会即可。 就好比 UGC ,PGC ,PUGC 这些概念,视频/自媒体行业的人一般都知道,其他的不一定。 |
77
kanepan19 2023-09-20 12:11:43 +08:00
看到楼主被骂惨了我就放心了
|
78
collen 2023-09-20 12:14:07 +08:00
是阿里吗
|
79
brader 2023-09-20 12:19:04 +08:00
比如我是做 A 系统,有另外一个 B 系统,我经常需要向 B 系统的一些 API 接口查询数据。
但同时我也会收集一些用户、后台提交的纠错数据,通过 B 系统的 API 提交给他们。 那这种两个系统之间有来有回的,你怎么去精确的抠字眼区分呢? 按我意思就是往大了看,从整个系统架构去看,我的 A 系统大部分是依赖于 B 系统提供一些基础数据服务,那我就认为 B 是我的上游,这有啥问题。 |
80
fan88 2023-09-20 12:23:19 +08:00 2
OP 想表达的意思:我很牛 B ,他们都是菜狗。
有啥的,什么上下游,什么微服务,老子一点都不懂,PHP 一把梭一年五六十万拿 |
81
brader 2023-09-20 12:24:16 +08:00
@brader 再补充一下,然后某天和同事交流,B 系统提交数据那个 API 出问题了,虽然我是提交数据给 B 系统,但我们沟通过程中也是描述,上游服务出问题了,而不会因为这一个 API 是提交,就说下游。
因为从宏观上,我和我的团队已经达成了共识了。 |
82
Felldeadbird 2023-09-20 12:49:29 +08:00
上下游是不是可以用 手机供应商 。或者 ubuntu 和 debian 和 linux 的关系 来说明?
|
83
liprais 2023-09-20 12:54:36 +08:00
“回字有几个写法啊?”阿 Q 问到
|
84
9r85zMBA3IhB4drs 2023-09-20 12:58:24 +08:00
对概念先达成一致还是比较重要的
|
85
Cola98 2023-09-20 13:16:34 +08:00
@Ayanokouji 别人依赖你,你就是上游,你依赖别人,你就是下游
|
86
Cola98 2023-09-20 13:18:16 +08:00
35L 那个感觉挺对的,自己是作为 client 还是 server ,如果是 server 就是上游,client 就是下游
|
87
kneo 2023-09-20 13:23:58 +08:00 via Android
有 pipeline 才有上下游。上下游也不是用来调用的。
|
88
zorui 2023-09-20 13:44:04 +08:00
理解这玩意 能涨工资?
|
90
qiyilai 2023-09-20 13:46:58 +08:00
毫无意义的问题
|
91
nickfox5880 2023-09-20 13:53:37 +08:00
将军赶路 不追小兔
|
92
cyspy 2023-09-20 13:59:51 +08:00
从数据角度,数据源是上游,展示是下游。从请求角度,用户原始请求是上游,被调用的服务是下游
|
93
rivercherdeeeeee 2023-09-20 14:03:55 +08:00 1
健身游泳 了解一下
|
94
Seulgi 2023-09-20 14:59:08 +08:00
你就说你听懂没听懂,毫无意义的鄙视链。
|
95
zzzb002 2023-09-20 16:37:49 +08:00
纠结不该纠结的东西,估计真实水平也这样吧
|
96
v2nika OP 统一回复一下: 我并没有在面试过程中问过一次这样的问题, 而是在沟通过程中发现相当一部分人在描述自己的项目的时候对是这么用上游/下游这两个词的.
这么描述是有歧义的, 因为在相当多的场景下, 这个概念是不能调换的, 比如我依赖一个第三方云服务, 或者做链路跟踪的时候, 上游一定是被依赖方. 如果这个时候对语义的理解无法达成一致, 沟通起来是有问题的. |
97
lbbff 2023-09-20 18:42:05 +08:00 via Android
我们直接说“服务的使用方”、“接口调用方”
|
98
amon 2023-09-20 19:05:33 +08:00
有没有可能,上下游本身就是极具歧义的,而且它是相对的,在不同领域(比如微服务、组件系统、数据流转等)的划分又是不统一的。
面试了 100 多个工程师了,这个道理都不明白吗? |
99
Gota 2023-09-20 19:09:04 +08:00
因为交流的时候把主语省略了所以容易搞混吧, 明确说是数据源还是调用链的上下游就不会有歧义了.
|
100
Gota 2023-09-20 19:09:42 +08:00
打错了: 数据源 -> 数据流
|