2016年3月26日北京NodeParty线下聚会小记

3月26日下午,本人同师弟肖子达,参加了一次北京NodeParty线下聚会。NodeParty是国内Nodejs技术社区cnodejs.org 的一干活跃分子的线下技术沙龙活动。虽然我不是他们社区的成员,但因为本人技术栈是meanjs架构,因此很有兴趣跟其他开发者见见面,交流一下工作经验。当天我就记录了十分详细的笔记资料(我日常晒surface pro的需要,已经晒了3年),不过之后我紧接着就因为忙于毕业论文的事所以无暇发出此博客。现在稍微轻松些了,把之前欠账补完。

会议地点:北京三里屯科技寺,一个创业公司聚集之地

与会人员相互介绍

其实参加这一类线下活动,了解与会人员的情况和背景,跟会议本身的内容是一样重要的。与会者年龄最小估计值是22岁,最大目测有40+的。可能跟nodeParty的组织者背景有关,来的人不少是创业公司的,当然,其中也有不少就是来招聘的。由于现在北京创业氛围浓厚,创业公司招聘一直是个大难题,想要招到人HR们无所不用其极,经常到各种技术沙龙走穴那是必然。其他来自外企、国企、金融公司、IT大公司、学校的都有,不过在校生好像只有我和我师弟而已。像我们这么积极参加各种技术沙龙的学生并不多,因为很多学生还没有这方面的需求。此外,由于现在微信在信息入口点的垄断地位,与会者中做微信相关开发的不少,难怪现在不少开发者都把微信叫做新时代的IE。与会者普遍展现出了对新技术的热情。对我们的研究内容,可视化也是相当感兴趣。其中,好几家公司,包括oneAPM、上海英特尔等都在做可视化相关的内容,如控制面板、可视化报表等等。

以下简要的介绍与会人员:

我和师弟 中国传媒大学 计算机学院研究生
Maco和陈** robot 小米云平台的服务器端 java转nodejs
杨**  nodejs管理监控
付* python janhgo 程序学习croousera
张** 索尼移动
刘**  电信系统集成公司 angular
毕**  nodejs 和 mongodb
*** H5 nodejs
朱**  OpenGL
戴** PLC自动化 医疗设备智能化
*** 地理信息系统
王* 上海英特尔 敏捷开发 one APM reactjs wawa
*** 前端 nodejs
** 交易系统开发
**  微信相关web开发:微信已经成为了新时代的IE
**  微信内部的web app
***  Ios开发
*** 医疗创业公司 php java
李** 可视化系统 商业数据分析 java后端开发
张*  科技寺的管理员
胡** 架构、项目管理 敏捷分享 工作推荐
***,罗辑思维研发部,前端开发

......

Speaker1 桑世龙 空弦科技 CTO

这为演讲者也是个创业者。目前在天津创业,空弦科技 CTO,开源项目Moajs作者, 全栈程序员 公司目前使用技术主要是Node.js,技术栈算所谓的MEAN(mongodb + express + angular + node);

曾在新浪,网秦等工作过;做过首席架构师、技术总监;带过前端、后端、数据分析、移动端负责人。 目前主要从事技术架构 + 招人工作

1. Why Node.js ?

nodejs的全球现状,已经有ebay、google、微软等数十个大公司使用,前后端应用都很广泛。过去我们总喜欢拿nodejs的异步能力作为其优点说事,但现在Nodejs真正的卖点应该说是“能以较低成本开发性能较强的程序”。

Nodejs的优点

  • Nodejs过去常被抨击的缺点,callback hell也有了解决方案,promise、generator 、async
  • NPM包管理强大,有25.6万个包了
  • 同样不优化,性能比大部分语言好;同样优化,也比其他语言(java、go等)简单。
  • 有足够多的选择和架构的平衡,如实不够,java补充
  • 测试相关的tdd/bdd 测试覆盖率
  • 规范化的standard, 相关插件足够简单易用

Nodejs的缺点:

缺少rails一样的大杀器(express已经沦为底层、sails和meteor还都太弱),scaffold脚手架, ORM太弱

架构和平衡的选择:

如果语言层面搞不定,就架构层面做

业务边界、模块拆分、面向服务

MQ、RPC、cache

运维、监控、自动化

如果架构也搞不定,就用别的语言做

比如excel生成可以用java

比如短信推送apns

我们用Nodejs做什么?

  • API服务
  • 前端moa-frontend
  • SDK
  • 辅助开发cli工具

目前进度:

  • 开发moajs框架, express/mongoDB
  • Pm2部署, 前后端分离
  • 阿里云slb负载, alinode监控

2. 我眼中的Node.js核心

2.1 小而美的哲学

2.2 从LAMP到Mean技术栈、

创业公司的瓶颈

  • 缺人
  • 开发速度要求高
  • 稳定性低

选择MEAN架构的好处:

  • 把握趋势,以后nodejs前景非常看好,前后端统一
  • 在架构上可以屏蔽风险,不孤注一掷,不一叶障目,可以用其他语言辅助
  • 招人成本性价比较高,技术栈新,容易留住人才

nodejs在Web开发上可用的框架:Express, koa Restify, hapi Sails, meteor

Nodejs模块开发:普通模块、Cil、脚手架scaffold、C/C++ addons

3. 快速开发实践

3.1 业务边界优化

3.2静态API理论

3.3 API约定

3.4.  。。。

3.5 npm模块化

Npm 私服和私有模块

3.6编写生成器

3.7 前后端分离

4. 全栈 or 全烂 ?  

4.1 相关工具:Grunt、bower、Tdd/bdd、Standard

4.2 前端开发4阶段

  • Html, css, js
  • Jquery
  • Anguarjs,vuejs
  • React, vuejs

4.3 hybird开发

H5开发一次,多平台应用,现在非常流行

4.4跨平台

 5. 未来

Feature maybe  future

全栈的问题:前端不会DB,后端不会UI

5.1 从后端转 :阶段循序渐进

5.2 从前端转:一般前端都非常容易学会

 Speaker2 王龑 开发者,OneAPM

这位演讲者名字非常龙傲天,原来在上海英特尔工作,现在在一家创业公司oneAPM工作。OneAPM公司为服务器,应用,客户端提供监控和报警服务。王龑负责NodeJS/前端相关的监控,性能分析工作,这次分享,他将围绕使用nodejs和前端的典型应用架构的devops实践,包括docker,CI,APM服务等。

Node.JS 项目中的性能监控的原理 和 Docker 的使用  此次演讲所用PPT

Nodejs 性能分析

探针:最早是由J.C. Huang 教授提出的,它是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针(又称为“探测仪”),通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,从而实现测试目的的方法。

这里以alert为例

var _original=window.alert;
window.alert=function(){
    console.log('in');
    var result=_original.apply(this,arguments);
    console.log('out');
    return result;
}

在这里例子中我们可以得到3个值:进入、退出和返回值。对于运行分析可能就需要从返回值中来获得。当然实际工作不可能这么简单,一个集成化的便携式探针散布和数据归档就成为了需求。而oneAPM公司工作就是将以上功能集成化。在Nodejs程序上加载他们提供的oneapm包即可。node -r oneapm server.js

举例:前端埋点

比如说我们想在下面这个网页监控页面访问和button访问次数。

该页面的代码假设是下面这样:

那么我们可以在目标函数处增加一些额外的操作,如下图所示,我们加载了一个监视器,其中包含两个参数pageview和event,分别用以监控页面渲染次数和按钮点击次数:

基于采样的性能监控

有了探针,就可以通过数据采样进行性能监控。下面给出了一些监控数据的可视化效果:(图片来自:http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html)

这个是linux环境下nodejs的CPU运行状况火焰图,它能简单有效地进行CPU性能分析。火焰图中纵坐标代表CPU占用率,横坐标是时间。不同颜色代表CPU上运行的不同运行单元,红色代表系统模块,黄色是C++,绿色是js,蓝色是编译环境。数据来源自探针采样,具体的说是通过创建一个定时中断来收集当前的程序计数器、函数地址或跟踪整个堆栈,并将这些转换为一个可视化报告。

内存中各个模块之间的互相调用关系图,好像蓝色是系统模块,其他的记不得了

基于docker的前端自动化工作流

所谓docker,是现在火的不了的容器技术,使用它可以让服务器运行更多的应用程序。据说,借助经过全面调优的容器系统,你就可以在同一硬件上拥有数量比使用Xen虚拟机或KVM虚拟机多出四到六倍的服务器应用实例。容器与虚拟机之间的区别主要在于,虚拟机管理程序对整个设备进行抽象处理,而容器只是对操作系统内核进行抽象处理。 这意味着使用docker技术的服务器,其产生的实例只能运行同一种类型的操作系统。

Dockerfile- gitlab- jenkins - eslint - unit test - build - tag - push -run - a/b testing

最后是他所在项目组所做的性能监控可视化界面。不吹牛,换我做界面能可能做得更好。

我也知道类似的工作,像百度、阿里等公司的内部,就有小组专门做用户研究。通过在前端界面上接入许多用户不可见的探针,来收集数据统计用户偏好,前端性能情况等,并将报告提供给项目组。并且接受服务的项目组通常不需要对此提供太多的帮助,整个流程是自动化的。但以上服务,对于小公司而言就不大有精力去搞了。而oneAPM之类的公司就是针对中小公司提供类似的服务。我觉得这也是个很好的着眼点。就像19世纪旧金山金矿开采,全美的探险者都跑去淘金,但也有人专门做起给淘金者卖饮用水和衣服的工作,结果也发了大财,诞生了石油巨头和牛仔裤。

会后我和师弟去三里屯的波斯波利斯餐厅点了个“石榴酱核桃炖鸡”带走。这里有三家中东风味餐厅,分别是阿拉伯餐厅、波斯波利斯餐厅、土耳其妈妈餐厅。中东互为敌人的三国,在这里倒是很和谐地开在一起。

附录:cnode网站上关于此次活动的介绍

我师弟肖子达的关于此次活动的博客,有些内容比我的更详细,因为事后重复看过相关PPT