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應用程序時對咱們的要求。所幸的是這些知識的體系和脈絡愈來愈清晰,不一樣平臺和環境之間的共識也愈來愈強烈。除了初學者,我相信即使是經驗豐富的開發人員,也須要不斷學習新的知識才能跟上技術發展飛速的腳步。

相關文章
相關標籤/搜索