阿里云 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