本文首发于阿里云开发者社区: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]) …