IBM Cloud Docs
功能工作负载

功能工作负载

函数是一种无状态代码片段,在 HTTP 请求调用时执行任务。 利用 IBM Code Engine功能,您可以以可扩展和无服务器的方式运行您的业务逻辑。 IBM Code Engine功能提供优化的运行环境,支持低延迟和快速扩展。 您的函数代码可以在包含特定 Node.js 或 Python 版本的托管运行时中编写。

代码束是表示函数代码的文件的集合。 此代码束将注入到运行时容器中。 代码束由 Code Engine 创建,并存储在容器注册表中或与函数直接插入。 代码束不是开放式容器计划 (OCI) 标准容器映像。

函数实例的生命周期

调用 (启动) 函数时,将使用配置的运行时容器和资源参数来初始化相应的函数实例。 第一次初始化的过程称为 冷启动

为了减少冷启动等待时间,Code Engine 通过使用特定 CPU 和内存配置预热特定运行时来优化调用。 函数的预热组合包括 Node.js 18 和 Python 3.11 版本以及 Functions 的缺省 CPU 和内存组合,即 0.25 vCPU x 1 GB 内存。 此外,该系统旨在改进已初始化的 Function 实例的复用。 因此,函数实例在调用完成后保持活动状态,以允许后续调用,方法是复用同一实例并在上次调用完成时复用实例的状态。 不保证复用函数实例。

功能如何与应用程序和作业进行比较?

比较 Code Engine 应用程序、工作和函数
特性 应用程序 作业 功能
执行时间 (持续时间) 长时间运行 (每个请求 10 分钟) 长时间运行 (最多 24 小时) 短时间运行 (2 分钟或更少)
启动等待时间 调度的开始时间
终止 持续运行 运行至完成 运行至完成
调用 根据请求或永久运行 已安排 根据请求,即时
编程模型 基于容器的构建和执行 基于容器的构建和执行 特定于语言的源代码文件和依赖关系元数据
并行性 并行执行,灵活 从低到中并行执行 高并行执行
横向扩展 基于请求数 基于作业工作负载定义 基于事件或直接调用
优化对象 长期运行,高度复杂的工作负载和随需应变的向外扩展 具有高资源需求的已调度或计划工作负载 启动时间和快速向外扩展

有关更多信息,请参阅 规划 Code Engine

使用函数的关键功能是什么?

查看以下主题以了解有关使用 IBM Code Engine Functions 的更多信息。

隔离

Code Engine 是多租户区域服务,其中租户共享相同的网络和计算基础结构。 特别是,网络和计算基础结构是共享资源,某些管理组件是所有租户的公共组件。 但是,租户及其工作负载通过使用 Code Engine 项目相互隔离。Code Engine 阻止项目之间的通信,从而为多租户环境中的应用程序提供隔离,这可以包括应用程序,批处理作业和函数。 此外,还有在资源级别执行的访问控制,仅允许授权用户对项目资源执行某些操作,例如,函数或其他 Code Engine 工作负载。

有关工作负载隔离的更多信息,请参阅 Code Engine 工作负载隔离

日志记录

函数代码可以编写“stdout 和”stderr 日志,这些日志会被捕获并转发到IBM Cloud Logs实例。IBM Cloud Logs是一个 Platform 日志实例,您可以将其设置为日志索引。 有关更多信息,请参阅查看日志

运行时

Code Engine 包含可用于函数的 受管运行时

受管运行时包括 Node.js 和 Python 版本以及特定的 CPU 和内存组合。 这些运行时针对快速启动进行了优化。 这些运行时是预先预热的,这就避免了拉取容器映像以及启动容器和进程的开销。 您的代码将注入到已在运行的容器中。

有关更多信息,请参阅 运行时

运行函数

无论您的代码是作为本地文件或 Git 存储库中的源而存在,还是您的代码是存在于公共或专用注册表中的容器映像,Code Engine 都为您提供了作为应用程序运行代码的简化方法。

您可以通过以下方式在 Code Engine 中创建和调用函数:

  • 从现有代码束运行。

  • 从现有源代码运行。 如果您是从位于 Git 存储库中或本地工作站上的源代码开始,那么可以指向源位置,而 Code Engine 负责为您构建映像。

有关创建和调用函数的更多信息,请参阅 使用 Code Engine中的函数

安全性

Code Engine 为您的功能提供即时 DDOS 保护。Code Engine的 DDOS 保护由 Cloud Internet Services (CIS) 免费提供。 DDoS 防护涵盖系统互连 (OSI) 第 3 层和第 4 层(TCP/IP)协议攻击,但不包括第 7 层 HTTP )攻击。 参见 DDoS 防护

Code Engine 还提供了服务网格以使用其网络层,这将为功能启用相互传输层安全性 (TLS) 流量,从而保护 服务到服务用户到服务 通信。

有关安全性的更多信息,请参阅 Code Engine 和安全性

函数实例的调用并行性和缩放

同时调用多个函数时,Code Engine 会为每个调用初始化新的函数实例,但同时尝试最大化复用。 一个函数实例在单个时间点只处理一个函数调用。 对于 Node.js,可以使用 concurrency > 0 配置该函数,以允许在单个函数实例中处理多个调用。

打包函数的源代码

功能可以通过三种不同的方式进行打包。

  • 作为单个文件
  • 作为多个文件 (具有文件夹结构和从属模块)
  • 作为容器映像

如何开始使用函数?

要使用 hello-world 样本映像部署简单的 Code Engine 应用程序,请参阅 运行 IBM Code Engine Functions 教程。

要更深入地使用函数,请参阅 使用 Code Engine中的函数