KeystoneJS之雲中漫步

海興發表於2015-06-08

Keystone是以Express和MongoDB為基礎搭建的Node.js CMS和Web應用程式平臺。

自從三年前接觸到Node.js,我就開始定期在GitHub上搜一下跟Node.js相關的專案。搜尋結果列表變得越來越長,這個開發體系也在不斷的發展和完善。我眼看著其程式設計理念、最佳實踐、開發工具、庫、框架從異彩紛呈到趨於穩定,構建在Node.js平臺上的應用程式也越來越多。

Keystone就是我在瀏覽GitHub上的搜尋結果時看到的,它給我的感覺就像是幾年前Java圈裡的AppFuse。遵循一套開發慣例把一些精選的框架、庫和工具整合到一起,可以作為專案的初始模板。但Keystone又不光是專案模板,它還可以當作一個CMS來用。Keystone就像在它的網站上所宣稱的那樣,“在你需要的功能上領先一步!在Node.js中,用Keystone搭建資料驅動的網站、應用程式和API是最容易的。”

你可以先去看看用Keystone搭建的網站。然後回來跟我們一起看看用Keystone搭建一個網站有多容易!不過我們首先還需要搭一個執行環境。

阿里雲上的Node.js

配置雲伺服器ECS例項

阿里雲的伺服器配置很簡單,分為基本配置、網路、映象、儲存、密碼及購買量五大項。對於部署Node.js而言,其中唯一需要注意的就是CPU的核心數量,因為Node.js是單執行緒應用,所以選擇1核就夠了。因為用於測試,所以我們選擇了2G記憶體、1M頻寬,所用的作業系統是Ubuntu 14.04 64位。下圖是本文所用例項的配置:

enter image description here

  • 圖1-阿里雲ESC例項配置

安裝NVM,Node.js與MongoDB

現在我們有了一臺乾淨的Ubuntu伺服器,可以在上面安裝Node.js和MongoDB了。如果你不想用付費的阿里雲主機,也可以找一下免費的雲主機,或者在本機上用虛擬機器建立一個Linux映象,對我們後面的過程來說應該都是一樣的。

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不僅提供了豐富的分析資料,資料視覺化工作也做得可圈可點。可以在監測頁面上直觀的看到各種監測結果,下面來看一下在上面的壓力測試下看到的幾個監測結果頁面。

情報彙總

enter image description here

  • 圖2 情報彙總

Web應用過程

Web應用過程頁面彙總顯示了監測期內所有收到過的請求的監測結果。

enter image description here

  • 圖3 Web應用過程彙總

點選左側欄的應用過程,還可以看到該應用過程的詳細資料。包括該應用過程相關的MongoDB查詢的監測結果。

enter image description here

  • 圖4 選定Web應用過程

NoSQL

在NoSQL頁面中可以看到所有MongoDB操作時長。

enter image description here

  • 圖5 MongoDB操作時長彙總

還可以看到響應時間曲線。

enter image description here

  • 圖6 MongoDB響應時間曲線

總結

從建立阿里雲主機到看到聽雲的應用監測分析結果,整個過程所用的時間還不到1個小時。隨著各種庫和工具的不斷髮展,Node.js作為Web應用開發生態體系的生產效率越來越高,加上有聽雲這樣優秀的監測分析系統助力,產品推出後的調優和維護也越來越容易。

然而這些平臺和產品雖然可以降低我們進入的門檻,但並不會降低開發Web應用程式時對我們的要求。所幸的是這些知識的體系和脈絡越來越清晰,不同平臺和環境之間的共識也越來越強烈。除了初學者,我相信即便是經驗豐富的開發人員,也需要不斷學習新的知識才能跟上技術發展飛速的腳步。

相關文章