阿里云 OCS SDK for NodeJS介绍

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介:

作者:熊亮

 

阿里云 SDK for NodeJS 是为 NodeJS 开发者提供使用阿里云各项服务的统一入口,由阿里云UED团队负责开发维护。目前集成了OCS(Memcached), OSS, RDS(MySQL) 三项阿里云服务。代码地址:https://github.com/aliyun-UED/aliyun-sdk-js

 

使用阿里云 OCS SDK for NodeJS 接入阿里云 OCS 将会变得非常简单。当你通过试用或者购买获得阿里云 OCS 服务的实例,即对应的 ocsKey, ocsSecret 后。使用如下代码:

// 获取阿里云SDK实例

var ALY = require(‘aliyun-sdk’);

// 创建 OCS memcached 实例

// 其中,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 完美的结合了。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
9天前
|
消息中间件 分布式计算 DataWorks
DataWorks产品使用合集之如何使用Python和阿里云SDK读取OSS中的文件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
8天前
|
移动开发 运维 JavaScript
阿里云云效操作报错合集之遇到Node.js的内存溢出问题,该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
8天前
|
JavaScript Shell 应用服务中间件
阿里云云效操作报错合集之Node.js构建报错,该如何排查问题
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
8天前
|
JavaScript IDE 持续交付
阿里云云效产品使用合集之如何配置 Node.js构建任务让其在Windows环境中进行
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
1月前
|
网络协议 安全 调度
阿里云公共DNS发布支持鸿蒙系统版的SDK
阿里云公共DNS发布支持鸿蒙系统版SDK,赋能鸿蒙开发者快速接入阿里云公共DNS服务。公共DNS将帮助接入的鸿蒙应用免除LocalDNS劫持困扰、解析加速、精准调度。
|
29天前
|
运维 JavaScript Devops
阿里云云效操作报错合集之node.js构建时,报错:The build failed because the process exited too early.该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
29天前
|
算法 小程序 开发工具
视觉智能开放平台操作报错合集之同样的图片路径(上海阿里云),sdk报错code.400,是什么原因
在使用视觉智能开放平台时,可能会遇到各种错误和问题。虽然具体的错误代码和消息会因平台而异,但以下是一些常见错误类型及其可能的原因和解决策略的概述,包括但不限于:1. 认证错误、2. 请求参数错误、3. 资源超限、4. 图像质量问题、5. 服务不可用、6. 模型不支持的场景、7. 网络连接问题,这有助于快速定位和解决问题。
|
2月前
|
弹性计算 运维 Serverless
Serverless 应用引擎产品使用之在阿里函数计算中,使用阿里云API或SDK从函数计算调用ECS实例的服务如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
2月前
|
JavaScript Java Maven
云效产品使用常见问题之android sdk 构建出aar后,上传到私有maven仓库失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
9月前
|
API 开发工具 Android开发
解决 Android App 上架 Google play后 ,签名变更,第三方sdk无法登录
解决 Android App 上架 Google play后 ,签名变更,第三方sdk无法登录
210 0