最近在给博客系统做一个改造升级,想从静态博客迁移到动态博客。
静态博客指的是只有一些静态的html文件,没有后台的处理代码,例如github page就是一个典型的静态博客。静态博客的优点是托管简单(因为无需执行后台代码和数据库查询),成本也比较低。但是缺点也很明显,因为没有后台代码,在功能和使用体验上还是存在一些缺失。
动态博客的选型我使用了风靡全球的Wordpress,在托管环境上,我对动态博客有三个要求。
- 基础设施要稳定,博客需要长期稳定运行。长期指5~10年。 — 只能选择大厂
- 网络连接要快,能够同时满足国内用户和海外用户的访问需求。 — 首选香港的托管商
- 要经济实惠,在博客很难增收的前提下,想要控制成本。
在经过的一番调研之后,腾讯云Serverless云函数进入了我的视野,腾讯云被大家笑称为“良心云”(与之对应的是阿里云被称为“套路云”)。
云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。云函数是实时文件处理和数据处理等场景下理想的计算平台。
简单来说,就是具备按量计费,不用不收费,乍一听很适合我这种PV100左右的个人博客。而且官方也推出了Serverless 建站的功能。
通过Serverless-Framework建站也很容易。
第一步,访问腾讯云控制台,购买一个按月的Serverless套餐包,对普通开发者来说,9.9元的套餐足矣
第二步,使用ServerFramework创建Serverless应用
第三步,等部署完之后上线。(您现在访问的博客就搭建在云函数上),不过可能很快就迁走啦
经过实测,发现基于Serverless 云函数部署博客,功能基本满足,存在至少三点不足:
- 经济效益不明显,博客上了Serverless之后并不省钱。
- 兼容性存在问题,至少Wordpress支持不完善。
- 配置成本高,资源利用率低下,底层实现有缺陷。
接下来分别阐述
1. 并不经济
促使我使用Serverless的一大原因就是Serverless可以有效降低成本,在实际使用中发现并不是这样,主要原因是Serverless的TDSQL-C的成本高昂。
腾讯云在创建函数时候,使用了基于自研的TDSQL-Serverless版本。
Serverless 服务是腾讯云自研的新一代云原生关系型数据库 TDSQL-C MySQL 版的无服务器架构版,是全 Serverless 架构的云原生数据库。Serverless 服务支持按实际计算和存储资源使用量收取费用,不用不付费,将腾讯云云原生技术普惠用户。
各位看官听了之后是不是很激动,按量付费的数据库和按量付费的函数,二者加起来简直是完美搭配。以下是我位博客开的Serverless数据库。选用了最低的配置,存储的数量因为只有博客的数据,占用量也很低不到30M,而且10min无人访问,机器会自动暂停。简直是丐中丐中丐牌数据库 ,但是非常试用我的场景。
但是,就是这样一台丐中丐中丐牌数据库,我们一个月要为它支付多少钱呢?答案是 0.09元/h,每天需要支付¥2.34元,一个月需支付至少 0.09 * 24 * 30 = ¥64.8,我认为这是一个不合理的数字。
(如上图,服务稳定之后,每天会扣费¥2.34元)
如果基于腾讯云Serverless托管一个无人访问的博客的话,总计支出需要:云函数费用 10元/月 + 低配云数据库费用(65元/月)+1元/GB的流量费用 = ¥75+ /月,对于只解决一个博客的需求来说,我觉得成本着实是有些高了。可以参照我的另外一篇博文,4年的托管成本大约是200元,一个月¥5。而¥75/月,不计算流量费用,可以买到能长时间占用的具有完整访问权限的VPS服务器了。
所以我觉得Serverless来托管博客,并不省钱,也并不实惠。
2. 和Wordpress的兼容性问题
上面提到迁移Serverless并没有带来成本上的优化,那么Serverless 有没带来效率上的提升呢?我觉得在Wordpress托管这个事情上,并没有提升我的效率,而且因为Serverless的架构问题,导致了一些兼容问题。
在腾讯云控制台上安装完Wordpress之后,才发现博客现实更新失败,一通查找资料之后在发现在腾讯云文档中有介绍到:
为什么不支持原生的Wordpress版本升级呢?原因是云函数里的Wordpress是个readonly的执行环境,Wordpress更新需要覆盖云函数中的代码内容,这个是不被支持的,更新系统需要在云函数的console中,手动下载wordpress的更新包,手动解压,然后发布新版本的云函数。
这个对于站长来说,其实是很不方便的,Wordpress在补丁上比较激进,一些重要的高危漏洞和补丁是会自己升级的。
试想,正值五一度假,加入Wordpress升级了一个0day漏洞,常规技术部署的博客已经自动打好补丁了。通过Serverless部署的博客还需要你打开你笔记本,找地方连接网络,打开腾讯云的console,手动下载Wordpress的更新包,手动解压,然后再发布新版本。且不说覆盖安装的稳定性如何,但是这一通应急操作就足以让人打退堂鼓了。
同时,因为SCF函数的镜像不可写,一些插件也会存在兼容性问题。限于篇幅这里暂不列举。
3. 配置成本高,资源利用率低下
先说资源利用率低下,在刚部署完成博客之后,我发现每次访问都需要去完整拉取一遍静态资源文件。下图是一个优化之后的网站访问时网络监控的截图,对于一些静态资源例如图片、CSS文件等,服务器都会返回缓存头,告知浏览器,不用每次都拉一遍数据,可以使用本地的版本。
而观察到通过云函数部署的博客,数据会非常难看,每次刷新页面,所有的页面资源都会重新从服务器端请求一遍。从API网关的峰值可以看出,使用默认配置,调试期间的HTTP请求数和出流量都比较高,没个小时最高达到200+次。
通过一番寻找之后找到了答案,云函数的入口函数中,调用了PHP的配置用于调试的函数(通过php -S参数),并基于调试函数做了一些定制化。而在腾讯云工程师的定制化中,并没有考虑到需要做cache这种问题。
cat bootstrap
...
cd $WORK_PLACE
/opt/bin/php -S 0.0.0.0:9000 -d extension_dir=/opt/lib/php/modules/ $WP_HANDLER
对handle.php增加header缓存头之后,暂时缓解了这个问题。
但是,PHP -S都并不完善,官方只推荐在开发阶段使用,其性能表现和安全性都不如Nginx这种专业选手。
在传统的Linux服务器中,增加缓存头,可能就是去nginx.conf中增加一段配置文件就可以了。在云函数的场景中,还需要去hack腾讯云工程师的底层源码,真是费时费力。所以我认为云函数的配置成本也是比较高的。
总结
- 我觉得云函数在成本方面有其优势,但是TDSQL-Serverless在价格方面实在是不友好。这会影响大家的使用热情。
- 增加了TDSQL-Serverless后,在成本没有优势的情况下,又增加了工作量和上手难度,让我对云函数搭建Wordpress博客萌生退意。
最后献上一首打油诗:
腾讯云函数,说是按量用。 结果要包月,SQL又很贵。 配置不简单,兼容又不对。 拿他搭博客,要把你劝退。