KeystoneJS之云中漫步

Keystone是以Express和MongoDB为基础搭建的Node.js CMS和Web应用程序平台。node

自从三年前接触到Node.js,我就开始按期在GitHub上搜一下跟Node.js相关的项目。搜索结果列表变得愈来愈长,这个开发体系也在不断的发展和完善。我眼看着其编程理念、最佳实践、开发工具、库、框架从奇光异彩到趋于稳定,构建在Node.js平台上的应用程序也愈来愈多。git

Keystone就是我在浏览GitHub上的搜索结果时看到的,它给个人感受就像是几年前Java圈里的AppFuse。遵循一套开发惯例把一些精选的框架、库和工具集成到一块儿,能够做为项目的初始模板。但Keystone又不光是项目模板,它还能够看成一个CMS来用。Keystone就像在它的网站上所宣称的那样,“在你须要的功能上领先一步!在Node.js中,用Keystone搭建数据驱动的网站、应用程序和API是最容易的。”github

你能够先去看看用Keystone搭建的网站。而后回来跟咱们一块儿看看用Keystone搭建一个网站有多容易!不过咱们首先还须要搭一个运行环境。mongodb

#阿里云上的Node.js数据库

##配置云服务器ECS实例npm

阿里云的服务器配置很简单,分为基本配置、网络、镜像、存储、密码及购买量五大项。对于部署Node.js而言,其中惟一须要注意的就是CPU的内核数量,由于Node.js是单线程应用,因此选择1核就够了。由于用于测试,因此咱们选择了2G内存、1M带宽,所用的操做系统是Ubuntu 14.04 64位。下图是本文所用实例的配置:编程

图1-阿里云ESC实例配置

  • 图1-阿里云ESC实例配置

##安装NVM,Node.js与MongoDBubuntu

如今咱们有了一台干净的Ubuntu服务器,能够在上面安装Node.js和MongoDB了。若是你不想用付费的阿里云主机,也能够找一下免费的云主机,或者在本机上用虚拟机建立一个Linux镜像,对咱们后面的过程来讲应该都是同样的。bash

###NVM与Node.js服务器

nvm是专为Node.js设计的工具,其名称是Node.js version manager的缩写。使用nvm能够管理多个不一样版本的Node.js环境,更便于之后的升级维护。nvm的安装也很简单,不过在那以前,咱们要先在刚才建立的实例里添加一个用户。虽然用root也能够安装nvm,但会由于访问权限的缘由遇到一些小麻烦,而且那也不是个好习惯。

在终端窗口中经过ssh链接到刚建立好的实例上,若是是在Windows环境下,也能够经过putty链接。点击阿里云实例管理界面上的“链接帮助”能够看到详细的帮助信息。链接进去以后先建立用户,按提示提供相关信息,设置密码:

useradd demo

而后将这个用户添加到sudo用户组:

useradd demo sudo

切换为demo用户:

su - demo

接下来先安装nvm构建必需组件所需的工具包:

sudo apt-get update
sudo apt-get install build-essential libssl-dev

工具包安装好之后,到nvm的GitHub项目主页上找到下载并执行安装脚本的wget命令(可能会有不一样的版本号),在终端中执行:

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.25.4/install.sh | bash

由于安装nvm会修改 ~/.profile 文件,因此你须要退出再登陆demo用户,或者执行下面的命令,以便让当前会话了解这个变化:

source ~/.profile

至此为止,咱们的nvm就已经安装好了,接下来能够用它安装Node.js了。

要查看有哪些版本的Node.js能够安装,能够执行下面的命令:

nvm ls-remote

写这篇文章时的最新版本是0.12.4,因此咱们用nvm安装了这个版本:

nvm install 0.12.4

nvm通常会将默认的Node.js切换为最新安装的版本,咱们也能够特别指明要用哪一个版本:

nvm use 0.12.4

安装完成后,执行一下node -v能够看到当前所用的版本号。

###安装MongoDB

在Ubuntu上安装MongoDB也很简单,只须要4步:

  1. 导入包管理系统须要用到的公钥:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10

2.为MongoDB建立list文件:

echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list

3.重载本地包数据库

sudo apt-get update

4.安装最新版的MongoDB

sudo apt-get install -y mongodb-org

装好以后将它做为服务启动:

sudo service mongod start

若是你用的是其它操做系统,请参考MongoDB官网上的安装指南

##Keystone应用Demo

准备工做完成了,接下来进入咱们的主题。

Keystone提供了一个Yeoman生成器,能够用它生成一个Keystone脚手架项目,做为你后续开发的基础。Yeoman生成器的使用很是简单,首先用npm全局安装:

npm install -g generator-keystone

而后在指定的目录下运行:

yo keystone

生成器会提出几个问题,主要是你想要什么功能,而后进行配置,并把你须要的全部文件复制到你的项目目录中。它还会从npm中安装依赖项,帮你作好准备。

你刚刚建立了本身的第一个KeystoneJS项目,恭喜你!在命令行中运行:

node keystone

打开http://localhost:3000,看看Keystone给咱们生成了一个什么样的项目。整个过程只须要几分钟,一行代码也没有写,只用几个命令你就获得了一个带有博客、图片库、联系表单的网站,并且还有后台管理界面。 若是你想深刻了解Keystone,请参阅其官方文档

#中军账内听云起

##监测分析系统与压力测试

一个没有接入监测分析系统的网站不能算是一个完整的网站。监测分析系统能提供网站访问状况的重要数据,是了解用户使用习惯和进行性能分析的重要依据。性能对网站流量有十分巨大的影响,这是业界共识。而网站的调优主要取决于性能分析。“分析”的意思是指找出到底是什么拖慢了网站的速度,若是你在加快内容渲染上投入了大量的精力,但实际上问题倒是出在跟外部社交网站链接的插件上,那你不只仅是浪费了时间和金钱,还会致使大量客户的流失。

目前支持Node.js的监测分析系统还不是不少,咱们这里用了简单易用的听云Server。但这个演示用的网站不可能有什么访问量,因此咱们决定用压力测试工具loadtest来制造一些访问请求。

loadtest的安装和使用很简单,首先在终端窗口中输入下面的命令安装:

sudo npm install -g loadtest

loadtest能够加在构建文件中做为任务执行,也能够做为脚本独立发起请求,为了简单起见,咱们这里将它做为脚本执行。针对Keystone的Demo应用,咱们能够打开三个终端窗口,分别对不一样的URL发起请求:

loadtest -c 5 --rps 5 http://localhost:3000/gallery  
loadtest -c 5 --rps 3 http:// localhost:3000/blog  
loadtest -c 5 --rps 6 http:// localhost:3000/

其中参数-c用于指定并发请求数量,参数--rps用于指定每秒发起请求的次数。loadtest功能很强大,感兴趣能够自行查阅loadtest在GitHub上的项目主页

##听云Server

听云Server经过在服务端应用中植入探针,实现对应用代码、关系型数据库、非关系型数据库、外部服务的监控;即时获取相关性能数据并进行智能分析,发现应用性能问题并定位性能瓶颈,提供性能问题诊断、追踪及优化依据。目前支持Java、PHP、.Net和Node.js探针。网站上的安装文档和使用说明也很详细。因此咱们这里只是简单介绍一下部署和设置的过程,最后再看一下它的监测分析结果。

###部署

在听云网站注册后,进入控制台,首先点击右上角的“新建应用”按钮,进入探针下载页面。这个页面上有个License Key,把它复制下来,后面配置时会用到。而后选择要安装的语言包,对咱们来讲固然是Node.js。接下来点击下一步。

按照页面上的指示操做:

  • 一. 执行安装探针命令
  • 二. 修改配置文件信息
  • 三. 从新启动应用服务器

其中第二步里的“修改nodejs启动主文件,将 require('tingyun')添加到首行”,就是修改项目根目录下的keystone.js文件。

###应用警报通知

听云Server提供了丰富的设置选项,能够根据本身的须要定制监测分析目标和规则。对于咱们来讲,最基本的是首先设置应用警报通知,听云Server目前提供了两种警报通知方式,在应用的性能和错误率警报阈值达到设置值时经过邮件和短信发送通知。

警报阈值在“设置->应用阈值设置”页面内进行设置,能够分为两个级别,分别是橙色阈值和红色阈值。 当应用的性能或错误率超过橙色阈值5分钟后将触发“警告”的警报事件;当超过红色阈值3分钟后将触发“严重”的警报事件,并触发警报通知动做。 红色阈值必须高于橙色阈值 应用性能警报阈值使用Apdex分数来做为警报基线,橙色和红色阈值可分别在如下Apdex分数值中选取:

  • 无(不设置该等级的性能阈值)
  • 0.94,对应Apdex的“优秀”级别
  • 0.85,对应Apdex的“通常”级别
  • 0.70,对应Apdex的“不满意”级别
  • 0.50,对应Apdex的“难以忍受”级别

错误率阈值可由用户手工填写1到100的百分数,其中橙色阈值缺省值为1%,红色阈值的缺省值为5%。红色阈值必须大于橙色阈值。

警报阈值设置好之后,就能够到“设置->警报通知设置”页面设置本身接收报警所用的邮箱和手机号了。

###监测分析数据图表

听云Server不只提供了丰富的分析数据,数据可视化工做也作得可圈可点。能够在监测页面上直观的看到各类监测结果,下面来看一下在上面的压力测试下看到的几个监测结果页面。

####情报汇总

图2 情报汇总

  • 图2 情报汇总

####Web应用过程

Web应用过程页面汇总显示了监测期内全部收到过的请求的监测结果。

图3 Web应用过程汇总

  • 图3 Web应用过程汇总

点击左侧栏的应用过程,还能够看到该应用过程的详细数据。包括该应用过程相关的MongoDB查询的监测结果。

图4 选定Web应用过程 ![enter image description here][10]

  • 图4 选定Web应用过程

####NoSQL

在NoSQL页面中能够看到全部MongoDB操做时长。

图5 MongoDB操做时长汇总

  • 图5 MongoDB操做时长汇总

还能够看到响应时间曲线。

图6 MongoDB响应时间曲线

  • 图6 MongoDB响应时间曲线

#总结

从建立阿里云主机到看到听云的应用监测分析结果,整个过程所用的时间还不到1个小时。随着各类库和工具的不断发展,Node.js做为Web应用开发生态体系的生产效率愈来愈高,加上有听云这样优秀的监测分析系统助力,产品推出后的调优和维护也愈来愈容易。

然而这些平台和产品虽然能够下降咱们进入的门槛,但并不会下降开发Web应用程序时对咱们的要求。所幸的是这些知识的体系和脉络愈来愈清晰,不一样平台和环境之间的共识也愈来愈强烈。除了初学者,我相信即使是经验丰富的开发人员,也须要不断学习新的知识才能跟上技术发展飞速的脚步。

相关文章
相关标签/搜索