文章目錄
  1. 1. Preface
  2. 2. 用 Node.js 构建海量页面渲染服务
    1. 2.0.1. 问题2,稳定性
    2. 2.0.2. 问题3:koa中间件异常
    3. 2.0.3. 问题6:CDN缓存机制
  • 3. 手机淘宝Hybrid性能优化实战
  • 4. alinode与Node应用性能管理
  • 5. Node.js加速Qzone
    1. 5.0.1. 问题1: 架构模型
    2. 5.0.2. 问题4: 发布机制
    3. 5.0.3. 问提5: 日志记录
  • 6. DataV数据可视化引擎
  • Preface

    有幸参加大阿里举行的D2前端大会,今天看到知乎也有类似参加D2是什么体验你有什么收获?之类的提问,
    所以我也稍微总结一下,也对得起这来回的机票钱 :)

    这次大会的主题是融合, 知乎上的网友这么解读的, 说得真好,我这里把它引用过来。。

    1
    2
    3
    4
    5
    6
    7
    著作权归作者所有。
    商业转载请联系作者获得授权,非商业转载请注明出处。
    作者:徐飞
    链接:https://www.zhihu.com/question/38637676/answer/77516017
    来源:知乎

    今年是第十届d2,主题是融合,确实,今年的主要话题有三块,一块仍然是新框架和前端方案的探索,一块是node相关的深入应用,一块是最贴近主题的融合,也就是多端合一的技术方案。

    其实说直白了,主要涵盖了几个方面:

    • react-native
    • nodejs
    • 一些轮子

    此行目的也很简单:

    1. 关注nodejs在各个企业中的实践经验及技术架构
    2. 关注讲师们演讲风格/技巧

    对我听过每个议题的内容做一下总结:

    用 Node.js 构建海量页面渲染服务

    这个是第一场演讲,干货非常多,比较惊喜的一场演讲,也很惊讶在阿里内部对于nodejs有如此广泛的应用
    整个演讲可以听出,nodejs在手淘中,主要用于业务逻辑处理,html渲染上,也就是

    • nodejs替换了中间层(php),后端原来干嘛还是干嘛,该提供接口还是得提供接口
    • 页面渲染还是在nodejs端,不是单页模式(SPA)
    • 接口中转(私有协议代理等)

    边听边记录一些实践上具体疑问,准备最后QA环节提问,后面主持人没看到我,坐山顶的同学比较吃亏!!!
    不过大部分问题也都得到答案,这里列一下当时准备的一些问题,其中一些演讲过程中,就解答了这些问题。
    不得不说,演讲者内容方面准备得非常充分。

    问题列表:

    1. 架构模型是如何?
    2. 如何保证nodejs稳定性?
    3. koa中间件出现异常之后,会如何处理?
    4. 发布机制
    5. 日志记录
    6. CDN缓存机制

    其中第2,3,6个问题,讲师在后面的演讲中都有提到,总结一下:

    问题2,稳定性

    • 单元测试,单元测试,单元测试
    • 编写可测试代码
    • 代码覆盖率
    • cfork/graceful(这里也提到为什么不用pm2,跟我目前实践是一样的pm/graceful,有种原来他们也这么做感觉)
    • 日志记录,错误预警(短信,邮件)
    • 容灾机制

    问题3:koa中间件异常

    这个问题后面给出了答案,koa中间件的异常并不会导致挂掉,而是会在类似app.onerror的函数中统一处理,
    做一些日志记录,致命错误做告警之类的

    问题6:CDN缓存机制

    讲师提到他们用到了CDN缓存,一开始以为只是对js/css这些静态资源进行缓存,而实际上,不仅于此,他们还对实际的渲染出来
    的页面进行缓存,而具体的推送/刷新机制,他们内部应该有一套比较成熟的CDN方案,后面有机会再去详细了解一下,这个已经也超出
    前端解决的范围。

    问题 1、4、5 这几个问题,本来想休息时候请教一下讲师,由于时间关系,一直到会议结束,才找了Qzone的同学问了相同的问题,(-__-)b~

    手机淘宝Hybrid性能优化实战

    这场有两个同学一起讲的,原以为会有react native相关的实践,其实主要是一些性能优化方面的建议以及他们hybird实现的方案,
    优化的建议后面PPT出来之后都可以看到,这里就不赘述了,而hybird这一块挺有意思的,类似于,定义一些html标签属性,通过截获
    这些属性,把原来的标签替换成原生组件。这里我就在YY,如果浏览器外壳能够支持这个功能,那么写出来的webapp交互体验上就非常棒了。

    alinode与Node应用性能管理

    下午场抱着膜拜大牛的心情, 听了朴灵alinode与Node应用性能管理, 2年前就买过他的深入浅出nodejs,这本书真心不错,通俗易懂,推荐一下。
    听完整场的演讲,给我的印象是,腼腆的技术型奶爸,没有很花俏的ppt,没有俏皮的话,甚至现场互动都有点尴尬,但是有全面准备的示例代码和演示。

    分享的内容主要是围绕着alinode及阿里云提供的在线分析工具,主要功能就是在node端提供一个类似Chrome开发工具的Profiler,依赖于alinode,可以对
    线上实时Profile,实时抓取堆快照,然后利用他们提供的在线分析工具,排查线上内存泄漏CPU异常飙升 的问题。

    Node.js加速Qzone

    这场分享后面才进来,演讲嘉宾感觉很有气场,也有一些互动,因为是nodejs相关,也听得比较认真,这里罗列了一些关键点:

    • QQ nodejs装机量260台,qzone是80台服务+60台代理
    • 砍掉nginx代理,node直接提供http
    • 服务端渲染首屏(这个与手淘是一致的)
    • 本地html快照缓存,提升css响应速度
    • 服务端的fidller日志,实时日志下载
    • 流水日志

    Qzone在nodejs的使用上更加激进,直接把nginx这一层去掉了,他们如何做负载均衡的,会后跟这位同学了解到,
    在他们的网络层,还有另外一层做这个事情,可以更完整的做流量控制。

    上面提到的1,4,5 问题也在会后跟他沟通

    问题1: 架构模型

    这个其实是想问手淘那边的架构模型,后面找机会再去了解一下。Qzone 在这个问题上就是,直接让nodejs作为一层中转代理,也是他在演讲
    说的接入层,同事也做html模板渲染,协议转换等

    问题4: 发布机制

    由于他们有260台nodejs服务器,所以我想到,这么多服务器,他们发布程序是怎么进行的
    会后了解到,他分两部分解释,一个是nodejs的装机,另外一个是业务程序发布

    • nodejs 发布是可执行文件和依赖包一起打包,统一发布到各个服务器
    • 业务打包,业务代码与node_module一起打包,统一发布各个服务器

    这里他还提到一点,node_module他们是直接提交svn服务器,然后打包时候,从svn拉取,打包,再发布
    这里有点惊讶,难道他们是不知道npm shrinkwrap

    问提5: 日志记录

    对于线上的日志记录,他们有一套日志系统和流水系统,应该是有专门的团队做这个事情

    • 日志系统用于记录服务器端的每次操作,执行的动作
    • 流水记录则记录服务端收到的网络请求,完整的记录http请求的请求/回复,记录与其它接口的交互,并按照fiddler的文件格式进行存储

    DataV数据可视化引擎

    逼格颜值最高一场分享!分享嘉宾很会讲,在台上淡定自如,思路清晰,很喜欢这样的演讲风格。这里列一下一些关键点:

    • 性能上 webgl > svg > canvas
    • 大屏幕可以通过组合屏形式实现
    • 静态内容可以使用canvas绘制
    文章目錄
    1. 1. Preface
    2. 2. 用 Node.js 构建海量页面渲染服务
      1. 2.0.1. 问题2,稳定性
      2. 2.0.2. 问题3:koa中间件异常
      3. 2.0.3. 问题6:CDN缓存机制
  • 3. 手机淘宝Hybrid性能优化实战
  • 4. alinode与Node应用性能管理
  • 5. Node.js加速Qzone
    1. 5.0.1. 问题1: 架构模型
    2. 5.0.2. 问题4: 发布机制
    3. 5.0.3. 问提5: 日志记录
  • 6. DataV数据可视化引擎