月度归档: 2022 年 2 月

  • 优化托管于阿里云函数计算的Node.js应用 – 以Parse为例

    本文首发于阿里云开发者社区:https://developer.aliyun.com/article/871751,修改后发布在本博客

    上文介绍了如何快速迁移Parse到阿里云函数计算,但是这只是一个跑起来的例子,还有一些问题需要我们优化。本文会介绍常见的优化点和方法,从方法来看适用于所有Serverless平台的应用。

    Serverless的缺陷

    没有任何技术形态是完美的,Serverless提供了良好的可伸缩性和并发性,提供了细粒度的资源分配,优化了成本,相对的也有难以调试等缺点。

    这些问题是Serverless这种技术形态自身造成的,并不是阿里云函数计算独有的。不同的云厂商可以通过周边建设来弥补一些问题,比如阿里云函数计算的日志和监控相对比较完善,Serverless Devs工具解决了一部分调试问题。

    用更传统的观点来理解Serverless的本质,可以看作扩容缩容策略极端激进的集群,而每个函数都是部署在这一个一个机器上而已。云厂商的机器特别迷你,计价单位颗粒小。而缩容策略可以将为0,扩容策略可以近乎无限大,缩容策略是固定,不可以自定义。

    那么对于一个随时可能创建随时可能被销毁的机器,部署于其中的服务要面临两个方面的问题

    • 服务销毁
    • 服务启动

    服务销毁时内存、文件系统的数据都丢失了。服务启动的时候需要一些必要的初始化,需要启动程序。

    我们先看下销毁引起的持久化问题。

    持久化改进

    Parse是支持文件上传的,存储文件的FileAdapter是可以自定义的。

    一般来说对于文件需求,可以直接使用阿里云对象存储OSS,一般选择标准型就可以了。

    Parse官方不支持阿里云OSS,理论上可以使用parse-server-s3-adapter,但是我之前没有配置过,可以完全可以自定义,直接使用OSS官方的SDK就行了。

    'use strict';
    
    var OSS = require('ali-oss').Wrapper;
    const DEFAULT_OSS_REGION = "oss-cn-hangzhou";
    
    function requiredOrFromEnvironment(options, key, env) {
        options[key] = options[key] || process.env[env];
        if (!options[key]) 
  • 迁移Nodejs项目到阿里云函数计算 – 以Parse为例

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

    本文首发于: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