Node 在沪江的大规模实践

作者/分享人:戴亮
向 Ta 提问
戴亮,10年前后端开发经验,2014年加入沪江前端架构组,负责 UI 组件,移动打包平台的开发推进Node前后端方案的落地,曾在 GMTC 上分享“沪江基于 Node.js 大规模应用实践”,《移动 Web 前端高效开发实战》的作者之一。

我是来自沪江前端架构组的架构师戴亮,这场分享将由我发起。沪江从 2016 年下半年开始在生成环境中使用 Node 渲染页面给外部用户使用。今年以来,沪江在全产线中全面使用 Node。本次分享将介绍这一年以来,沪江在 Node 方面的一些经验,文章会介绍以下内容:

  1. 在使用 Node 之前沪江的前后端分离方案演进
  2. 基于Koa框架搭建的 Aconite 框架
  3. 制定合理的规范,提升质量,完善文档来降低产线接入成本
  4. 制定合理的边界,使项目风险可控
  5. 如何发布、部署
  6. 如何合理的记录日志
  7. 采用监控和报警来保障服务的稳定
  8. 其他的一些经验,如压测,项目推进方式

实录提要:

  • auth 是如何设计和实现的?使用的是什么 Npm module?
  • view 是 Node 直出的,那么直出的时候用的什么模板引擎?
  • 现在的前后端分离,业界没个统一的标准,怎么理解前后端分离?
  • Node 怎么性能调优?现在沪江压测的 qps 是多少?
  • Node 如何做中间层的项目实践?
  • 后端全部用 Node 合适吗?Node 怎么作为微服务和 Spring Cloud 等 Java 微服务框架集成?
  • 使用 Node 做服务器端的公司多吗?
  • 强缓存策略具体怎么设置的?
  • 沪江的 Node 是跑在 Docker 中吗?结合监控机制有做基于 Docker 的动态伸缩吗?
  • 沪江用的什么 Node 框架?
  • 对于前端人员学习 Node 以及后端知识有什么好的建议吗?
  • cluster 和 fork 模式当初是如何做出选择的?为什么最后选择了 cluster?
  • 日志为什么没有采取从 nginx 记录?log4js 主要记录的哪方面日志?
  • 使用负载均衡了吗?具体用的什么负载均衡方案?
  • Node 的页面路由规则怎么样设置才能高效匹配?
  • Node 相对于现在主流的 Java、PHP 等有什么优势的地方?
  • Node 层调用后端接口时,怎么管理与后端的接口?如何进行高效联调?
  • log4js 日志是直接写入到磁盘里的,还是透传到 pm2 再写的?
已有422人预订
预订达标
文章出炉
交流日期
     
17.10.25
17.11.07
17.11.15 20:30
查看文章评论/提问
请问auth是如何设计和实现的?使用的是什么Npm module?
戴亮: 这里只是调用沪江的API服务获取用户信息. 并没有做其他额外的事情
和君
支持专家
嘿๛大东🐼
专家666!资瓷!
小菜
看了您的文章,感觉view是node直出的,那么直出的时候用的什么模板引擎呢?如果是vue或者react的话,怎么权衡ssr和同构?如果是ejs之类的,那么前端在开发js的时候用的是什么架子?
戴亮: 默认采用nunjucks,也支持其他模版. 同构通过中间件实现,都是依托react或者vue框架本身,中间件内部只是统一了一些逻辑,但渲染方法需要外部传人,使用方自行处理同构细节
小菜: 也就是你们的view层是纯函数?传入什么模板就输出什么模板,中间不做数据fetch之类的操作?接收vue或者react的renderHtmltoString 吐出的模板返回给浏览器是么
戴亮: fetch 数据通过Component上定义的固定名称的静态方法。在render中间件中,依据路由中间件得到的组件信息,可以并行请求数据。 然后将数据保存在store当中,最后调用外部提供的render方法,渲染出页面。 渲染的时候,也是通过React/Vue提供的类似renderHtmltoString方法。这里,render组件就是做了: 1. 解析components信息 2. 调用静态方法获取数据(依赖组件的固定名称静态方法) 3. 调用渲染方法渲染数据(外部传入)。
你可能还喜欢
使用 Mpvue 开发微信小程序的最佳实践
美团点评技术团队
Java 优化方案:设计模式
Array老师
普通程序员如何快速提升自己
王俊生
使用 Python 全栈打造淘宝客微信机器人
州的先生
大厂面试官亲述:0~3年移动研发工程师必备技能
richardcao
Java 高级特性: Lambda 表达式
游客
微信扫描登录