阿里雲 OCS SDK for NodeJS介紹html
阿里雲技術團隊:熊亮node
阿里雲 SDK for NodeJS 是爲 NodeJS 開發者提供使用阿里雲各項服務的統一入口,由阿里雲UED團隊負責開發維護。目前集成了OCS(Memcached), OSS, RDS(MySQL) 三項阿里雲服務。代碼地址:https://github.com/aliyun-UED/aliyun-sdk-jsgit
使用阿里雲 OCS SDK for NodeJS 接入阿里雲 OCS 將會變得很是簡單。當你經過試用或者購買得到阿里雲 OCS 服務的實例,即對應的 ocsKey, ocsSecret 後。使用以下代碼:github
// 獲取阿里雲SDK實例web
var ALY = require(‘aliyun-sdk’);數據庫
// 建立 OCS 的 memcached 實例express
// 其中,host 爲實例的 ip 地址編程
var memcached = ALY.MEMCACHED.createClient(11211, host, {瀏覽器
username: ocsKey,緩存
password: ocsSecret
});
// 向 OCS 中寫入數據
memcached.add(‘hello’, ‘world’, function(err, data) {
// 若是寫入數據錯誤
if(err) {
console.log(‘add error:’, err);
return;
}
// 寫入數據成功,打印返回值
console.log(‘add success:’, data);
});
經過以上幾行代碼,咱們就能很是簡單的接入並使用 OCS 的服務了。寫入後讀取也一樣很是簡單,以下:
// 向 OCS 中查詢數據
memcached.get(‘hello’, function(err, data) {
// 若是查詢錯誤或者失敗
if(err) {
console.log(‘get error:’, err);
memcached.end();
return;
}
// 若是查詢成功,打印返回值
console.log(‘get success:’, data.val.toString());
});
就像訪問本地運行時內存中的對象同樣簡單,這體現了 NodeJS 開發便捷性和 OCS 的易用性。可是不只僅如此,本文將爲你們介紹 NodeJS 以及如何使用 NodeJS 和 OCS SDK 構建高效,可靠,可擴展的web應用後臺。
NodeJS 介紹
Node.js是一個能夠快速構建網絡服務及應用的平臺 。該平臺的構建是基於Chrome’s JavaScript runtime,也就是說,實際上它是對Google V8引擎(應用於Google Chrome瀏覽器)進行了封裝。
Node 自己運行 V8 JavaScript。什麼是 V8?V8 JavaScript 引擎是 Google 用於其 Chrome 瀏覽器的底層 JavaScript 引擎。不多有人考慮 JavaScript 在客戶機上實際作了些什麼?實際上,JavaScript 引擎負責解釋並執行代碼。Google 使用 V8 建立了一個用 C++ 編寫的超快解釋器,該解釋器擁有另外一個獨特特徵;您能夠下載該引擎並將其嵌入任何 應用程序。V8 JavaScript 引擎並不只限於在一個瀏覽器中運行。所以,Node 實際上會使用 Google 編寫的 V8 JavaScript 引擎,並將其重建爲可在服務器上使用。太完美了!既然已經有一個不錯的解決方案可用,爲什麼還要建立一種新語言呢?
NodeJS 的特色
高性能
V8引擎自己使用了一些最新的編譯技術。這使得用 Javascript 這類腳本語言編寫出來的代碼運行速度得到了極大提高,卻節省了開發成本。對性能的苛求是Node的一個關鍵因素。 Javascript是一個事件驅動語言,Node利用了這個優勢,編寫出可擴展性高的服務器。NodeJS 採用了一個稱爲「事件循環(event loop)」的架構,使得編寫可擴展性高的服務器變得既容易又安全。提升服務器性能的技巧有多種多樣。NodeJS 選擇了一種既能提升性能,又能減低開發複雜度的架構。這是一個很是重要的特性。併發編程一般很複雜且佈滿地雷。NodeJS 繞過了這些,但仍提供很好的性能。
非阻塞
Node採用一系列「非阻塞」庫來支持事件循環的方式。本質上就是爲文件系統、數據庫之類的資源提供接口。向文件系統發送一個請求時,無需等待硬盤(尋址並檢索文件),硬盤準備好的時候非阻塞接口會通知Node。該模型以可擴展的方式簡化了對慢資源的訪問, 直觀,易懂。尤爲是對於熟悉 onmouseover、onclick 等 DOM 事件的用戶,更有一種似曾相識的感受。
運行 Javascript
雖然讓 Javascript 運行於服務器端不是 NodeJS 的獨特之處,但倒是其一強大功能。不得不認可,瀏覽器環境限制了咱們選擇編程語言的自由。任何服務器與日益複雜的瀏覽器客戶端應用程序間共享代碼的願望只能經過 Javascript 來實現。雖然還存在其餘一些支持 Javascript 在服務器端 運行的平臺,但由於上述特性,Node發展迅猛,成爲事實上的平臺。
阿里雲 OCS SDK for NodeJS
阿里雲 OCS 服務採用的是基於 SASL 認證的 Memcached 二進制傳輸協議。實現該協議的 NodeJS 開源模塊不多,有一些模塊如 memjs 雖然實現了 SASL 認證和 Memcached 二進制傳輸協議,可是不支持命令隊列即在一個命令返回數據以前沒法執行新的命令,這在實際項目開發中是沒法接受的。所以,阿里雲 OCS SDK for NodeJS 基於 memjs 增長了命令隊列,異常處理,自動從新鏈接等功能,使 NodejS 開發者快速接入阿里雲 OCS 服務成爲可能。
該開源項目代碼託管在 https://github.com/aliyun-UED/node_memcached ,歡迎有興趣的同窗貢獻代碼。
另外,必定會有人問到 Redis 的問題。Redis 是一種經常使用的開源內存鍵值存儲系統,可支持有序集合和列表等數據結構。Redis 在 NodeJS 社區中比較常見,並且也有不少成熟的模塊支持。在阿里雲 OCS 服務後續集成 Redis 後開發者能夠自行選擇 Memcached 或者 Redis 做爲存儲系統,咱們屆時也會將 Redis SDK 集成到阿里雲 SDK for NodeJS 中。不過對於開發者來講在代碼開發方式上,Memcached 與 Redis 很是類似,只不過所須要調用的接口不一樣而已。
使用阿里雲 OCS SDK 開發 web 應用
在文章開始咱們介紹了 OCS SDK 的最基本用法,好比咱們想記錄 web 應用的總訪問量,能夠在 OCS 中使用一個 key 表明這個總訪問量,每當產生用戶訪問的時候,能夠從 OCS 中讀取 key 的值 value,將 value + 1 後再保存到 key。在這個場景中使用 OCS 在合適不過了,由於咱們可能有多個 ECS 實例做爲 web server,它們能夠向同一個 OCS 作讀寫操做;另外也不用擔憂 ECS 實例掛掉後總訪問量這個數據消失的問題;最後, OCS 的高性能也保證了咱們的業務需求。
除此以外,使用 OCS 最合適的地方就是 session 存儲了。在 web 服務器上的 session 能夠存儲在
|內存
|磁盤文件系統
|數據庫
|Memcached 等緩存系統
從性能,可用性角度考慮,存儲在 Memcached 是最好的選擇。那麼在 NodeJS 中該如何實現呢。
通常來講,開發 NodeJS web 應用須要選擇一個合適的 web 框架,咱們以目前最流行的 web 框架 Express 舉例。
Express 框架內建了對 session 處理的支持,它默認的 session 存儲機制是內存存儲,而將其餘 session 存儲機制做爲可擴展選項。以下代碼所示:
// 建立一個 express 實例
var app = require(「express」);
// 內存存儲 session
var session = require(‘express-session’)
// 使用 express 的 session 處理,並使用內存存儲機制
app.use(session({ secret: ‘keyboard cat’, cookie: { maxAge: 60000 }}))
// 處理 HTTP 請求,req 表明請求對象,res 表明返回對象
app.use(function(req, res) {
// sess 即爲該請求所對應的用戶的 session,不用擔憂,express 已經幫你分析請求所帶的 cookie
// 並將該 cookie 所對應的 session 從存儲中找到並提供給你
var sess = req.session
// 下面是對 session 對象的處理
if (sess.views) {
sess.views++
res.setHeader(‘Content-Type’, ‘text/html’)
res.write(‘<p>views: ‘ + sess.views + ‘</p>’)
res.write(‘<p>expires in: ‘ + (sess.cookie.maxAge / 1000) + ‘s</p>’)
res.end()
} else {
// 更新後的 session 會在請求處理結束後自動寫回到 session 的存儲中
sess.views = 1
res.end(‘welcome to the session demo. refresh!’)
}
})
從上面的代碼中可見,咱們只須要實現 session 的存儲機制,便可以和 express 完美的結合了。
原文地址:http://weibo.com/1644971875/BhO8z64ME