Serverless
顾名思义就是无服务器,但并不是不再需要用到服务器,而是依赖第三方应用程序或服务来管理业务应用程序。
在云服务商出现之前,创业公司想在互联网上发布自己的产品,需要经历以下内容:
- 编写业务程序
- 购买硬件设备
- 安装相关系统
- 搭建运行环境
- 接入专用宽带
云服务商出现后,我们可以在网上租赁服务器,不再需要考虑硬件设备、接入宽带的问题;而serverless
的到来,解决了运行环境的问题,使得我们只需专注于自身的业务,不再需要考虑运行环境等问题,大大降低了各种成本。
传统架构
传统架构模式下,负载均衡、服务环境、业务逻辑等,都需要有专门的人员来负责。
Serverless架构
Faas
(Function as a service):开发者不需要了解服务环境,只需要会写业务逻辑,并且把这些业务逻辑写成一个个function
即可。
Baas
(Backend as a service):当我们不能让所有的东西都以function
的方式去运作的时候,使用第三方的后端套件,如直播服务、人脸识别等。
Hello world!
接下来将使用laravel
编写一个hello world
的例子,放到腾讯云的云函数上。
创建laravel
项目
composer create-project --prefer-dist laravel/laravel serverless-laravel
在routes/web.php
中添加一条路由:
Route::get('hello', function () { return view('hello'); });
resources/views下新建一个hello.blade.php文件,并输出内容:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <h1>Hello world!</h1> </body> </html>
确认能够看到输出的内容:http://localhost/serverless-laravel/public/hello
配置项目
由于云函数在执行时,只有/tmp
是可读写的,所以我们需要将laravel
框架运行时的storage
目录写到该目录下,为此需要修改bootstrap/app.php
文件,在$app = new Illuminate\Foundation\Application
后添加:
$app->useStoragePath($_ENV['APP_STORAGE'] ?? $app->storagePath());
然后在根目录下的.env
文件中新增如下配置:
# 视图文件编译路径 VIEW_COMPILED_PATH=/tmp/storage/framework/views # 由于是无服务函数,所以没法存储 session 在硬盘上,如果不需要 sessions,可以使用 array # 如果需要您可以将 session 存储到 cookie 或者数据库中 SESSION_DRIVER=array # 建议将错误日志输出到控制台,方便云端去查看 LOG_CHANNEL=stderr # 应用的 storage 目录必须为 /tmp APP_STORAGE=/tmp
注意:以上配置仅在部署项目时用到,本地开发时需要注释掉。
部署项目
安装serverless-cli:
npm install -g serverless
在项目根目录创建serverless.yml文件:
MyComponent: component: "@serverless/tencent-laravel" inputs: region: ap-guangzhou functionName: serverless-laravel code: ./ functionConf: timeout: 10 memorySize: 128 environment: variables: TEST: vale vpcConfig: subnetId: '' vpcId: '' apigatewayConf: protocol: https environment: release
执行sls
命令部署,添加--debug
参数可以查看部署过程中的信息:
sls --debug
这样就部署成功了,可以访问线上地址看到效果。
查看上传的项目信息:https://console.cloud.tencent.com/scf/list?rid=1&ns=default
查看&配置网关服务:https://console.cloud.tencent.com/apigateway/service?rid=1
测试项目
如果只是想测试线上环境,不想直接发布项目,可以把serverless.yml
最后的environment: release
改为test
(测试)或prepub
(预发布),默认情况下在域名后面加上/test
或/prepub
来看到测试效果。
删除项目
sls remove --debug
自定义域名
现在项目已经能够通过外网访问了,但是默认提供的域名略长,不利于做宣传,我们可以使用自己的域名进行替换,但必须是已备案过的域名。
首先去到域名解析页面,添加一条记录:
记录类型选择CNAME
,记录值填API网关默认域名(不需要填协议、协议和端口)。除此之外,还需要去到API网关进行配置:
协议可以根据自己需要选择。默认路径映射的发布环境要在域名后面加上/release
才能访问,因此选择自定义路径映射会更好一些。
懂了,这就去和我们技术经理对线
在线等后续