前言
本文旨在通过 快速部署一个 wordpress 网站到阿里云 函数计算 平台 这个示例来展示 serverless web 新的开发模式, 包括 FUN 工具一键初始化 NAS, 同步网站到 NAS, 一键部署等能力, 展现函数计算的开发敏捷特性、自动弹性伸缩能力、免运维和完善的监控设施。
相关参考文档:top="1055.453125">1.1 DEMO 概述
开通服务
免费开通函数计算, 按量付费,函数计算有很大的免费额度。
免费开通文件存储服务NAS, 按量付费
1.2 解决方案
如上图所示, 当多个用户通过对外提供的 url 访问 web 服务的时候时候,每秒的请求几百上千都没有关系, 函数计算平台会自动伸缩, 提供足够的执行实例来响应用户的请求, 同时函数计算提供了完善的监控设施来监控您的函数运行情况。
1.3 Serverless 方案与传统自建 web 方案对比
成本 | 稳定性 | |
---|---|---|
基于 VM 方案 | 使用 ecs.t5-lc1m1.small, 22.8元/月 | 服务器和数据库在同一台VM, 均无主备容灾,同时该规格的主机本身性能弱 |
轻量应用服务器 | 60元/月(1vCPU 1GB 1Mbps 20GB[ssd]) | 服务器和数据库在同一台VM, 均无主备容灾,同时该规格的主机本身性能弱 |
函数计算 | sqlite3 版本约为 1元/月 mysql 版本大约 26元/月 | 高 |
函数计算完整费用详情:
函数计算计费|NAS 定价
如上所述, 在低成本网站领域, 函数计算具有十分明显的成本优势,同时还保持了弹性能力,以后业务规模做大以后并没有技术切换成本(可能需要做的只是更换一个更强的关系型数据库), 同时财务成本增长配合预付费也能保持平滑。低成本网站变成高可用高性能网站如丝般顺滑, 高性能网站详情可以参考文末中的 Q1 问题。
函数计算运行 PHP 框架原理
在具体操作部署之前, 先简单梳理一遍 函数计算运行 PHP 框架原理
2.1 传统服务器 PHP 运行原理
从上面原理示意图我们可以看出,Web 服务器根据 conf 中 location 将 PHP 脚本交给 php-fpm 去解析,然后将解析后的结果返回给 client 端
2.2 FC 驱动 PHP 工程原理
其中函数计算为用户提供了一个
$GLOBALS['fcPhpCgiProxy']
对象用来和 php-fpm 进行交互,对
PHP 工程中的 php 文件进行解析,该对象提供了两个重要的接口:
requestPhpCgi($request, $docRoot, $phpFile = "index.php", $fastCgiParams = [], $options = [])
复制代码
: 跟
php http invoke
入口的参数一致
: Web 工程的根目录
: 用于拼接 cgi 参数中的 SCRIPT_FILENAME 的默认参数
$fastCgiParams
: 函数计算内部尽量根据 $request 给您构造
default cgi params
, 但是如果您不是想要的,可以使用
$fastCgiParams
覆盖一些参数 (reference:)
: array 类型,可选参数, debug_show_cgi_params 设为 true ,会打印每次请求 php 解析时候的 cgi 参数, 默认为 false ;readWriteTimeout 设置解析的时间, 默认为 5 秒
如果您有兴趣, 可以了解下函数计算 PHP Runtime:
案例操作步骤
准备条件
免费开通函数计算, 按量付费,函数计算有很大的免费额度。
免费开通文件存储服务NAS, 按量付费
有一个域名, 比如 abc.com, 并将域名 CNAME 解析到 函数计算(FC) 对应的 region
3.1安装最新的 Fun 工具
3.2 Clone 工程
在目录 .fun/nas/auto-default/fc-wp-sqlite/wordpress 中输入命令:
修改 host 文件,添加
通过浏览器输入 hz.mofangdegisn.cn, 这个时候没有 mysql 数据库设置页面,完成 wordpress 安装过程
接下来将函数部署到云平台:
登录控制台,可以看到 service 和 函数已经创建成功, 并且 service 也已经正确配置。
通过浏览器打开自己之前配置的域名, 比如本例中的 hz.mofangdegisn.cn
A: 可以, 使用函数计算的单实例多并发功能和高性能数据库
有必要再加上这些优化:
A: 用一个 timer trigger 的函数 keep warm
A: 由 sqlite3 数据库性能决定, 这边有一些压测结果:
每次压力增大时候, 都有些冷启动,时间慢点,但是支持从压测结果来看支持 50 QPS 是没有疑问的, 是足够支持一些中小网站的。
A: 可以, 比如 python:或者直接使用 custom runtime, 内置了 java、python 和 node,Custom Runtime 用户手册,Custom Runtime 使用集锦
原文链接
:
git clonetop="4679.453125">3.3 根据需要使用的数据库进入不同的目录
3.3.1 使用 mysql 数据库
复制代码
fun nas init
fun nas info
复制代码
fun nas sync
fun nas ls nas:///mnt/auto/
3.3.2 使用 sqlite3 数据库
复制代码
fun nas init
fun nas info
复制代码
php -S 0.0.0.0:80
127.0.0.1 hz.mofangdegisn.cn
复制代码
fun nas sync
fun nas ls nas:///mnt/auto/
3.4 部署函数到 FC 平台
Q1: 函数计算能开发高性能高可用网站吗?
Q2: 使用低成本 sqlite3 版本的网站, 冷启动第一次打开很慢怎么办?
Q3: 使用低成本 sqlite3 版本的网站, 能支持多大的 qps?
Q4: 使用其他语言基于函数计算开发 serverless 网站可以吗?