迁移Nodejs项目到阿里云函数计算 – 以Parse为例

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2022/02/16/deploy-parse-to-aliyun-serverless/



本文首发于:https://developer.aliyun.com/article/869641 修改后发布在本博客。

Parse Platform是一个开源的BAAS框架,可以大幅加速各类应用快速迭代。官方提供了各位常见SDK,对于开发者也可以缩短了应用的开发周期,实在没有的,还可以用Rest API。

原来的Parse.Inc还提供托管,但是后面关闭了,国内也有一些托管服务商。

Parse Platform基于NodeJs,背后的数据库可以选择MongoDB或者PG,文件和PUSH服务可选很多。

自己搭建一个Parse是相当容易了,官方提供了命令行工具,也有Docker镜像,但是这种模式需要至少一台云主机和一个MongoDB数据库,相对来说有一定成本,特别是对于一些探索性的APP,流量低,访问需求不稳定,后期可能有突发流量。

综合来看Serverless平台是一个不错的选择,本文以阿里云为例,介绍如何快速基于阿里云函数计算和阿里云Serverless DB搭建一个Parse。

本文需要基本的Serverless平台使用经验。由于篇幅所限,本文只涉及最基本的跑起来,包括发布和数据库存储,文件存储和其他优化不涉及。

阿里云函数计算

阿里云函数计算是事件驱动的全托管计算服务。通过函数计算,用户无需管理服务器等基础设施,只需编写代码并上传。函数计算会准备好计算资源,以弹性、可靠的方式运行代码,另外还提供日志查询、性能监控、报警等功能。

函数计算的费用由调用次数+函数实例资源使用量+公网出流量组成,另外如果长期使用,还可以购买资源包,相对价格更低。

阿里云每月为每个账号提供一定的免费资源,对于少量使用可以完全覆盖。

迁移

普遍性的来说,迁移一个既有系统到Serverless平台主要有以下几个步骤

  • 识别系统的外部依赖
  • 创建适用于Serverless平台的部署工程
  • 修改即有系统代码
  • 部署

识别外部依赖

Parse的外部比较简单,从官方文档的说明和配置示例可见

  • Node 8 or newer
  • MongoDB version 3.6
  • Python 2.x (For Windows users, 2.7.1 is the required version)

这些Serverless平台都可以提供,而数据库,特别是MongoDB在各大云厂商价格相对较高,不过阿里云额外提供了Serverless版本,价格相对优惠,新用户9.9元3个月试用。

开通后可以在数据库连接中查到连接字符串,但是这里的连接字符串是不能直接用的,需要替换成类似 /parse?authSource=admin。

创建Serverless工程

为了方便调试和开发这里使用Serverless Devs工具,安装和创建项目如下

npm install @serverless-devs/s -g
s config
s init

这里我们选择express模版,最后会获取一个如下的项目

其中s.yaml是配置文件,定义了部署需要的一切信息,包括需要的内存大小、超时时间、触发器等等。由于Parse本身就是通告HTTP提供服务的,所以使用默认的HTTP触发器就可以了。其他信息可以按照需要修改。

适配项目

由于这里只展示最小应用,所以仅做最简单的配置

var express = require('express');

var app = express();

var ParseServer = require('parse-server').ParseServer;

var api = new ParseServer({
    databaseURI: 'mongodb://xxxx/xxx',
    appId: 'demo',
    masterKey: 'demoKey',
});

app.use('/', api);

app.listen(9000, () => {
    console.log('start success.');
}).on('error', (e) => {
    console.error(e.code, e.message)
})

这个和普通的nodejs服务没有什么区别,其中的端口9000需要和s.yaml的CAPort配置一致就行了。

由于Rest API语义设计,需要支持GET、POST、DELETE等,阿里云函数计算这里存在一个转发问题,需要在配置文件中变更触发器

      triggers:
        - name: httpTrigger
          type: http
          config:
            authType: anonymous
            methods:
              - GET
              - POST
              - PUT
              - DELETE

阿里云函数计算默认的Nodejs版本有点低,也考虑到其他风险,这里最好也自定义Nodejs环境。直接下载linux版本的到code目录,修改bootstrap脚本内容为

#!/bin/bash
./node-v12.13.0-linux-x64/bin/node index.js

这样就会使用我们指定的Nodejs版本启动Parse了。

部署

部署可以直接使用

s deploy -y

会将相关资源打包以后上传到阿里云函数计算,也会包含node_module中的内容,这里的大小大概40M。

部署以后在函数计算管理界面可以看到。

这里直接使用自带的测试URL测试,可以看到Parse工作正常。

结语

由于阿里云函数计算提供的便利支持,迁移此类项目的难度并不大。本文演示的是Custom Runtime的模式,但是对于更复杂的项目,Custom Container是一个更好的选择。

Serverless还有一个潜在问题就是冷启动时间,对于大部分项目都需要专门处理,本文并没有涉及到。简单粗暴的方式就是使用预留实例的方式保持有已经启动的实例在服务,可以极大优化用户体验。

参考

https://parseplatform.org/

https://help.aliyun.com/product/50980.html



本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2022/02/16/deploy-parse-to-aliyun-serverless/

发表评论