云函数 SCF
终极指南

使用云函数 SCF 进行真实世界的应用开发
你所需要知道的一切内容

什么是云函数 SCF?

云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。

云函数可以执行任何类型的计算任务,从服务网页和处理数据流到调用API和与其他腾讯云服务集成。

serverless 计算的概念是指不需要维护自己的服务器来运行这些功能。云函数 SCF 是一个可完全托管的服务,为你处理所有的基础设施。因此,serverless 并不意味着不涉及任何服务器:它只是意味着服务器、操作系统、网络层和其他基础设施已经被处理好了,所以您可以专注于编写应用代码。

云函数 SCF 是如何工作的?

每个云函数 SCF 都在它自己的容器中运行。当一个函数被创建时,SCF 将其打包到一个新的容器中,然后在腾讯云管理的多租户机器集群上执行该容器。在函数开始运行之前,每个函数的容器都被分配了必要的内存和 CPU 资源。一旦功能运行结束,开始时分配的内存就会乘以功能运行的时间。然后,客户将根据分配的内存和函数完成的运行时间来付费。

云函数 SCF 的整个基础设施层是由腾讯云管理的。客户对系统的运行情况不会有太多的了解,但他们也不需要担心更新底层机器、避免网络争用等问题,腾讯云会自动处理这些问题。

而且,由于该服务是完全托管的,使用腾讯云 SCF 可以为你节省操作任务的时间。当没有基础设施需要维护时,你可以把更多的时间花在应用程序的代码上──尽管这也意味着你放弃了操作自己的基础设施的灵活性。

云函数 SCF 的一个独特的架构特性是,同一函数的许多实例,或同一账户的不同函数的实例,可以并发地执行。此外,并发性可以根据一天中的不同时间或一周中的不同日期而变化,而这种变化对 SCF 来说没有任何区别,你只需为你的函数所使用的计算量付费。这使得云函数 SCF 很适合部署高度可扩展的云计算解决方案.

为什么云函数 SCF 是无服务器架构的重要组成部分?

在构建 serverless 应用程序时,云函数 SCF 是运行应用程序代码的主要候选者之一。通常情况下,要完成一个 serverless 技术栈,你需要:

  • 计算服务
  • 数据库服务
  • HTTP 网关服务

SCF 填补了腾讯云上计算服务的主要角色。它还可以与许多其他腾讯云服务集成,与 API 网关、PostgreSQL 和 Redis 一起,构成了使用云函数 SCF 的 serverless 解决方案的基础。云函数 SCF 支持许多最流行的语言和运行时,因此它非常适合广大的无服务器开发人员。

云函数 SCF 最常见的使用情况是什么?

由于云函数 SCF 的架构,它可以为以下应用提供比传统云计算架构更多的好处:

  • 运行时间较短的单一任务
  • 无依赖独立运行的任务
  • 应用的请求最高峰和最低峰有很大差距

符合这些标准的云函数 SCF 一些最常见的用例是:
弹性伸缩的 API。在使用云函数 SCF 构建 API 时, SCF 函数的一次执行可以处理一个 HTTP 请求。多个不同的 API 可以通过 腾讯云 API 网关路由到不同的 SCF 函数。 腾讯云 SCF 会根据对单个函数的需求自动进行弹性伸缩,因此您的不同的 API 的可以根据当前的使用水平进行相应的伸缩。这使得可以用低成本并且灵活的构建 API。

数据处理。SCF 函数针对基于事件的数据处理进行了优化。云函数 SCF 可以轻松与腾讯云数据库的数据源集成以及使用通过特定类型的数据事件触发 SCF 函数. 例如, 您可以用 SCF 在腾讯云 COS 中的文件每次被创建或更新时做一些工作,这使它很适合用于通知、计数器和分析等类型的功能开发。

自动化任务。凭借其事件驱动特性和灵活性, 云函数 SCF 非常适合用于将那些不需要让整个服务器一直运行的业务自动化。 比如执行定时任务来清理您的基础设施,处理您网站上提交的表单,或根据需要在不同的数据仓库间移动数据。

支持的开发语言和运行时

截至目前,云函数 SCF 并不支持所有的编程语言,但它很好的支持一些流行的语言和运行时。这是支持运行时的完整列表:

  • Node.js 6.10
  • Node.js 8.9
  • Node.js 10.15
  • Node.js 12.16
  • Python 2.7
  • Python 3.6
  • PHP 5
  • PHP 7
  • Java 8
  • Go 1
  • 自定义运行时

所有这些运行时都由腾讯云维护,并在CentOS 7.2 环境下提供。对于每一种支持的语言,腾讯云都提供了一个 SDK,使你更容易编写您的 SCF 函数并与其他腾讯云服务集成。

还有一些运行时仍处于预发布阶段。这些运行时作为云函数实验功能的一部分正在开发,官方文档中没有提到:

  • Node.js 14
  • Node.js 16

Bash 运行时也是为云函数 SCF 创建自定义运行时的一个例子。如果你的语言不被默认支持,请参阅云函数文档,了解如何创建一个自定义运行时的细节。

使用云函数 SCF 的好处

与在云上维护自己的服务器相比,使用腾讯云 SCF有一些独特的优势。主要优势有:

按量付费。在腾讯云 SCF 中,您只需为您的功能所使用的计算量,以及产生的相关网络流量付费。对于那些在一天中的不同时间段进行大幅伸缩扩展的请求负载来说,这种类型的计费方式可以更好的节省成本。

完全托管的基础设施。现在,您的代码运行在受管理的腾讯云基础设施上,您不需要考虑底层服务器的问题──腾讯云为您解决了这些问题。这可以大大节省维护工作,如升级操作系统或管理网络层设施。

自动伸缩。云函数 SCF 在您的代码被请求时创建实例。无需预设扩展池,无需担心扩展级别,无需进行设置──同时,不管请求增加或减少,你的服务都可用。您只需为每个函数的运行时间付费。

与其他腾讯云产品紧密集成。云函数 SCF 与 API 网关、云存储 COS和云数据库等服务集成,使您能够在 SCF 函数中构建功能完整的应用程序。

云函数 SCF 的限制

虽然云函数 SCF 有很多优点,但在生产中使用它之前,有几件事您也需要知道。

冷启动时间

当一个函数被激活来响应一个事件时,在事件和函数运行之间可能会有少量的延迟。如果你的函数在过去15 - 30分钟(和后台资源分配相关)内没有被使用过,那么延迟可能高达5-10秒,这使得对延迟要求较高的应用很难依赖云函数 SCF。可以查看腾讯云的预置并发来降低冷启动的耗时。

函数限制

云函数 SCF 又如下一些限制:

执行/运行时间。 一个云函数在运行15分钟后会超时。没有办法改变这个限制。如果运行你的函数通常需要超过15分钟,云函数 SCF 可能不是适合您的任务的一个好的解决方案。

可用内存大小。云函数 SCF 可用的内存量的选项范围是 64MB 到 3,072MB,以 128MB 递增

代码包大小。压缩后的云函数 SCF 代码包大小不应超过 500MB,为了最好的使用体验,建议压缩后的代码不应大于200MB。

并发数量。默认情况下,单个云函数账户内所有云函数 SCF 的并发执行被限制为1,000个。(您可以通过联系腾讯云来申请增加并发数的限制)。
任何触发云函数 SCF 执行超过您的并发限制的请求将被阻止,并将被迫等待,直到其他函数完成运行。

请求负载大小。当使用 腾讯云 API 网关来触发云函数 SCF 以响应 HTTP 请求时(即构建 Web 应用程序时),API 网关可以处理的最大有效负载(payload)大小为 6MB。

不是一定会节省成本

在云函数 SCF 上,你只需为所使用的函数运行时间付费(以及相关费用,如网络流量)。这对某些使用模式来说可以产生显著的成本节约,例如,定时任务或其他按需任务。然而,当你的应用程序的负载增加时,云函数 SCF 的成本也会按比例增加,最终可能高于腾讯云 CVM 或其他云供应商的类似基础设施的成本。

有限的运行时

虽然腾讯云 SCF 允许添加自定义运行时,但创建这些运行时可能是一个工作量很大的工作。因此,如果你使用的编程语言的版本在 SCF 上不被支持,你可能最好使用腾讯云 CVM或其他云服务供应商的产品。

云函数 SCF 价格

每个腾讯云账户都包含一定的云函数 SCF 的免费额度。与其他一些服务不同,云函数 SCF 每月都有免费资源额度。现有账户和新账户每月都可以获得10万次云函数 SCF 请求,加上每月2万GBs的云函数资源使用量,由函数配置内存,乘以函数运行时长得出资源使用量。

超出免费额度后,云函数 SCF 的定价如下。:

计费项

定价

备注

调用次数

0.0133元/万次

每月前10万次请求免费(开通前三个月为200万次)。

资源使用量

0.00011108元/GBs

每月有2万GBs(开通前三个月为40万GBs)。

外网出流量

0.50 至 1.00 元/GB

不同地区价格不同,相关腾云函数定价

预置并发闲置量

0.00005471元/GBs

腾讯 API 网关

0.06 至 0.03 元/万次

第一年每月(自然月)前100万次调用免费,之后随调用数量增加费用逐步降低,详见腾讯云API网关定价

对于云函数每次执行,总成本将是所有适用因素的总和,包括每个请求的成本,内存和运行时间,以及网络流量。

计费示例

消息队列触发。假设函数配置了 Ckafka 触发方式,每秒触发函数3次,配置云函数使用了128MB内存,将消息处理后放入处理后的消息队列,每次处理消息,函数运行时间为260ms。

每天的资源使用量:(128 / 1024)×(260 / 1000)× 3 × 3600 × 24 = 8424GBs
每天的调用次数: 3 × 3600 × 24 = 259200次

资源使用月费用:8424 × 30 = 252720GBs,小于40万GBs,无费用产生
调用次数月费用:(259200 × 30 / 10000 - 100)× 0.0133 = 9.01元

在这种情况下,总花费为:调用次数费用9.01元

Web 和 API 服务。假设函数配置了 API 网关,通过 URL 请求触发函数运行,每天有10万次请求。云函数配置了128MB内存,每次处理请求的平均运行时间为70ms。

每天的调用次数:100000次
每天的资源使用量:(128 / 1024)×(70 / 1000)× 100000 = 875GBs.

资源使用月费用:875 × 30 = 26250GBs,小于40万GBs,不产生费用
调用次数月费用:(100000 × 30 / 10000 - 100)× 0.0133 = 2.66元

在这种情况下,总花费为:调用次数费用2.66元。

常见问题 (FAQ)

云函数 SCF 是开源的吗?
Expand
云函数 SCF 是一个 API 吗?
Expand
云函数SCF 可以调用其他 SCF函数吗?
Expand

开始使用云函数 SCF

在本节中,我们将介绍创建和部署云函数 SCF 函数所需的步骤。我们涵盖两种方式:直接使用腾讯云控制台和API,以及使用 Serverless CLI。

使用腾讯云控制台创建云函数 SCF 函数

如果你愿意,你可以使用云函数 SCF 控制台来创建你的第一个函数。在云函数控制台,选择云函数:

一旦进入云函数 SCF 管理控制台,点击“新建”:

选择自定义方式创建函数,然后为您的新函数添加一个名称,并选择所需的运行时间。之后,点击 "完成"来确认设置:

就这些! 函数被创建了,您现在可以直接在云函数 SCF 控制台中处理函数代码和部署函数了。.

我们不建议通过管理控制台创建用于生产云函数 SCF 函数,有二个原因:

  • 您的代码将被限制在30MB以内。
  • 你需要使用腾讯云内置的IDE在浏览器中编写代码。这个IDE只提供非常基本的修订跟踪,并限制了代码开发上的协作。

使用 Serverless CLI 创建云函数 SCF 函数

我们建议通过使用Serverless CLI 来开始使用云函数 SCF。通过 Serverless CLI,你可以在本机使用你熟悉的工具创建云函数 SCF 函数,并在几秒钟内部署到腾讯云。通过这种方法,你的函数的代码和配置都位于同一个Git仓库中,这使得云函数 SCF 函数的协作、变更跟踪和部署变得更加容易。

1. 在您的机器上安装 Serverless CLI:

$ npm install serverless -g

2. 创建一个新的应用:

$ serverless

3. 在 serverless.yml 文件中添加你的应用需要的资源。请查看相关介绍文档,了解该文件的例子以及您可以在其中配置的选项列表。

4. 向您的应用添加代码。请参阅 Serverless 开发文档,了解创建函数的具体步骤。

5. 使用部署命令部署到腾讯云:

$ serverless deploy

就这些! 你的函数将被部署,你将在部署结果中看到它的访问地址URL。

在生产环境中使用云函数SCF

在您的云函数 SCF 功能部署后,你很可能想要监控并确保它们可以安全运行,以便充分地服务于生产环境。

用云监控 CM 监控云函数 SCF 函数

一旦你的函数被部署,你可以使用云监控 CM 为您的云函数 SCF 应用程序设置监控。云监控 CM 提供了一些默认的指标,在函数部署后,你就可以看到这些指标。要访问这些指标,请到腾讯云控制台的函数服务界面,选择监控信息。你可以直接在函数服务实例界面上查看指标,或者前往云监控查看更多细节。具体步骤见云函数 SCF 监控指标说明文档。请记住,云监控 CM 的定价适用于这些默认指标。云监控 CM 允许使用云监控 CM 警报来设置指标的基本警报.

确保云函数 SCF 函数安全运行

您在云函数 SCF上部署的许多功能都可能需要访问其他服务或您的内部基础设施。我们在题为《基于腾讯云 Serverless 应用的秘密管理》的文章中提供了一些关于如何保护这些凭证的建议。

用 Serverless 自带的的监控和安全服务

如果你使用 Serverless 框架部署您的函数,那么您的函数就已经处于保护和监控中。你不需要做任何其他事情。只需前往Serverless 应用中心,即可看到您的函数的最新运行统计信息和安全事件。

链接和参考资料

刚上手 serverless ?

立即开始,打开终端并执行:npm install serverless -g