V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
v2nika
V2EX  ›  程序员

为什么这么多后端开发上下游不分?

  •  
  •   v2nika · 302 天前 · 9398 次点击
    这是一个创建于 302 天前的主题,其中的信息可能已经有所发展或是发生改变。

    面试了不少于 100 个后端工程师, 初级到高级都有. 有相当一部分 (>70%) 的人, 都会说我做的服务调用下游服务如何如何.

    为什么会这样? 只要认真思考一下, downstream 和 upstream 的概念不至于记不住吧?

    109 条回复    2023-09-21 14:32:30 +08:00
    1  2  
    LandCruiser
        1
    LandCruiser  
       302 天前
    你招聘写薪资 100k ,来的肯定什么都懂
    darksword21
        2
    darksword21  
       302 天前   ❤️ 10
    为什么论坛里每次问这种问题我都懂但是没人招我 🐶
    dyllen
        3
    dyllen  
       302 天前   ❤️ 3
    我依赖的是上游;依赖我的叫下游,我就是下游的上游,这样吗?
    NoKey
        4
    NoKey  
       302 天前
    我方调用的全是上游?灌数据的咋算?🤣
    zhaohua
        5
    zhaohua  
       302 天前   ❤️ 26
    70%的人理解的上下游和你不同,会不会是你错了呢?
    tianxin8431
        6
    tianxin8431  
       302 天前
    这个问题我问过我的 mentor ,他的解释是这里的下游相当于是金字塔的塔基,越是基础的服务,越靠下。为了降低理解成本,我现在更喜欢叫 caller 、callee 了。
    abcdexx
        7
    abcdexx  
       302 天前   ❤️ 1
    很多人把单设备登录理解成单点登录
    Ayanokouji
        8
    Ayanokouji  
       302 天前   ❤️ 1
    求科普:上游/下游怎么理解
    pkoukk
        9
    pkoukk  
       302 天前   ❤️ 7
    我调一个服务,从他那获取我需要的数据,他是我的上游
    我调用一个服务,把需要处理和执行的任务发送给他,他去处理后续操作,他是我的下游
    我是这么理解的,有问题么?
    上下游是根据主动被动划分的么?那 callback 怎么算?
    dobelee
        10
    dobelee  
       302 天前   ❤️ 5
    没必要过分迷信权威而反常识。
    tairan2006
        11
    tairan2006  
       302 天前   ❤️ 5
    上游、下游;南向、北向,这些词感觉都挺莫名其妙的。

    你就说后端前端不就完了,调用后端服务
    SadBox
        12
    SadBox  
       302 天前
    @abcdexx 哈哈 这个的确很多!
    AboPlus
        13
    AboPlus  
       302 天前
    @pkoukk 和我理解的一样,感觉没啥问题啊
    mcfog
        14
    mcfog  
       302 天前 via Android   ❤️ 1
    如果上下游按南北方向或一般架构图方位算,最上游是网关最下游是数据库,上游到下游是请求流动的方向,请求来自客户,来自上游

    如果上下游按数据流向或依赖方向算则恰好相反,最上游是数据库而下游是网关,上游到下游是数据流动的方向,数据来自数据库,来自上游

    那么 op 是不认可哪一边呢? 如果说调用就是上游那也未免太单纯一点了,难道我订阅做个推拉,还能推模式和拉模式的上下游就反过来了?
    lincanbin
        15
    lincanbin  
       302 天前   ❤️ 1
    上下游是一个相对概念,你要知道一般的后台服务是双向通信。
    当处理传输请求的时候,数据从接入层到逻辑层到存储层流动,逻辑层就是接入层的下游,存储层就是逻辑层的下游。
    当处理响应回包的时候,数据从逻辑层流向接入层,这时候逻辑层是上游,接入层是下游。

    downstream 和 upstream 是处理响应时的概念。
    而处理服务逻辑的时候,指的是处理请求。
    hsfzxjy
        16
    hsfzxjy  
       302 天前 via Android
    前向兼容和后向兼容🤣
    5waker
        17
    5waker  
       302 天前   ❤️ 17
    你在河里尿尿( bug ),谁能喝到你的尿谁就是下游。
    leehomyhh
        18
    leehomyhh  
       302 天前
    相对论没听说过吗???
    Tinu
        19
    Tinu  
       302 天前
    以数据流转方向进行区分 不是很明晰么
    zpm683
        20
    zpm683  
       302 天前
    有时候太学院派了也不好。。
    RainCats
        21
    RainCats  
       302 天前
    数据来源是上游,数据去处是下游,这都是相对的概念吧
    zpm683
        22
    zpm683  
       302 天前   ❤️ 1
    面试见过太多概念门清,一上手啥也不是的
    Tink
        23
    Tink  
       302 天前
    看你怎么理解了,都能解释通
    ljrdxs
        24
    ljrdxs  
       302 天前
    @tairan2006 上游下游,应该是英文 upstream 等翻译。
    南向、北向,真的莫名其妙。
    第一反应是阿里又双叒叕制造麻烦。
    8355
        25
    8355  
       302 天前   ❤️ 2
    上游/下游指的是调用链路
    描述的目的是负责人所参与的系统在整个业务链路中的位置。
    面试了 100 个人都搞不懂别人在说啥?
    KKKKKKKKKKKKKKKK
        26
    KKKKKKKKKKKKKKKK  
       302 天前
    这个问题就好比 1:N -> N:1 的问题,站的角度不同理解就不一样,不知道 OP 想知道的答案是什么呢?
    DOLLOR
        27
    DOLLOR  
       302 天前
    @ljrdxs 南桥芯片 北桥芯片
    merryMa
        28
    merryMa  
       302 天前
    我理解越基础的服务,在整个请求链路中越往下的服务,越属于下游。比如,后端会依赖搜索服务,那搜索服务就是下游服务。我是这么理解的
    iblessyou
        29
    iblessyou  
       302 天前   ❤️ 4
    @tianxin8431 他这种应该叫下层而不是下游吧?
    就只从语义说,上下游是流向概念吧,水是从上游流到下游。我的数据是从上游传递过来的。
    产业里也会说上下游,越下游越接近用户,上游就是供应商。

    金字塔那种是应该叫下层。建筑是从下往上盖的。我这一层是在下一层的基础上来的。

    所以你那个 mentor 可能计算机很懂,语文估计不大行。
    iblessyou
        30
    iblessyou  
       302 天前
    @merryMa 那你也反了。比如产业链里:
    上游供应商一般是指原材料供应商的意思。下游供应商是指商品的分销处。
    你如果是个造汽车的,你肯定依赖的是上游啊。
    后端会依赖搜索服务,那搜索服务那不叫下游,那叫下层或底层。

    用“游”表示的话,就是说的你的数据流,数据像水一样,从“搜索服务”流到你的后端,这不明显的他是你上游么。
    zdking08135
        31
    zdking08135  
       302 天前
    我们这边一般叫主调,被调
    hidemyself
        32
    hidemyself  
       302 天前
    @tairan2006 南北向,感觉只在物联网看到过。
    上北下南,越往下层叫南向,越往上层叫北向
    xiaotianhu
        33
    xiaotianhu  
       302 天前
    这个问题整不明白真的拿不到贵司的 offer 吗
    v2nika
        34
    v2nika  
    OP
       302 天前
    @merryMa 你说的这个叫下层, 上层服务依赖下层, 但是上下游是把过来的, 指的是数据流向, 或者依赖方向, 被依赖的是上游.
    buchikoma
        35
    buchikoma  
       302 天前
    公司里很多人讨论过这个问题,中文语境一直从请求流量的角度定义,所以上游是调用方。行业里英语一般是应答流量角度看的,上游是被调用方。

    最后结论是再问一句,你是 client 还是 server
    realpg
        36
    realpg  
       302 天前
    @hidemyself #31
    南北向东西向是基础网络上的术语
    物联网跟这些更紧密 所以跟着来的
    kkwa56188
        37
    kkwa56188  
       302 天前   ❤️ 1
    贵司 的职位 在市场上吸引了 被贵司筛选后 还有 超过 100 工程师 进入面试, 却大部分 连 OP 觉得很理所当然 的事情都搞不清,
    到底是哪一方 不靠谱 ?
    54qyc
        38
    54qyc  
       302 天前   ❤️ 1
    我知道我说的上下游反了,但是我就是喜欢这么说,大部分人也都这么说,我就觉得正确的上下游违反我的直觉,我就爱说反了的上下游行不行?大家沟通名词不是关键,互相懂自己的意思不就行了吗?纠结名词的意义是啥? MYSQL 怎么读? Linux 咋读?
    54qyc
        39
    54qyc  
       302 天前
    @v2nika 你这么理解,别人就不能换个角度理解?
    ShuWei
        40
    ShuWei  
       302 天前   ❤️ 5
    抠字眼也成为一种技术了吗?
    nothingistrue
        41
    nothingistrue  
       302 天前
    调用方把参数传递给被调用方去处理,这里明显被调用方是数据流的下游。如果改成消息队列投递模式,方向会更明显。不知道楼主为何会有相反的理解,难不成你的被调用那一方,全部都是查询接口。

    我实在不想往“面试后端开发的面试官,并没有做过程序开发”这个方向上去想。
    zjsxwc
        42
    zjsxwc  
       302 天前 via Android
    请解释:
    上游,下游,左游,右游,
    东游,西游,南游,北游。
    ratazzi
        43
    ratazzi  
       302 天前
    如何快速区分 ln 命令以及各种语言的 symlink 函数的 src 和 dst
    me1onsoda
        44
    me1onsoda  
       302 天前
    可能是中文导致的歧义吧。
    A 调用 B ,B 调用 C ,流向看起来就像 A-> B-> C:)
    liberty1900
        45
    liberty1900  
       302 天前
    什么是代理什么是反向代理
    dayeye2006199
        46
    dayeye2006199  
       302 天前
    建议招个英语母语的人,很难讲错
    kanepan19
        47
    kanepan19  
       302 天前
    这种概念后端需要知道?
    poplar89
        48
    poplar89  
       302 天前
    OP 为何不把你认为正确的写清楚
    dumbbell5kg
        49
    dumbbell5kg  
       302 天前   ❤️ 2
    huihuiHK
        50
    huihuiHK  
       302 天前
    你懂别人不懂的东西,别人也有懂你不懂的东西,谁也不要瞧不起谁。
    maguazhou
        51
    maguazhou  
       302 天前
    这难道不是相对而言的吗?
    hooych
        52
    hooych  
       302 天前
    向上兼容、向下兼容、向前兼容、向后兼容

    啥意思?
    zhuzhibin
        53
    zhuzhibin  
       302 天前 via iPhone
    这个回答不出来就是犯法了?
    v2nika
        54
    v2nika  
    OP
       302 天前
    @54qyc 这种说法的结果是: 如果我是个前端, 用相同的语义来表达的话, 我调的后端成了下游服务, 前端反而成了后端的上游.
    chippai
        55
    chippai  
       302 天前
    啊,按照数据流向的,A 调用 B ,可以是查询,也可以是通知。
    0Kelvin
        56
    0Kelvin  
       302 天前
    我会避免使用这种不同人理解不同的概念,争论不如换些确切的名词
    codersdp1
        57
    codersdp1  
       302 天前
    这个问题,着实没必要纠结。
    thofx
        58
    thofx  
       302 天前   ❤️ 1
    @zhuzhibin 要坐牢的
    awalkingman
        59
    awalkingman  
       302 天前
    长江上游,长江下游。上下游是不是从这里出来的
    gtexpanse
        60
    gtexpanse  
       301 天前
    数据流和依赖关系里的上下游正好相反,70%的人跟你的认知不一样你没有怀疑过自己?
    ryan4yin
        61
    ryan4yin  
       301 天前
    这不能证明面试者有问题,只能证明这套术语本身有毛病。
    就如同什么南向北向,鲁棒性之类的傻逼玩意儿。
    coyove
        62
    coyove  
       301 天前
    不好意思,在我司依赖的 3 方服务叫上游,依赖的内部服务叫下游。
    定义每家都不一样,为什么要来 yygq ?
    Tstxxy
        63
    Tstxxy  
       301 天前
    维基百科
    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.
    看起来和调用没太多关系
    leeg810312
        64
    leeg810312  
       301 天前 via Android
    了解或做过供应链或者物流系统的可能比较容易理解,永远是下游获取上游的数据,哪有反过来的说法,获取方式可以是推或者拉,是否上下游取决于业务流程,而不是获取方式,无论是业务处理系统还是数据类系统应该都是这样,楼上好些人这都搞不懂吗?
    RedisMasterNode
        65
    RedisMasterNode  
       301 天前
    @v2nika 听起来没什么问题?一直都是这么用的。不需要强加自己的理解于别人之上,面试只需要表达清楚意思就可以了。

    上下游的定义一直都有(至少)两类,

    第一类: 按 action 的方向定义
    上游: 指收到了哪里的请求 / 要响应给谁。
    - 上游服务调用了我,我要响应给上游服务。
    下游: 发请求给谁 / 从谁那接收它的响应。
    - 我正在调用我的下游。

    第二类:依赖关系
    上游: 发请求给谁 / 从谁那接收它的响应。
    - 我正在调用服务的上游
    下游: 指收到了哪里的请求 / 要响应给谁。
    - 下游服务调用了我。

    面试里面结合语义这些东西并不值得纠结,而且既然不是个所有人都同意的东西,hh ,我也觉得会有人发帖:

    ```
    为什么这么多后端开发上下游不分?
    面试了不少于 100 个后端工程师, 初级到高级都有. 有相当一部分 (>70%) 的人, 都会说我做的服务调用上游服务如何如何.
    为什么会这样? 只要认真思考一下, downstream 和 upstream 的概念不至于记不住吧?
    ```
    zp324511
        66
    zp324511  
       301 天前
    @darksword21 我猜因为你是老板
    wr516516
        67
    wr516516  
       301 天前
    我建议你要是想 pass 人家就直说.
    这种东西不管怎么说怎么理解,进公司了统一口径就行了呗.

    面试在这种问题上挑刺得话,招聘到的就只能是符合个人审美和面试者习惯性格的人而已,这种点也考察不了啥啊.
    你还不如跟东堂葵似的直接问他喜欢什么什么样的女人
    IvanLi127
        68
    IvanLi127  
       301 天前
    我感觉问题是在这个语境下,用上下游不是个明确的说法。如果一定要用,那 OP 的说法基本上是正确的。
    上下游能互换的话那能叫上下游吗?只有层层递进的用法,不可能 A 和 B 互为下游,更不可能反过来。狭义上不是说这个服务收到别的服务的数据就被称做下游,只能说这个接口是这个数据的下游。大概这样,所以我觉得 OP 思路没毛病。
    xiaooloong
        69
    xiaooloong  
       301 天前   ❤️ 4
    引用「在微服务或者服务链路中,"上游"和"下游"的概念确实和 Nginx 的 "upstream" 方向相反。

    在微服务架构中,如果服务 A 调用了服务 B ,那么我们通常认为服务 A 是"上游"服务,服务 B 是"下游"服务。而在 Nginx 中的"upstream"则定义了后端服务器群组,这些服务器是被 Nginx (作为代理服务器)调用的,所以从这个角度看,它们应当被看作是"下游"。

    这样的混淆源于不同领域对"上游"和"下游"概念的使用有所不同。在 Nginx 配置中,"upstream"是指代理服务器发送请求的目标服务器列表,这是从流量的流动方向来定义的。而在许多其他上下文中,"上游"和"下游"通常是从数据处理或依赖关系的角度来定义的。」
    coolmenu
        70
    coolmenu  
       301 天前
    孔乙己文字游戏吗?问点技术问题,这种上游下游本身就有分歧的含义,有什么可抱怨的?
    runzekk
        71
    runzekk  
       301 天前
    不用杠,一般以用户的视角来看,用户首先访问的就是上游服务,然后上游服务一层层往下调用。
    Desiree
        72
    Desiree  
       301 天前
    懂了你也不会招的
    liuzhedash
        73
    liuzhedash  
       301 天前
    你要是在华为,面试 100 个人能有 70 个知道啥是 [胶片] 么
    yongzhenchen682
        74
    yongzhenchen682  
       301 天前
    数据流向 a->b
    a 是上游,个人理解
    RedisMasterNode
        75
    RedisMasterNode  
       301 天前
    @yongzhenchen682 数据可以是提交数据,也可以是查询数据,你怎么去定义呢?

    服务 A 向服务 B 查询了一堆数据,数据是从 B 流向 A ,所以你觉得 B 是上游,A 是下游;

    服务 A 向服务 B 写入了一堆数据,数据从 A 流向 B ,所以说 A 是上游,B 是下游。

    根本就没办法解释和通用地定义“流向”和“依赖”,文字游戏是没啥意思的
    hackersee
        76
    hackersee  
       301 天前
    沟通的目的就是意会,你知道他要表述的是内容就行了。
    概念比较适合团队,可以让团队内的沟通效率更快,而团队之外则普通意会即可。
    就好比 UGC ,PGC ,PUGC 这些概念,视频/自媒体行业的人一般都知道,其他的不一定。
    kanepan19
        77
    kanepan19  
       301 天前
    看到楼主被骂惨了我就放心了
    collen
        78
    collen  
       301 天前
    是阿里吗
    brader
        79
    brader  
       301 天前
    比如我是做 A 系统,有另外一个 B 系统,我经常需要向 B 系统的一些 API 接口查询数据。
    但同时我也会收集一些用户、后台提交的纠错数据,通过 B 系统的 API 提交给他们。

    那这种两个系统之间有来有回的,你怎么去精确的抠字眼区分呢?
    按我意思就是往大了看,从整个系统架构去看,我的 A 系统大部分是依赖于 B 系统提供一些基础数据服务,那我就认为 B 是我的上游,这有啥问题。
    fan88
        80
    fan88  
       301 天前   ❤️ 2
    OP 想表达的意思:我很牛 B ,他们都是菜狗。

    有啥的,什么上下游,什么微服务,老子一点都不懂,PHP 一把梭一年五六十万拿
    brader
        81
    brader  
       301 天前
    @brader 再补充一下,然后某天和同事交流,B 系统提交数据那个 API 出问题了,虽然我是提交数据给 B 系统,但我们沟通过程中也是描述,上游服务出问题了,而不会因为这一个 API 是提交,就说下游。
    因为从宏观上,我和我的团队已经达成了共识了。
    Felldeadbird
        82
    Felldeadbird  
       301 天前
    上下游是不是可以用 手机供应商 。或者 ubuntu 和 debian 和 linux 的关系 来说明?
    liprais
        83
    liprais  
       301 天前
    “回字有几个写法啊?”阿 Q 问到
    9r85zMBA3IhB4drs
        84
    9r85zMBA3IhB4drs  
       301 天前
    对概念先达成一致还是比较重要的
    Cola98
        85
    Cola98  
       301 天前
    @Ayanokouji 别人依赖你,你就是上游,你依赖别人,你就是下游
    Cola98
        86
    Cola98  
       301 天前
    35L 那个感觉挺对的,自己是作为 client 还是 server ,如果是 server 就是上游,client 就是下游
    kneo
        87
    kneo  
       301 天前 via Android
    有 pipeline 才有上下游。上下游也不是用来调用的。
    zorui
        88
    zorui  
       301 天前
    理解这玩意 能涨工资?
    c3de3f21
        89
    c3de3f21  
       301 天前
    @wr516516 大胸大屁股的
    qiyilai
        90
    qiyilai  
       301 天前
    毫无意义的问题
    nickfox5880
        91
    nickfox5880  
       301 天前
    将军赶路 不追小兔
    cyspy
        92
    cyspy  
       301 天前
    从数据角度,数据源是上游,展示是下游。从请求角度,用户原始请求是上游,被调用的服务是下游
    rivercherdeeeeee
        93
    rivercherdeeeeee  
       301 天前   ❤️ 1
    健身游泳 了解一下
    Seulgi
        94
    Seulgi  
       301 天前
    你就说你听懂没听懂,毫无意义的鄙视链。
    zzzb002
        95
    zzzb002  
       301 天前
    纠结不该纠结的东西,估计真实水平也这样吧
    v2nika
        96
    v2nika  
    OP
       301 天前
    统一回复一下: 我并没有在面试过程中问过一次这样的问题, 而是在沟通过程中发现相当一部分人在描述自己的项目的时候对是这么用上游/下游这两个词的.

    这么描述是有歧义的, 因为在相当多的场景下, 这个概念是不能调换的, 比如我依赖一个第三方云服务, 或者做链路跟踪的时候, 上游一定是被依赖方. 如果这个时候对语义的理解无法达成一致, 沟通起来是有问题的.
    lbbff
        97
    lbbff  
       301 天前 via Android
    我们直接说“服务的使用方”、“接口调用方”
    amon
        98
    amon  
       301 天前
    有没有可能,上下游本身就是极具歧义的,而且它是相对的,在不同领域(比如微服务、组件系统、数据流转等)的划分又是不统一的。

    面试了 100 多个工程师了,这个道理都不明白吗?
    Gota
        99
    Gota  
       301 天前
    因为交流的时候把主语省略了所以容易搞混吧, 明确说是数据源还是调用链的上下游就不会有歧义了.
    Gota
        100
    Gota  
       301 天前
    打错了: 数据源 -> 数据流
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5667 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 137ms · UTC 02:28 · PVG 10:28 · LAX 19:28 · JFK 22:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.