今日惊闻一个噩耗,目前现有的 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 在我厂道阻且长,经历了重重困难,落得一个这样结局,也罢。君要臣死、臣不得不死。
101
sherlocktheplant 2016-10-20 11:54:52 +08:00
其实除了性能上的考虑外 js 的开发效率高太多 国内推广困难的主要问题是语言障碍 老外换语言也就是分分钟的事情 熟练度这种东西迟早能积累起来
|
102
zuotech 2016-10-20 11:57:27 +08:00
java ,nodejs, php,都是类 C 语言, 每个语言都有自己的特性, 看企业的需求, 再牛 B 的语言代码写的不优化, 算法不高明, 那也是垃圾啊, 像我就三种语言都写, 不同场景用不同的语言, 完全没有什么问题, 主要是架构层面的业务剥离;
|
103
romisanic 2016-10-20 11:58:36 +08:00
为啥感觉好好的根据当前业务和发展方向以及稳定性等方面考虑做出的基本最优的一个决策,到 lz 和很多层主眼里,就成了语言之争?
这种语言之争会被大厂车间主任作为技术选择的理由? 不要闹好嘛~ |
104
shijingshijing 2016-10-20 12:00:39 +08:00
@murmur 其实最关键的地方在于,相对于漫天的流氓 app 横行肆虐, web browser 的沙箱模式提供了一个很好的治理他们的方法。凭什么我要给你我的 IMEI ,位置信息,电话号码通讯录等等隐私,乖乖的给我在盒子里面呆着,用不用看我心情。
那个前淘宝二手市场 - 现在的闲鱼,就是走了这么个路线,强制把用户往 app 那边推, web 端无法发布商品,无法回复,甚至某段时间还无法查看评论,结果估计是数据断崖式下降,又改回可以查看评论了。 这种吃枣药丸 |
105
janxin 2016-10-20 12:03:05 +08:00
从小公司的角度来说,减少语言复杂度是非常必要的:如果只是做做 web 开始, nodejs 是个不错的选择。否则的话, nodejs 未必是一个最优解,尤其是从招人和维护复杂度角度考虑。从另外一方面来说, js 对前端工程师来说是十分熟悉的,但是对后端工程师来说那种扭曲的写法绝对不是好方法。从分工上来说,后端语言提供 API 方式更方便后端实现自己本来就擅长的业务逻辑,无可厚非。而且从前端工程师培养后端工程师对小公司来说是成本非常高的一种方式,除非是个人信仰或者这人有很高的天赋,我还是不建议了。
|
106
peneazy 2016-10-20 12:04:51 +08:00
node.js 在某些场景下性能确实很高,开发也快,但国内目前缺少这方面的人才,还需要一定的积累才行,不可盲目选择 node.js
|
107
shijingshijing 2016-10-20 12:05:30 +08:00
@mathgl 我举 facebook 的 HHVM 这个例子,并不是说 PHP 好或者不好,我只是说,每个企业会根据自己的实际情况来决定是否继续沿用老的框架和体系,比如 facebook 有足够 nb ,技术储备,人力资源都够,就自己从底层重新写一个;而对京东来说,.Net 换 java 从头再来成本更低,那么就大家一起搬家。
对企业来说,技术无所谓哪个好哪个差,能够更低成本的解决问题,就是好技术。 |
108
janxin 2016-10-20 12:06:51 +08:00
另外 node7 发布 async/await 我就打算引入 nodejs 了,毕竟开发效率好,也没那么扭曲了呀
|
109
Chrisplus 2016-10-20 12:17:53 +08:00
个人对一个语言 /技术的评价,跟企业对一个语言 /技术的评价
出发点是不一样的 |
110
jhdxr 2016-10-20 12:20:32 +08:00
@shijingshijing 其实我觉得 php7 是打了 HHVM 的脸。。。之前之所以要开发 HHVM ,而且还放弃了一定的兼容性,就是因为 Facebook 认为 php 已经无药可救只能另起炉灶\了。结果 php7 做到了在 userland 层非常良好的兼容...
|
111
mathgl 2016-10-20 12:47:06 +08:00
|
112
kaneyuki 2016-10-20 12:57:21 +08:00
视角不一样, node.js 的人贵且难招,开发者肯定喜欢能实践新技术,但管理者也要考虑开发成本和可维护性的问题。
|
113
yonka 2016-10-20 13:11:09 +08:00
@p412726700 这么说还真是 A 厂啊。 不是大前端战略用 nodeJS 代替 php 吗? 我还关注了好一阵子相关技术博客。 虽然 A 厂好多技术博客 15 年前后就停更了。
|
114
zeromike 2016-10-20 13:17:10 +08:00
我就想问这是哪个厂,我是绝逼不去的
|
115
mathgl 2016-10-20 13:21:23 +08:00
@latyas json 也可以用压缩嘛. 用 hessian 我猜是历史原因了,如果没有特别的好处,估计也没人有动力去换。
|
116
newghost 2016-10-20 13:24:04 +08:00
dubbo 不是阿里的 Java 框架吗?
|
117
dong3580 2016-10-20 13:25:34 +08:00
|
118
freetg 2016-10-20 13:28:10 +08:00
A 厂技术一天不如一天
|
119
hheedat 2016-10-20 13:35:53 +08:00
楼上很多都说 nodejs 开发效率高,能有 拍黄片 开发效率高? Java 开发效率就低了?我看未必
|
121
hantsy 2016-10-20 14:17:34 +08:00 1
NodeJS 做前端页面响应处理, API Gateway , WebSocket 还可以,,,后端大部分服务应该由 Java 承担。不管理架构如何复杂, MicroService ,分布式, Messaging , Big Data , Cloud/Container/DevOps 支持, Java 的成熟和优势不是一点点。
|
122
fundon 2016-10-20 14:23:36 +08:00
要用到刀刃上,一个大型系统,是一个有机的组合。“就看大师你的内力了,及癖好了。”
|
123
tony601818 2016-10-20 14:24:41 +08:00
如果你们厂主要是 Java 的,那就不要用 node ,毕竟会的人少。除非你愿意花费时间开一个宣讲会。
|
124
itbeihe 2016-10-20 14:31:45 +08:00
比较关注是那个厂~ ~
|
125
crazycookie 2016-10-20 14:34:57 +08:00
是大厂么?
是大厂就应该拍手称赞 |
126
sampeng 2016-10-20 14:41:54 +08:00
楼主的推测太狭隘。从厂方利益而言,减少语言复杂度是没啥大错,增加语言复杂度会增加风险。没几个大 leader 赶去承担这样的风险。
java 的招人一抓一大把,招来就能用,还能用本来沉淀好的东西。 nodejs 招人。。恩,我想 hr 最有发言权了。。 |
127
dremy 2016-10-20 15:22:39 +08:00 via Android
求问到底是不是阿里啊,按照占比来说, node 好像是占 5%的
|
128
rainysia 2016-10-20 15:43:21 +08:00
|
129
ckontem 2016-10-20 15:50:22 +08:00
浮躁的前端.....都是天天造轮子惹的祸
|
131
RockShake 2016-10-20 16:19:47 +08:00
节哀
|
132
dingyp 2016-10-20 16:48:03 +08:00
哎 我们厂来个真是厂里硬件出来的,所以东西都重写,听说 json 都自己解析,好在我是 android (做吃等死中,有认识的吗 :)
|
133
ayanamist 2016-10-20 17:09:37 +08:00 via iPhone
澄清下,阿里内部几乎没有用 dubbo 的了,所以不可能是阿里。
|
136
cYcoco 2016-10-20 17:36:06 +08:00
我本来就觉得这玩意没啥用。。
|
137
wengang285 2016-10-20 17:41:53 +08:00
看到 dubbo 就知道是猫厂了
|
138
firefox12 2016-10-20 17:51:28 +08:00
是天猫吗? 还是阿里?
|
139
baozijun 2016-10-20 17:56:17 +08:00
@jjx node 肯定不是输在性能上。复杂的业务逻辑,缺失的中间件,成熟的类库,各类 debug profiling 的工具,决定的 Java 必然有很长的统治时间.知乎的这句话说明 java 太成熟了,不得不因循守旧.
|
140
zohan 2016-10-20 18:19:25 +08:00
我想知道这上面回复的,有多少个人写过 node
|
143
fuxpro 2016-10-20 20:31:06 +08:00
@kongkongyzt 其实我想说的是身为员工, 很多时候是没有选择的空间的,就算你是对的,也没有人会理解你的想法。这个时候我们要做的就是看开一些,挣钱才是正道,才是目的
|
144
yxjxx 2016-10-20 21:58:35 +08:00
🍄街?
|
145
kongkongyzt 2016-10-20 22:10:44 +08:00
@ayanamist 额, 那阿里现在用什么来代替 dubbo?
|
146
julyclyde 2016-10-20 22:31:49 +08:00
对于小众语言在生产环境的封杀,我是赞同的
不过说实话 node ,从人数上讲,并不算小众了;只是本身并不适合做大规模开发而已。目前还只是玩具,不是生产工具 |
147
chenjf2k 2016-10-20 22:53:35 +08:00
碰到这上级够倒霉的,估计创新力、个人魅力好不到哪去。
楼主不要放弃。。。 |
148
itoolset 2016-10-20 23:11:14 +08:00
其实你可以曲线救国,选择 vert.x
|
149
se77en 2016-10-21 10:31:35 +08:00
|
150
JacksonTian 2016-10-21 12:09:13 +08:00
发简历给我呀。 puling.tyq@alibaba-inc.com
|
151
JacksonTian 2016-10-21 12:13:59 +08:00
@florcava 杭州是生产模块数量最多的几个城市之一。
|
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 语言开发算了。 |
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 |
154
arkia123 2016-10-21 14:13:17 +08:00
用 typescript 写 nodejs ,那些 java 程序员就能看懂了。
语言不是障碍!!!只是国内跟国外比落后太多(编程思想) 国外公司不存在前端和后端,只是 developer 。开发完全靠喜好,能更好的解决问题就行了 |
155
yourlin 2016-10-21 14:49:24 +08:00
喜闻乐见~
从你们厂的应用上看用 java 确实可以降低工程成本 |
156
inherited 2016-10-21 15:17:40 +08:00
@jinwyp Java 不止有 Spring boot 啊,只需要 restful 服务为什么不用 Play Framework 和 Akka http ,性能好开发效率也不低. 个人感觉回调不太适合作为异步编程的抽象方式,有点过于底层了。 Coroutine 和 Actor 都比直接用回调要好
|
158
7timesonenight 2016-10-22 02:09:50 +08:00
喜闻乐见~
国内公司特点,一方面实际事实上团队保守(怕担责、喜甩锅),用人成本花费吝啬;另一方面面子上喜欢装 B 高喊拥抱新技术。 最后的结果就是流产。 |
159
jack80342 2017-10-29 17:49:10 +08:00
最近翻译了最新的 Spring boot 官方指南,欢迎 fork。https://www.gitbook.com/book/jack80342/spring-boot/details
|
160
shihty5 2018-05-03 14:19:33 +08:00
挖坟,今天大家对 Node 还是 JAVA 怎么看。 小而美的创业公司是否可以从 Node 直接开始
|
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 是钢筋混凝土结构的塔楼. |