# serverless开发体验

# 微信小程序云开发

去年有个项目用了微信小程序的云开发,开发完后认为有如下的优缺点。

优点:

  1. 可以直接调用一些内置方法,不需要调API了。

  2. 可以直接拿openid等,省了一些事情。

  3. 不用关注服务器有关的事情。

缺点:

  1. 只能用小程序的MongoDB(文档没直接说是MongoDB,文档型数据库,为了便于描述,这里就直接称MongoDB了),用不了其他的数据库。

  2. MongoDB不能直连,如果你要导出数据,做些数据分析的事情,你需要调他的API。

微信小程序云开发是一种serverless,目的是想减少后端工作。 但从实际的开发体验来说,并不友好,有些设计反而变成了限制,影响效率。

我认为它适合简单的项目,如果复杂一些的还是不适合。 最终我们也只有那个项目用了它。

# 云函数

相比微信小程序云开发,云函数的限制就没那么多了,它只提供一个语言的运行环境, 你可以用自己的数据库,自己的缓存,自由发挥,你只需把代码扔上去,其他的事情都不用管。

听起来很美好,但实际项目的开发是否丝滑呢?以这次的新项目为例来看看。

这次使用的是腾讯云的serverless framework, 框架为laravel

文档地址 https://cloud.tencent.com/document/product/1154/40494

# 开发方式

我们采用的开发方式还是和普通的有服务器环境的一样。

准备了两个serverless, 一个用作测试环境,一个用作生产环境。

开发环境还是用自己的电脑,在本机上搭建lnmp环境来运行laravel。腾讯云sls有提供监听本地文件变化,然后同步到云端的功能。 但我认为还是走本机快些,故没用这个功能。

整个过程是先在本机开发,本机调试。完成开发后再发布到测试的serverless,上线时再发布到生产的serverless。

其他就没什么区别了。

# 如何部署

我们在一台服务器上安装了sls,通过git检出代码,然后调用sls命令发布

# 要注意的地方

# 注意文件的完整性

以这次使用的laravel框架为例,发布到腾讯云的serverless时,它是把本地目录下的文件都上传到sls上。 如果你的.gitignore里排除了一些文件,之后从git仓库拉代码发布时,注意不要少了文件。比如bootstrap下的cache目录。

# 调度用不了了

你需要重新开一个调度的scf,或者通过其他方式来实现调度(比如传统的crontab)。所以还是会需要一两台服务器。

# laravel框架的封装问题

.env文件的VIEW_COMPILED_PATH和APP_STORAGE配置不要改,本地创建好对应的目录就能跑起来。

在实际的腾讯云发布中,sls会自动加一个sl_handler.handler.php文件,如果你本地创建这个文件就会发布失败。

# 关于midway

midway是一个用ts写的,面向serverless的开发框架。 由于midway做了很多准备工作,使用serverless时就轻松很多了,但我在测试这个框架时发现一个问题:同一套代码在阿里云上面的响应时间30ms,但放到腾讯云上面变成了500ms甚至1s以上。 所以如果用midway,建议先测测在各厂商上的接口响应时间。

# 总结

总体来说serverless确实进一步减轻了后端的工作,但相比有服务器环境来说,还是有很多要扩展的地方。 比如当前腾讯云serverless的在线IDE就很难用,如果之后有了一个可以媲美PHPstorm的IDE,将编码也搬到线上, 开发者只需要一个浏览器就可以干活了,会不会美好很多呢?