Node.js 淘宝实现前后端分离了?而且还在 Java 和前端 JS 间架了 NodeJS?

hlxwell · July 03, 2014 · Last by Satellitehwx replied at January 07, 2017 · 53027 hits

最近一直在搞前后端完全分离的开发体验,觉得 Rails 就快成了空壳了,所有的代码都往 JS 里跑了,当然也遇到了各种 seo,和设计上的问题,总的来说我发现分离后世界变得更美好,对后端的 rails 以来越来越少,似乎只要最主要的就是 api 功能。

开发和测试起来也非常容易。

昨天看到杭 js 上 http://2014.jsconf.cn/slides/herman-taobaoweb/index.html#/ 淘宝居然也前后分离了? 一直搜不到那个 bigpiper 在哪里。我只搜到 bagpipe, http://html5ify.com/bagpipe

有没有人提供一些内部情报?

是的,我们的项目也完全分离了。

#1 楼 @qifengle 你们用 node 了?似乎 node 在 js 大量使用的项目里还是很有优势的。

前后端分离还要上 Rails ? 没必要吧,提供 api 就行了,找个轻量级的框架就可以搞定

#3 楼 @hlxwell 看完你分享的 ppt,结果发现我们的分离还是停留在 服务器和浏览器的第一阶段。算不上完全分离。项目不大,没有用 node

#4 楼 @neverlandxy_naix 主要不熟悉其他项目嘛,感觉 rails 除了 view 层,还有很多东西要用阿。。

#4 楼 @neverlandxy_naix 是的,你说的没错。当然 Rails 的好处是插件多,然后如果你如果去掉很多组件也可以比较容易用,而且返回 api 的话,其实速度也已经很快了。 最关键的是团队使用 rails 的时候,有个天然的规范在不用自己再去头疼规范。

需求决定技术方案,Rails 只是其中的一个 tool

bigpipe 吧

没想到首页也分离了,BTW: 阿里很多团队都做了这个工作,我在广告团队的时候 2010 年就配合前端做了

NodeJS 替代了 SpringMVC 和 WebX, 其实这些功能在 Java 里面都能实现。

PS: 这个 Slide 也太水了,前半部分发了无数搞笑图,下半部分啥也没说。还没最后一页 Blog 里面半篇内容多...

13 Floor has deleted

1939年9月,德国军队以保护德裔居民的名义发动闪电战入侵波兰领土,随即导致大英帝国与法国向德国宣战,从而引发第二次世界大战。

我觉得 JavaScript 前端工程师插手后端开发是非常不冷静的

#12 楼 @Saito 是啊,这个 slide 我觉得就是在炫耀一下,没有传达很多可参考信息。 对了你们纯 js 前段 SEO 怎么做的?

#11 楼 @fsword 分离的意思是,后端基本上就费了,就变成数据库返回一下就好了。

#8 楼 @rainchen 完全可行啊。

#16 楼 @hlxwell 我们没有完全前后端分离,不过前后端公用模板,可以相互切换。有性能问题,就切换到前端渲染。

模板在用 Handlebars

我一直在想这样做,抽象出 API 层,控制层 js,渲染层。里面文章的意思是加一个 nodejs 来支持浏览器渲染和服务器渲染。 针对一些项目我觉得还是不错的设计,普通的项目用 rails 默认的方式也挺好。

#12 楼 @Saito 就是,还是博客里面内容多。slide 需要照顾现场环境。

通过这篇 blog 学到了reveal.jszoom.js两个好东西,backend+nodejs+frontend的模式没看太懂啊,有 backend,nodejs 作甚的呢?

@qifengle 那 node 和 Java 之间是怎么通讯的?用 http+json 吗?

大公司已经出名了,可以不用屌 seo 了,小公司也跟风吗?

3 年前在 O2 做的几个项目就开始前后分离了,主要的理念就是弱化前端浏览器使其变成了一个和 ios, android 一样的终端,后端只需要实现一套 restful api, 完全与 represetation layer 分离. 我自己做的 88jimo(dot)com 也是前后分离的,SPA 带来的速度和用户体验还是不错的,确实 SEO 上面会很惨。

其实可以做到对于 搜索引擎和移动设备 在 server 端渲染,桌面设备在浏览器端渲染。 这样就没什么问题了

#26 楼 @jeff_duan #25 楼 @yakczh

SEO 现在解决方案已经很多了,所以基本不是什么问题,基本上就是检测如果当爬虫来的时候 url 会被改变,然后 nginx 给转到另外一个静态生成的页面那里去。所以不会太大问题吧

#24 楼 @billy node 就当是浏览器好了,第一次请求,去从 java 那里获取数据,然后渲染页面呈现到前端。 当前端已经在有基本的 js 后,就可以通过 ajax 部分请求页面了,这个是 bigpipe 的部分吧。

Slide 内容比较少 只有一些关键字 现场应该会讲的详细一些吧 不知道有没有视频

其实某些公司把搜索引擎搞死也是一个目的,当然不希望 seo 了...

看完博客,我可以更安心用 Rails 了,全栈是趋势。

#33 楼 @Rei 你看 https://medium.com/code-adventures/farewell-node-js-4ba9e7f3e52b expressjs 作者对 nodejs 说 byebye

我觉得在这个方面,其实很多时候还是要看,你的队伍领头人是不是靠谱。

#36 楼 @hlxwell 点赞

呵呵,我当年用了一个 php 的框架,后来他开发 ios 游戏去了,那时还没 github,现在网站都不见了,希望 DHH 老实点。

这个没必要跟着淘宝整,有的人是看了这个系列的文章 http://blog.jobbole.com/65513/

#38 楼 @debugger 这个文章就是他们写的

#39 楼 @tuliang 仔细看过,如果你选择 rails 就选择了全栈,否则可以不用 rails,去整各种高大上。

#40 楼 @debugger rails+node+ 客户端 js 感觉挺好的啊 就是他们方案里面的 java 换成 rails

#36 楼 @hlxwell TJ 真是太 cool 了...

仔细看了 ppt 后发现这种架构对于 Java 还说还是不错的解决方案。没看之前,觉得架个 nodeJS 在中间完全有点多余,不就是为了使用 nodeJS 的特性么,搞得这么复杂。这么做的优势,淘宝的同学已经介绍了,不过我还是有几点疑问:

  1. 由于 nodeJS 架在中间,不可避免某些 api 就会写两套,如果浏览器局部请求多得话,这种 wrapper 就会在 nodeJS 里面多起来,比如:浏览器 ajax request -> nodeJS( action api wrapper) -> Java (api) 。这个貌似是这种解决方案的通病,不知道有什么好的解决方案没有。
  2. 只让 nodeJS 成为 UI Layer 是非常聪明的设计,因为如果让 nodeJS 来承担部分业务逻辑,到处的 callback 估计会把大家写哭:),不过项目大了后,前端肯定会承担部分业务逻辑,问题就来了,前端的 Js 和后端的 nodeJS 估计就会有业务逻辑重叠的情况出现,这种情况是用 Js 重复写两遍呢?还是能共享前后端的 Js 业务模块?
  3. 在这里把 nodeJS 架在中间,我觉得还是为了更好的利用 nodeJS 的各种特性,比如 socket.io 消息推送,前后端 Js 代码的复用,但有没有可能去除这个中间层,让客户端再变胖点,比如 url 访问时,直接让 Java 来渲染,或者访问 Java 事先生成好的静态页面,其他局部请求直接获取后端 api 后采用 Javascript 模板渲染;那么 nodeJS 呢?我觉得,只用它来做它的优势项目,比如消息推送这些。

我最近也在学习前后端分离,我学习的是网易 nej 的模块化开发,大家可以看看这个http://music.163.comnej的网易还有好几个项目,不过学习资料很少,飞哥给了我个demo和ppt,有需要的同学,可以@我,当然使用

这种情景只适合淘宝这种大公司,只适合 java 这种大部队作战,小公司和个人还是老老实实撸 rails 去吧,淘宝这种方式别说开发,光部署就能把小团队累死

专门有个项目接手渲染流程的,淘宝、天猫都有,敝团队也有在做,欢迎投简历 [email protected] ^_^

#43 楼 @outman 请问 你在第 1 点中提到的浏览器 ajax request -> nodeJS( action api wrapper) -> Java (api) nodeJS 访问 Java API 是怎么访问的?Java 访问数据 提供 API nodeJS 去访问 请教下,能介绍下吗?谢谢

nodejs api 与 java api 的访问,可以用 rpc 啊,我猜淘宝用的 hsf,我个人在用 zeroc-ice rpc 解决跨语言调用。

#44 楼 @xiongxin8802 你好,请问能否麻烦您吧 demo 和 ppt 发给我一份呢?您提供的链接无法打开啊!我的邮箱 [email protected] 谢谢!

#45 楼 @ddyy

去年就为公司搭建了这样的架构,nodejs+thrift+java,java 端是主方法启动的各种微服务,通过 redis 共享 session;当时公司做后台的就我一个,大半月个时间就搞定,现在团队也组建起来,公司后续的产品和项目都采用这样的架构

#50 楼 @liusp2018 nodejs+thrift+java 这样的案例有没有有的话麻烦发我一份 [email protected]

You need to Sign in before reply, if you don't have an account, please Sign up first.