使用腾讯云函数搭建Web站点

(本文最先发表于Zhu’s Blog,未经书面授权许可,任何个人和组织不得以任何形式转载、引用本人的任何文章。本人保留追究侵权者法律责任的权利。)

一、云函数运行web站点的原理

  云函数是腾讯云基于Serverless的一款产品,一个函数实例相当于一个可以运行代码的容器环境,用户可以自定义内存容量等配置参数。
  云函数支持用户自定义安装语言环境、版本、依赖环境,并内置对如下语言的支持:

语言版本
Node.js6、8(帮助文档未提及)
10.15、12.16、14.18、16.13
Python2.7、3.6、3.7
PHP5.6、7.2、7.4、8.0
JAVA8、11
  云函数支持事件触发和HTTP请求触发两种触发方式。

在函数的根目录下有一个名为sfc_bootstrap的启动文件,它属于批处理文件。当一个函数被触发后,会逐行执行启动文件中的命令,从而达到既定的目的。云函数的所有应用场景都是基于这个基本原理。
  一个基本的Serverless Web应用包含API网关、云函数这两个组件,用户可以根据需要添加CFS文件系统、COS对象存储、私有网络、Serverless数据库等额外的组件。
  用于Web服务的云函数通常被称为Web函数,Web函数的运行原理如下图所示:
在这里插入图片描述
  当访客访问Web函数绑定的域名时,HTTP请求会通过API网关触发这个函数。函数首先会执行启动文件,按照启动文件中指定的路径启动某种语言的(暂且统称为)解释器,并由这个解释器运行指定的入口文件。

  在PHP应用中,默认的容器环境使用PHP Development Server(而非常见的Apache或者Nginx)作为Web Server程序。它使用一个php文件实现类似于Nginx的转发功能,将外网的HTTP请求转发给容器环境内的Web Server。

二、如何使用自己指定的语言、版本、扩展/依赖

1、使用容器环境的内置语言和版本

  如果你打算使用的是容器环境的内置语言和版本,只需要在启动文件中指定对应语言、版本的解释器的路径即可。可以参考腾讯云函数帮助文档的启动文件说明

2、使用自己上传的语言和版本

  如果容器环境内置的语言和版本没有你需要的,你可以自己上传编译好的二进制文件。编译二进制文件需要具备一定的Linux操作技能。你可以通过任何一种能上传代码的方法进行上传,只要在启动文件中设置好对应的路径即可。方法举例如下:

(1)上传到层

  腾讯云函数提供了“层”功能,允许用户自己创建“层”,将编译好的二进制文件打包并上传到层,然后将层绑定到对应的云函数上。当这个函数被触发时,层中的压缩文件会被释放到容器环境中的/opt目录下,然后通过启动文件被调用。可以参考腾讯云函数帮助文档的层管理
  这个方法的优点是不需要使用额外的文件存储组件,而且函数之间可以共享,缺点是函数冷启动时会增加一个释放文件的步骤,如果文件比较大的话,会比较占用时间。

(2)上传到CFS

如果你的云函数绑定了CFS,那么你可以直接将编译好的二进制文件上传到CFS文件系统中,然后通过启动文件调用。
  和层相比,这个方法的优点是免去了释放文件的步骤,但是使用CFS会产生额外的费用。

3、安装额外的扩展/依赖

  如果你使用的语言支持单独添加扩展/依赖,那么你可以参考上传语言和版本中的方法上传扩展/依赖,然后在语言解释器的配置文件中指定扩展/依赖的路径并启用。你也可以将扩展/依赖跟随函数代码一同打包上传。可以参考腾讯云函数帮助文档的依赖安装
  注意:有些语言可能不支持单独添加扩展/依赖,需要跟随项目或者解释器一起编译。
  另外你也可以在函数的构建阶段借助CI/CD流程安装所需要的扩展/依赖。这需要具备一定的动手能力,此处不再展开。

三、如何持久化存储文件

  在云函数的容器环境中,只有/tmp目录是可读写的,空间大小为512MB。当实例被释放时,这个临时目录中的文件也会被销毁。如果你的Web站点需要保存文件,那么建议你为Web函数绑定CFS文件系统或者COS对象存储组件。

1、使用CFS存储文件

  创建一个CFS,然后在函数配置中直接挂载即可。可以参考腾讯云函数帮助文档的挂载CFS文件系统
  挂载CFS后,可以像操作原生服务器一样处理CFS中的文件,这对于基于原生服务器而设计业务逻辑的传统应用比较友好。

2、使用COS存储文件

  使用COS对象存储服务存储文件,需要借助API或者SDK。可以参考腾讯云函数帮助文档的COS触发器
  使用COS需要对传统应用的业务流程和代码进行改造适配。

四、如何缩短冷启动的时间

  函数的实例在闲置一段时间后会被释放,再次请求的时候会产生较长的初始化时间(冷启动),这会消耗大约5秒或更长的时间,严重影响访客的用户体验。可以参考以下方法来改善:

1、启用预制并发

  启用预制并发后,系统会根据你的预设参数预留一定的实例,从而避免冷启动的发生。可以参考腾讯云函数帮助文档的预制并发
  这个方法适用于访问量比较大的站点。

2、启用请求多并发,并Keep Warm

  在函数配置界面启用请求多并发,并根据你单实例的负载情况设置一个适当的并发数,例如15。注意:这里的请求多并发和前边的预制并发是不同的两个概念,请求多并发仍然会在空闲一定时间后释放实例,而预制并发始终会保留实例。
  接着新创建一个函数,在函数代码中写一段访问你的站点的代码,然后为函数添加一个触发器,触发方式选择定时触发,触发周期选择5分钟。使用任何你熟悉的语言都可以,以下是一个Python代码的示例:

import urllib.request
def main_handler(event, context):
    url = 'https://yfzhu.cn/'  #替换为你的的URL
    response = urllib.request.urlopen(url)
    
    #以下代码用于在测试函数时显示返回的结果,删除即可
    html = response.read()
    print(html)

  这个函数会模拟访客每隔5分钟访问一次站点,确保始终有一个函数实例存活。这个方法适合个人博客等访问量较小的站点。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
腾讯云函数是一种Serverless服务,也称为SCF(Serverless Cloud Function),它允许用户在腾讯云的基础设施上弹性、安全地运行代码,而无需购买服务器和虚拟机。函数支持所有主流的编程语言,包括Spring Boot。\[1\] 使用函数时,程序员只需要上传函数代码,其他底层资源都由腾讯云上进行管理。这种函数级别的资源管理结合了腾讯云的各种能力,使得开发变得更加简单和高效。\[2\] 在使用函数时,还会有一个API网关作为函数的主要入口。API网关提供了HTTP接口、参数校验、鉴权、限流、自定义域名、自动化文档等功能,为函数提供了强大的支持。\[3\] 因此,如果你想在腾讯云函数使用Spring Boot,你可以将Spring Boot应用程序的代码上传到函数中,并通过API网关来访问和管理你的应用程序。这样你就可以充分利用腾讯云的Serverless服务和能力来运行和扩展你的Spring Boot应用程序。 #### 引用[.reference_title] - *1* *2* *3* [实操教学|用Serverless 分分钟部署一个 Spring Boot 应用,真香!](https://blog.csdn.net/youanyyou/article/details/125532137)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值