V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
IdJoel
V2EX  ›  Node.js

请教一个问题,做中间件的意义是什么?

  •  1
     
  •   IdJoel · 2021-06-18 10:43:45 +08:00 · 4546 次点击
    这是一个创建于 1036 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大型项目可以做地址转发,不暴露后端接口地址,可以提高并发量,可以负载均衡。 但在小型的项目中,除了能帮前端整理更合适的接口数据,还有没有其他意义。

    正在写中间件,突然感觉自己做的东西没什么意义。反而增加了自己的工作量, 仅仅只是为了让自己的前端代码更舒服一些。。。

    至于我一开始写中间件的目的,则是过滤条件,我们现在的业务有一个需求,获取所有订单的数量,但是后台把所有订单列表饭回来了,我只想取数组的 length,所以我觉得很浪费资源,但是想想我用 node 去处理这个数组的时候,实际我还是接收了三个请求(因为不同类型的订单所以要走三个接口),所以速度应该不会更快,那我写中间件的意义是什么呢。

    22 条回复    2021-07-07 07:36:53 +08:00
    qqlyatt
        1
    qqlyatt  
       2021-06-18 10:50:25 +08:00 via Android   ❤️ 1
    我觉得是为了 SEO,好像是这个词。Node 渲染出整个页面,供浏览器爬取。另一个,前端服务器可以看做第三方调用你的后台,也有自己的处理逻辑,并不是后端传什么,页面显示什么。
    EPr2hh6LADQWqRVH
        2
    EPr2hh6LADQWqRVH  
       2021-06-18 10:51:47 +08:00   ❤️ 4
    先擦辣鸡 Java 程序员屁股,再擦辣鸡前端程序员屁股
    如果他们两者有任何一个不辣鸡的,就用不着你这个角色。
    yuchting
        3
    yuchting  
       2021-06-18 11:04:18 +08:00   ❤️ 2
    先说意义:

    中间件的实际意义是:把复杂的问题拆分成具体子问题,让更多的人一起解决这个大问题。
    中间件绝大多数的时候会降低软件运行效率,而不是增加运行效率。


    再说为什么:

    随着用户的需求不断增大,之前一两个程序员能够实现的软件规模已经基本不可能出现了,软件原来越复杂,越来越庞大。所以需要大量的人,组成不同的团队,一起做,那么怎么样才能让自己的团队里的专心做自己的部分,而不关心其他的部分呢?只有划分模块,模块一划分,必定解耦,不然没意义,一解耦,必定出现无数中间件。


    最后说自己一个故事:

    以前自己一个人写 MMO 的客户端逻辑层,high 的不行,一开始就把原有消息系统、代理系统、工厂系统什么设计模式统统干掉了,直接函数调用,TMD 只会降低效率。虽然最后没啥问题,但是客户端就我一个。

    若干年后,我去了一个庞大公司,发现逻辑层程序员就 30 号人,4 个小组,做不同的部分,客户端分成前 UI 、后 GamePlay,Haxe 、xml 、C++,OC,java,各种各样的代码……要是没有某些中间件系统隔离模块,绝对一锅粥……


    最后,凡事没有绝对,软件工程也没有银弹。
    libook
        4
    libook  
       2021-06-18 12:10:17 +08:00   ❤️ 1
    当你不知道用中间件有什么意义的时候,你可能不需要中间件。

    各种技术概念都只是工具,可以解决你的问题就用,解决不了问题没必要硬上,因为可能还会产生更多问题。

    中间件其实算是一种模块化方案,像流水线一样分步骤处理请求和返回信息,中间件之间互相独立,可以根据需要添加、删除、替换。
    emSaVya
        5
    emSaVya  
       2021-06-18 12:12:16 +08:00   ❤️ 1
    我觉得可以去 了解一下 中间件 middleware 到底是在说什么东西 我记得最早应该是指 COBRA 或者 java jni 这种的
    singerll
        6
    singerll  
       2021-06-18 12:14:44 +08:00 via Android   ❤️ 1
    @emSaVya 我记得最早是说的 weblogic,tomcat 这类 java 容器
    speedofstephen
        7
    speedofstephen  
       2021-06-18 12:49:30 +08:00   ❤️ 1
    。。。。。。。中间件。Mysql Redis Solr 各种 MQ 这些都是中间件啊。我感觉我的理解和你们不同
    leven87
        8
    leven87  
       2021-06-18 12:56:00 +08:00   ❤️ 1
    让逻辑更清楚,便于扩展,便于交流。 写单体代码还要分层呢,当然你可以所有代码写一个文件,你自己啥都清楚,换个人不得去死。你分层了,看下目录结构,基本知道是怎么回事了。
    otakustay
        9
    otakustay  
       2021-06-18 13:25:32 +08:00   ❤️ 2
    楼主指的是 BFF 吧:
    1. 整理更合适的接口就是一个很好的意义,如果你的前端比较重,那前端就必须保持干净,别让不合理的接口污染代码
    2. 多接口调用合一的情况,BFF 与后端服务的通信速度远快于浏览器走网络
    3. SSR
    otakustay
        10
    otakustay  
       2021-06-18 13:26:09 +08:00
    4. 公网是很慢的,像是把数组变成一个 length,能很大节省传输量
    MarkLeeyun
        11
    MarkLeeyun  
       2021-06-18 13:33:48 +08:00
    计算机著名的分层的抽象理念啊。比如 tcp/ip 等。
    MarkLeeyun
        12
    MarkLeeyun  
       2021-06-18 13:34:47 +08:00
    @avastms 绝了。
    fkdog
        13
    fkdog  
       2021-06-18 13:41:51 +08:00
    为了细化岗位职责,把原来的全栈拆解为运维、前端、后端、数据库 dba 等岗位,避免出现一个掌控全局的不可替代性。
    每个人都只是流水线上的拧螺丝钉的。
    Rocketer
        14
    Rocketer  
       2021-06-18 13:49:48 +08:00 via iPhone   ❤️ 1
    没研究过具体的定义,但就我接触过的大型项目而言,整个系统从输入到输出就是一个 map-reduce 的过程,而中间件就是比较接近出入口的一个 reducer 。
    thtznet
        15
    thtznet  
       2021-06-18 13:53:10 +08:00
    如果你的设计能力超强,一步到位短时间内不需要功能迭代,领先业界几代,且编码过程异常轻松,那不需要中间件。
    chenshun00
        16
    chenshun00  
       2021-06-18 16:03:44 +08:00
    中间件的意义是什么,这个题目怕不是上边的同志几句话回答的了的,但是回答最起码也得从没有中间件之前是什么样子的,产生中间件的背景是什么,有了中间件以后是什么情况这些方面去回答吧。

    他的意义是什么,意义就在于在特定的发展过程中,为了解决一系列问题而产出的一个解决方案,是符合过去某一段时间软件开发过程中客观存在的某些问题而出现的,她的意义就是解决这个过程中的问题。
    x940727
        17
    x940727  
       2021-06-18 16:12:46 +08:00
    @avastms 是不是这么辣鸡啊,那大数据领域不是 Java 的天下吗?中国这些顶级大公司的系统不是大多都是 Java 支撑的吗?那看来只有辣鸡才能做大啊……
    786375312123
        18
    786375312123  
       2021-06-18 17:16:56 +08:00
    计算机系统就是中间件,是硬件和应用层的中间件,系统 API 就是这个中间件向上向下的接口
    darknoll
        19
    darknoll  
       2021-06-18 17:19:41 +08:00
    你这个是 bff,不是中间件
    qq1340691923
        20
    qq1340691923  
       2021-06-18 17:48:54 +08:00   ❤️ 2
    otakustay 讲得很好,我补充几点,1.后端服务要求稳定,高性能,作为核心业务,常用语言有 java,bff 作为胶水层,需要灵活,开发速度快,能够快速响应业务变化,常用语言有 node,php 2.bff 作为聚合接口数据层,可以清洗后端服务提供的数据,针对性的提供更合理的数据结构给前端,减小用户流量消耗,加快网络速度 3.减轻前端对数据的繁杂处理,让前端更纯粹的渲染页面
    akira
        21
    akira  
       2021-06-18 21:50:05 +08:00
    感觉你说的中间件和我们理解的中间件不是一个事情呀。。
    yishuihanxiao
        22
    yishuihanxiao  
       2021-07-07 07:36:53 +08:00
    说明你做的系统架构简单直接,不需要中间件。

    过度设计和架构是现在软件设计的一大问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   860 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 21:56 · PVG 05:56 · LAX 14:56 · JFK 17:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.