好长一段时间没更新博客了,之前答应了朴灵大大,用了阿里Node性能平台 要写下体验报告的,但因为创业,一直时间不定。然后今年又是事业几何上升期。现在总算是闲下来,好好写下我用阿里Node性能平台之后,给我带来的收益。然后给新人介绍下阿里Node的基本使用。

本文主要针对阿里Node性能平台和eggjs的结合使用。发现个人开发者想用阿里Node性能平台来管理自己现有的平台,在网上还是很难找到相关文章的。

阿里Node性能平台简介

在介绍怎么使用前,先介绍下阿里Node,阿里Node在目前来说,对于大项目和一些长期运营的平台来说,还是蛮有意义的。其实阿里Node给我的感觉,更像是阿里自身使用eggjs之类的框架后,面对大规模集群,专门修改了底层的node,然后专门用来管理集群Node,现在专门开放出来给大家使用。

那么我们为什么要用阿里Node性能平台呢?

简单的说

监控

查bug(如:内存溢出)

如何使用eggjs+阿里Node

eggjs本身也算是阿里系的,所以对阿里Node的支持就不用说了,而且阿里Node本身也是从自用剥离出来的。

相关资料

eggjs阿里Node性能平台egg-alinodeegg-alinode使用介绍

eggjs如何使用阿里node

eggjs结合阿里node其实很简单

只要npm install egg-alinode,注册alinode插件,然后在config里面添加你的alinode专属的server、appid、secret就可以了。

node ex 监控模板 nodejs 性能监控_后端

node ex 监控模板 nodejs 性能监控_前端_02

如何拿到alinode的server、appid、secret

进入到阿里Node性能平台,创建应用,然后拿到相关key。

node ex 监控模板 nodejs 性能监控_前端_03

填完这些就算完了嘛?

不对不对!刚刚说过,alinode是修改过底层框架。那么,这个node其实原则上讲不是原生的Node,所以我们需要去下载对应的alinode版本,然后才能完整的使用阿里Node性能平台的全部功能。本地安装阿里Node的方法,在阿里云上有相关介绍了,这里不细讲。

第一篇文章提过使用docker来运行Node,现在我们要修改底层环境,那么只需要修改对应镜像就好了,因为node8.6以上,在对https的处理上有bug,所以特地找上朴灵大大,搞了个node8.5版本对应的alinode。

FROM registry.cn-hangzhou.aliyuncs.com/aliyun-node/alinode:3.4.0#和原来对比只修改了这行
#old: FROM node:8.5
MAINTAINER Mumudeveloper
#hardcode
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN yarn global add forever

# Create www directory
RUN mkdir -p /www
COPY ./api /www

# Install www dependencies
WORKDIR /www
RUN yarn install

EXPOSE 7001
# Define default command.  
ENTRYPOINT forever start  -l forever.log -a index.js && tail -f ~/.forever/forever.log

至此,提交了代码更新了docker后,你就可以在Node性能平台上看到对应的应用了。

有了监控后,我们能做什么?

上面说了,监控和查bug,监控这块就不谈了,比较泛。关键是bug(如:内存泄漏,这块真的是拯救了我),那个时候,我的项目刚起步,项目会定期的去各大资源网获取信息,然后突然有一段时间,我的内存不停的泄露,不停的重启,这个直接影响到很多的用户。

node ex 监控模板 nodejs 性能监控_javascript_04

这个时候,就可以祭出阿里Node平台大杀器

在阿里Node性能平台进入到对应内存泄漏的实例

node ex 监控模板 nodejs 性能监控_后端_05

保存堆快照

node ex 监控模板 nodejs 性能监控_ViewUI_06

进行转存和分析,然后你就能把你的程序运行的内存快照保存起来,想想保存了整个内存快照,要找出bug还不容易嘛?像我最开始,完全不懂性能平台怎么用,单是在上面乱点,就找到了熟悉的字眼(附图马赛克,ip地址)

node ex 监控模板 nodejs 性能监控_javascript_07

然后,在好几个地方都能开到这个字眼,然后发现到处都是,^.^还用说,内存泄漏的地方肯定就被定位出来了,原来是请求对应的服务器报错,然后error被catch住后并没被销毁,导致占用了内存。

深入使用的,就得等我更有时间的时候来写了Orz