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

[讣告]祭 nodejs 在我厂遭全面封杀

  •  
  •   p412726700 ·
    p412726700 · 2016-10-19 20:56:41 +08:00 · 36209 次点击
    这是一个创建于 2718 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今日惊闻一个噩耗,目前现有的 nodejs 项目全部下掉,通通用 java 重构。

    笔者 13 年初尝 nodejs ,觉得此货骨骼清奇他日必将大有作为,它以 javascript 作为语言基础,解决了 web 开发前后端中语言层面的转换,为想成为全栈开发者的人员提供了一条极佳的可选道路。并且得益于 javascript 天生异步的模式,在解决某些高并发场景下优势异常明显。同时前后端都以 json 作为数据传输形式,减少了很多类型转换的麻烦。 nodejs 的出现能让 javascript 运行服务端,至此 pc 、移动端、服务端,三端都能用 javascript 了,开心。鉴于以上几点,笔者决议投身 javascript 开发的浪潮中。

    一开始 javascript 基础尚且薄弱,就做了一年多的纯前端,从事前端三驾马车 html 、 css 、 javascript ,由于在做纯前端之前做了小半年游戏服务端( nodejs 实现),也从未放弃对 node 的研究关注,试想有朝一日能寻觅一个全栈 javascript 开发的岗位,果然,随着前端的大火、 nodejs 的崛起,又过了 10 个月,笔者终于找到了这个梦寐以求的岗位,然而,这才刚刚开始。

    初到厂里,车间主任 A 说,能不能让 nodejs 和 java 的 rpc 框架 dubbo 打通,笔者当时一脸懵逼,这要怎么搞,经过老大 A 的指点以及查找相关资料,阅读相关源码,和同事探讨,我们终于搞出来了,当时要说喜极而泣的话,一点都不夸张。因为当时已有的 nodejs 和 dubbo 通信全是走的 json 模型,但我厂既有服务都是 dubbo 的默认用法( dubbo 协议+hessian 序列化),所以为了极大的减少成本,我们这边就做了这么一个库,没想到,反响还可以,月最高下载量能破 4k ,这其中也不乏有大厂在用,这样的成绩,至少能让笔者买个鸡腿犒劳下自己了,后面就用这个作为底层,承载我们后台海量的业务需求,顺便说一下后台的前端也是我这边来负责,架构上就是前端->nodejs->java ,我负责前端+nodejs 这一块,有点类似淘宝的中途岛计划,可以想象,在此期间经历了很多坑,很多意想不到的问题,诚然,感兴趣的话即使刀山火海会迎难而上。

    其中问题多种多样,不仅代码上,还有其它的一些,比如说 nodejs 的发布流程,私服的搭建、服务器预配置的 nodejs 版本、编译部署规则等等等等,这些我们都在同运维部门协商,我们全力协助他们搭建,路漫漫其修远兮,经过半年多的磨合、催促,终于私服的搭建在前几天初具规模了。

    然而,在此之前,大概两个月前我们部门空降了个新的车间主任 B ,之前的老大 A ,被调往其它部门,老大 B 花了些时间研究了下我们整个大组的所有项目,得知我们有 nodejs 项目掺杂在其中,也没说什么。可就在前几天 nodejs 私服搭建好,运维某个领导来询问一些 nodejs 事项,他说,我们 nodejs 项目要下了,因为就几个人懂,没法做,期间讨论了一会儿,最终结论就是把 nodejs 下了,运维领导很开心,第二天前老大 A 也被告知,他所负责的另外一个 nodejs 项目全部用 java 重构,没商量!

    到这,可以说在我厂 nodejs 作为后端的存在遭全面封杀,今天斗胆分析一下缘由,在我厂主体是 java , 95%,一开始 nodejs 只是小打小闹,做一些边边角角的工作,后来由于打通了 dubbo 能做的事太多了,可能几乎所有直接对接 web 、移动端的都可以接了,这种类型的项目在我厂占的比例还是很大的,这么多事情能用 nodejs 做, java 不开心了,你 nodejs 要干嘛,造反么?没人懂、没人会、没资源,运维同学也很忙,既有的所有 nodejs 项目统统给我下了。可能这就是原因吧。

    nodejs 在我厂道阻且长,经历了重重困难,落得一个这样结局,也罢。君要臣死、臣不得不死。

    第 1 条附言  ·  2016-10-20 11:36:55 +08:00
    先说下我负责的项目,运营控制台前端+nodejs 。
    看了大家的评论,容我暴力划分成倒 N 派、挺 N 派、中立派,首先谢谢大家认真又饱含情感的回复,其中可能有点小误会,我来稍微阐明一下,文中其实有几个关键点。

    1 、老大 A 是我进厂的主要原因,因为他觉得他负责项目中有一个用 nodejs 实现比 java 好太多,据他所说做下来,比用纯 java 效率高了至少 3 成。更多的解释,可以参考下淘宝中途岛。

    2 、老大 B 来了后,说是要重构之前老大 A 负责的所有项目,不仅仅是那个 nodejs 项目。但作为一个前后端桥梁,显然在第一批开刀的范围内。

    3 、 nodejs 在我厂虽然运维层面推步履维艰,但我想技术上不是难题,已然有很多成熟方案可选可供借鉴。

    4 、鄙人推崇 js ,但不是说要让 js 统一天下, js 在某些场景下是强有力的解决方案,在另外一些场景下,弱到劈叉。 java 能长居排行榜第一必然有它牛逼闪闪的地方,目前做 nodejs 有建树的相当一部分也是 java 出身,我在项目中也借鉴了很多 java 思想,港真,但并不是所有做 java 的都能把 js 做好,只是觉得在合适的地方用合适的人做合适的事。
    第 2 条附言  ·  2016-10-20 18:12:52 +08:00
    不是阿里。
    但是前阿里员工占 7 、 8 成,所以把阿里曾经用的那一套拿来了。
    这个事没必要针对厂,每个厂都有很多面,未来究竟如何拭目以待咯。
    161 条回复    2018-07-13 23:17:00 +08:00
    1  2  
    sherlocktheplant
        101
    sherlocktheplant  
       2016-10-20 11:54:52 +08:00
    其实除了性能上的考虑外 js 的开发效率高太多 国内推广困难的主要问题是语言障碍 老外换语言也就是分分钟的事情 熟练度这种东西迟早能积累起来
    zuotech
        102
    zuotech  
       2016-10-20 11:57:27 +08:00
    java ,nodejs, php,都是类 C 语言, 每个语言都有自己的特性, 看企业的需求, 再牛 B 的语言代码写的不优化, 算法不高明, 那也是垃圾啊, 像我就三种语言都写, 不同场景用不同的语言, 完全没有什么问题, 主要是架构层面的业务剥离;
    romisanic
        103
    romisanic  
       2016-10-20 11:58:36 +08:00
    为啥感觉好好的根据当前业务和发展方向以及稳定性等方面考虑做出的基本最优的一个决策,到 lz 和很多层主眼里,就成了语言之争?
    这种语言之争会被大厂车间主任作为技术选择的理由?
    不要闹好嘛~
    shijingshijing
        104
    shijingshijing  
       2016-10-20 12:00:39 +08:00
    @murmur 其实最关键的地方在于,相对于漫天的流氓 app 横行肆虐, web browser 的沙箱模式提供了一个很好的治理他们的方法。凭什么我要给你我的 IMEI ,位置信息,电话号码通讯录等等隐私,乖乖的给我在盒子里面呆着,用不用看我心情。

    那个前淘宝二手市场 - 现在的闲鱼,就是走了这么个路线,强制把用户往 app 那边推, web 端无法发布商品,无法回复,甚至某段时间还无法查看评论,结果估计是数据断崖式下降,又改回可以查看评论了。

    这种吃枣药丸
    janxin
        105
    janxin  
       2016-10-20 12:03:05 +08:00
    从小公司的角度来说,减少语言复杂度是非常必要的:如果只是做做 web 开始, nodejs 是个不错的选择。否则的话, nodejs 未必是一个最优解,尤其是从招人和维护复杂度角度考虑。从另外一方面来说, js 对前端工程师来说是十分熟悉的,但是对后端工程师来说那种扭曲的写法绝对不是好方法。从分工上来说,后端语言提供 API 方式更方便后端实现自己本来就擅长的业务逻辑,无可厚非。而且从前端工程师培养后端工程师对小公司来说是成本非常高的一种方式,除非是个人信仰或者这人有很高的天赋,我还是不建议了。
    peneazy
        106
    peneazy  
       2016-10-20 12:04:51 +08:00
    node.js 在某些场景下性能确实很高,开发也快,但国内目前缺少这方面的人才,还需要一定的积累才行,不可盲目选择 node.js
    shijingshijing
        107
    shijingshijing  
       2016-10-20 12:05:30 +08:00
    @mathgl 我举 facebook 的 HHVM 这个例子,并不是说 PHP 好或者不好,我只是说,每个企业会根据自己的实际情况来决定是否继续沿用老的框架和体系,比如 facebook 有足够 nb ,技术储备,人力资源都够,就自己从底层重新写一个;而对京东来说,.Net 换 java 从头再来成本更低,那么就大家一起搬家。

    对企业来说,技术无所谓哪个好哪个差,能够更低成本的解决问题,就是好技术。
    janxin
        108
    janxin  
       2016-10-20 12:06:51 +08:00
    另外 node7 发布 async/await 我就打算引入 nodejs 了,毕竟开发效率好,也没那么扭曲了呀
    Chrisplus
        109
    Chrisplus  
       2016-10-20 12:17:53 +08:00
    个人对一个语言 /技术的评价,跟企业对一个语言 /技术的评价
    出发点是不一样的
    jhdxr
        110
    jhdxr  
       2016-10-20 12:20:32 +08:00
    @shijingshijing 其实我觉得 php7 是打了 HHVM 的脸。。。之前之所以要开发 HHVM ,而且还放弃了一定的兼容性,就是因为 Facebook 认为 php 已经无药可救只能另起炉灶\了。结果 php7 做到了在 userland 层非常良好的兼容...
    mathgl
        111
    mathgl  
       2016-10-20 12:47:06 +08:00
    @jhdxr fb 好像还赞助过 pypy team 搞了一个 hippyvm

    https://github.com/hippyvm/hippyvm

    后来不了了之。
    kaneyuki
        112
    kaneyuki  
       2016-10-20 12:57:21 +08:00
    视角不一样, node.js 的人贵且难招,开发者肯定喜欢能实践新技术,但管理者也要考虑开发成本和可维护性的问题。
    yonka
        113
    yonka  
       2016-10-20 13:11:09 +08:00
    @p412726700 这么说还真是 A 厂啊。 不是大前端战略用 nodeJS 代替 php 吗? 我还关注了好一阵子相关技术博客。 虽然 A 厂好多技术博客 15 年前后就停更了。
    zeromike
        114
    zeromike  
       2016-10-20 13:17:10 +08:00
    我就想问这是哪个厂,我是绝逼不去的
    mathgl
        115
    mathgl  
       2016-10-20 13:21:23 +08:00
    @latyas json 也可以用压缩嘛. 用 hessian 我猜是历史原因了,如果没有特别的好处,估计也没人有动力去换。
    newghost
        116
    newghost  
       2016-10-20 13:24:04 +08:00
    dubbo 不是阿里的 Java 框架吗?
    dong3580
        117
    dong3580  
       2016-10-20 13:25:34 +08:00
    @shijingshijing
    我很疑惑,为什么 jd 登录的那个页面还是.NET
    freetg
        118
    freetg  
       2016-10-20 13:28:10 +08:00
    A 厂技术一天不如一天
    hheedat
        119
    hheedat  
       2016-10-20 13:35:53 +08:00
    楼上很多都说 nodejs 开发效率高,能有 拍黄片 开发效率高? Java 开发效率就低了?我看未必
    li24361
        120
    li24361  
       2016-10-20 13:46:41 +08:00
    @hheedat v 站的鄙视链里面,我 java 是在最底层,早已习惯
    hantsy
        121
    hantsy  
       2016-10-20 14:17:34 +08:00   ❤️ 1
    NodeJS 做前端页面响应处理, API Gateway , WebSocket 还可以,,,后端大部分服务应该由 Java 承担。不管理架构如何复杂, MicroService ,分布式, Messaging , Big Data , Cloud/Container/DevOps 支持, Java 的成熟和优势不是一点点。
    fundon
        122
    fundon  
       2016-10-20 14:23:36 +08:00
    要用到刀刃上,一个大型系统,是一个有机的组合。“就看大师你的内力了,及癖好了。”
    tony601818
        123
    tony601818  
       2016-10-20 14:24:41 +08:00
    如果你们厂主要是 Java 的,那就不要用 node ,毕竟会的人少。除非你愿意花费时间开一个宣讲会。
    itbeihe
        124
    itbeihe  
       2016-10-20 14:31:45 +08:00
    比较关注是那个厂~ ~
    crazycookie
        125
    crazycookie  
       2016-10-20 14:34:57 +08:00
    是大厂么?
    是大厂就应该拍手称赞
    sampeng
        126
    sampeng  
       2016-10-20 14:41:54 +08:00
    楼主的推测太狭隘。从厂方利益而言,减少语言复杂度是没啥大错,增加语言复杂度会增加风险。没几个大 leader 赶去承担这样的风险。
    java 的招人一抓一大把,招来就能用,还能用本来沉淀好的东西。
    nodejs 招人。。恩,我想 hr 最有发言权了。。
    dremy
        127
    dremy  
       2016-10-20 15:22:39 +08:00 via Android
    求问到底是不是阿里啊,按照占比来说, node 好像是占 5%的
    rainysia
        128
    rainysia  
       2016-10-20 15:43:21 +08:00
    ckontem
        129
    ckontem  
       2016-10-20 15:50:22 +08:00
    浮躁的前端.....都是天天造轮子惹的祸
    jjx
        130
    jjx  
       2016-10-20 16:03:03 +08:00
    @dremy

    不太可能是 taobao 的

    另外, 按理说 nodejs 在前端的地位, 不管怎么弄也甩不掉的呀
    RockShake
        131
    RockShake  
       2016-10-20 16:19:47 +08:00
    节哀
    dingyp
        132
    dingyp  
       2016-10-20 16:48:03 +08:00
    哎 我们厂来个真是厂里硬件出来的,所以东西都重写,听说 json 都自己解析,好在我是 android (做吃等死中,有认识的吗 :)
    ayanamist
        133
    ayanamist  
       2016-10-20 17:09:37 +08:00 via iPhone
    澄清下,阿里内部几乎没有用 dubbo 的了,所以不可能是阿里。
    shiny
        134
    shiny  
       2016-10-20 17:23:44 +08:00
    @ayanamist 阿里的 node 系不是很猛吗,看描述也不像。
    ayanamist
        135
    ayanamist  
       2016-10-20 17:33:55 +08:00 via iPhone
    @shiny 猛不猛不知道啊,我已经远离了 node 圈子
    cYcoco
        136
    cYcoco  
       2016-10-20 17:36:06 +08:00
    我本来就觉得这玩意没啥用。。
    wengang285
        137
    wengang285  
       2016-10-20 17:41:53 +08:00
    看到 dubbo 就知道是猫厂了
    firefox12
        138
    firefox12  
       2016-10-20 17:51:28 +08:00
    是天猫吗? 还是阿里?
    baozijun
        139
    baozijun  
       2016-10-20 17:56:17 +08:00
    @jjx node 肯定不是输在性能上。复杂的业务逻辑,缺失的中间件,成熟的类库,各类 debug profiling 的工具,决定的 Java 必然有很长的统治时间.知乎的这句话说明 java 太成熟了,不得不因循守旧.
    zohan
        140
    zohan  
       2016-10-20 18:19:25 +08:00
    我想知道这上面回复的,有多少个人写过 node
    js0816
        141
    js0816  
       2016-10-20 20:09:12 +08:00 via iPhone
    @menc node 生态圈还不健全啊 2016 了大胸弟
    Lpl
        142
    Lpl  
       2016-10-20 20:14:54 +08:00
    @zohan 很多抱着“没见过猪跑,好歹也吃过猪肉”的态度来评价的,哈哈哈。更多的是关注到底是哪个厂
    fuxpro
        143
    fuxpro  
       2016-10-20 20:31:06 +08:00
    @kongkongyzt 其实我想说的是身为员工, 很多时候是没有选择的空间的,就算你是对的,也没有人会理解你的想法。这个时候我们要做的就是看开一些,挣钱才是正道,才是目的
    yxjxx
        144
    yxjxx  
       2016-10-20 21:58:35 +08:00
    🍄街?
    kongkongyzt
        145
    kongkongyzt  
       2016-10-20 22:10:44 +08:00
    @ayanamist 额, 那阿里现在用什么来代替 dubbo?
    julyclyde
        146
    julyclyde  
       2016-10-20 22:31:49 +08:00
    对于小众语言在生产环境的封杀,我是赞同的

    不过说实话 node ,从人数上讲,并不算小众了;只是本身并不适合做大规模开发而已。目前还只是玩具,不是生产工具
    chenjf2k
        147
    chenjf2k  
       2016-10-20 22:53:35 +08:00
    碰到这上级够倒霉的,估计创新力、个人魅力好不到哪去。

    楼主不要放弃。。。
    itoolset
        148
    itoolset  
       2016-10-20 23:11:14 +08:00
    其实你可以曲线救国,选择 vert.x
    se77en
        149
    se77en  
       2016-10-21 10:31:35 +08:00
    啥也不说了,发图吧。
    JacksonTian
        150
    JacksonTian  
       2016-10-21 12:09:13 +08:00
    发简历给我呀。 puling.tyq@alibaba-inc.com
    JacksonTian
        151
    JacksonTian  
       2016-10-21 12:13:59 +08:00
    @florcava 杭州是生产模块数量最多的几个城市之一。
    jinwyp
        152
    jinwyp  
       2016-10-21 12:18:49 +08:00
    我只能说 如果用 java 的 spring boot 不如用 PHP , 用 PHP 不如用 NODEJS

    为什么?
    1 spring boot 虽然简化了很多配置,但实际上就对 restful 服务上比 php 和 nodejs 差太多, 从路由,控制器,错误处理,中间件(没有), 表单验证,字段验证, json 处理转对象差太多了。 尤其是 json 转类, 在 PHP 中非常容易,在 nodejs 根本不需要这步, json 就是 js 语言内置的

    2 为什么 PHP 不如 nodejs ?

    因为前端你没有办法抛弃 js , 无论你后端用什么语言,前端必须要用 js ,从而必须要用 nodejs 做一些前端的打包工作。 就是说你的技术栈里必须要用 nodejs 无法抛弃。 那么为了节省成本,如果前后端用一种语言,从开发,部署,运维上省了多少事情。 从代码上将,字段验证,可以前后端使用同一个库,代码完全不需要写两遍。 还有前端页面模版只有 nodejs 实现, 没有 PHP 和 java 实现, 无法做同构。

    3 性能, nodejs 目前看来是脚本最快的, 目前在 Go 是静态语言最快的,未来 nodejs 和 go 完全可以解决性能问题。 java spring boot 性能 真的很慢。 PHP7 也不是一个量级的。 Go 如果是 100 , nodejs 能有 50 , PHP 只有 15 左右。



    总结 ,当综合选择一种技术,应该尽量从客观条件来选择, 就是 性能和开发效率。
    性能决定了在创业初期和后期不需要换架构。 例如 facebook twitter , PHP 性能不行了, Ruby 性能不了。 必须要换
    开发效率决定了 招聘人员的成本,维护的成本。 换成 java 只有一个条件就是大数据方向不过也是 scala 了,目前 Go 做 API 已经完胜 JAVA

    包括楼主的领导很多考虑技术是从主观条件,就是说我只会 JAVA ,那么我就选 JAVA 。 这种思想反而是影响团队的,到时候肯定会出现一大堆 java 遇到的问题。

    最后说语言是死的,人是活的, 选择语言是为了更好的工作, 不会就要去学。 否则大家都用 C 语言开发算了。
    jinwyp
        153
    jinwyp  
       2016-10-21 12:21:13 +08:00
    顺手看了一下手头双 11 核心系统代码, 457 个包依赖,全部自动升级,至今 0 故障 //@逗 B 码农死小马: 回复 @jerry 蛋蛋哥:梦想还是要有的,我在阿里 /蚂蚁金服做了 5 年 node 开发,没有用过 shrinkwrap ,按照阿里的体量和 node 应用的范围,国内很难找到其他公司 node 的使用规模能够比得上吧?去试试

    http://weibo.com/1751144103/EcMGoxuSW?from=page_1005051751144103_profile&wvr=6&mod=weibotime&type=comment
    arkia123
        154
    arkia123  
       2016-10-21 14:13:17 +08:00
    用 typescript 写 nodejs ,那些 java 程序员就能看懂了。
    语言不是障碍!!!只是国内跟国外比落后太多(编程思想)
    国外公司不存在前端和后端,只是 developer 。开发完全靠喜好,能更好的解决问题就行了
    yourlin
        155
    yourlin  
       2016-10-21 14:49:24 +08:00
    喜闻乐见~
    从你们厂的应用上看用 java 确实可以降低工程成本
    inherited
        156
    inherited  
       2016-10-21 15:17:40 +08:00
    @jinwyp Java 不止有 Spring boot 啊,只需要 restful 服务为什么不用 Play Framework 和 Akka http ,性能好开发效率也不低. 个人感觉回调不太适合作为异步编程的抽象方式,有点过于底层了。 Coroutine 和 Actor 都比直接用回调要好
    jinwyp
        157
    jinwyp  
       2016-10-21 22:50:38 +08:00
    @inherited play 很好 可是你用 java 开发就没意思了,用 play 肯定是 scala 最好用啊
    7timesonenight
        158
    7timesonenight  
       2016-10-22 02:09:50 +08:00
    喜闻乐见~
    国内公司特点,一方面实际事实上团队保守(怕担责、喜甩锅),用人成本花费吝啬;另一方面面子上喜欢装 B 高喊拥抱新技术。
    最后的结果就是流产。
    jack80342
        159
    jack80342  
       2017-10-29 17:49:10 +08:00
    最近翻译了最新的 Spring boot 官方指南,欢迎 fork。https://www.gitbook.com/book/jack80342/spring-boot/details
    shihty5
        160
    shihty5  
       2018-05-03 14:19:33 +08:00
    挖坟,今天大家对 Node 还是 JAVA 怎么看。 小而美的创业公司是否可以从 Node 直接开始
    developerworks
        161
    developerworks  
       2018-07-13 23:17:00 +08:00
    Node.js 不是不好, 前端同学一般都是重度用户, 但是对于服务器端来说. 要求不一样.

    我自己玩了一圈, 从 Java 到 PHP, 从 PHP 到 Node.js, 从 Node.js 到 Erlang/Elixir, 现在有回来了. 走来一圈才知道, 做项目, 端对合作需要工程化, Node 的生态远远达不到工程化的要求.

    对于中大型项目来说, 用 Node 你需要做的事情是 Java 的 N 倍, 才能达到与 Java 一样的工程化效果.

    从建筑的角度对比 Node 和 Java, Node 有点想砖瓦房, Java 是钢筋混凝土结构的塔楼.
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2871 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 13:08 · PVG 21:08 · LAX 06:08 · JFK 09:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.