循序渐进 · 教学 · 函数(十八)

部署型函数:常驻执行模式

函数默认是无服务器(serverless)的,但也可以部署成常驻服务。这篇讲两种执行模式怎么选、部署架构长什么样。

全部目录 ← 上一篇 部署型函数:常驻执行模式 下一篇 →
本文来源 · Source 内容整理自 Palantir Foundry 官方文档:
https://www.palantir.com/docs/foundry/functions/functions-deployed/
原始标题:Language-agnostic features > Deploy functions

先记住这几条

① 两种模式:serverless 与 deployed
serverless 按需启动省事,deployed 常驻省冷启动。
② 选型的取舍
冷启动敏感、需要长连接的场景更适合 deployed。
③ 部署有前置条件
不是所有语言/场景都能直接部署。
④ 架构上有额外组件
部署模式会引入常驻实例,运维责任更重。
0

写在前面

1

前置条件

前置条件

要点:部署前必须满足的条件,先核对再动手。

本指南要求你已编写并发布了一个 Python 或 TypeScript v2 函数。关于教程,请查阅 Python 函数上手TypeScript v2 函数上手文档。

2

两种执行模式怎么选

两种执行模式怎么选

要点:对比维度与选型建议。

如果你的租户启用了 serverless 函数,新仓库默认会使用它。对于大多数场景,我们通常建议使用 serverless 函数。虽然部署式(deployed)函数在某些情形下有用,但 serverless 执行模式需要更少的维护,且能避免与长期运行的部署相关的开销。

部署式函数拥有一些 serverless 函数不具备的能力:

  • 部署式函数长期运行的性质意味着,如果函数能够容忍重启,则可能实现本地缓存。
  • Serverless 函数支持使用所提供的源对象上的客户端调用外部源,但不支持第三方客户端。你必须部署你的函数,才能用第三方客户端发起外部 API 调用。
  • 部署式函数支持 GPU 分配,通过并行处理加速计算密集的模型训练与推理工作流,而 serverless 函数不支持。
  • 部署式函数可以访问完整的服务发现(service discovery)API,而 serverless 函数只能访问有限的服务发现 API 子集,例如 api_gatewaytelemetry

部署式函数也有一些不适用于 serverless 执行的限制:

  • Serverless 函数支持按需执行同一函数的不同版本,使升级更安全。而部署式函数同一时刻只能运行一个函数版本。
  • Serverless 函数仅在执行时产生费用,而部署式函数只要部署在运行就会产生费用。
  • Serverless 函数需要更少的前期搭建与长期维护,因为基础设施是自动管理的。

要为你的租户启用 serverless 函数,请联系你的 Palantir 管理员。

3

部署架构

部署架构

要点:部署后的整体结构,理解它才能排查问题。

函数可以以 serverless 模式运行(利用按需资源),也可以被部署到一个长期运行的容器中。

如果你的租户已启用,我们建议使用 serverless 函数而非部署式函数。尽管某些情况下部署式函数很有用,但 serverless 执行器通常更灵活。

当你的函数被部署时,会创建一个长时运行的环境来处理进入的执行请求。该环境会根据请求量自动扩缩容,并偶尔被自动化进程重启。来自同一仓库的所有函数都由同一个部署托管。

函数的执行模式与部署配置,在函数通过 Marketplace 分发时会被打包并复现。详情与限制见部署式函数在 Marketplace 中

:::callout{theme="warning" title="计算成本"}

部署式函数会就运行中的部署产生计算成本。Serverless 函数仅在执行时产生成本。

4

Deploy a function

Deploy a function

按照以下步骤配置并部署一个函数:

  1. 打开你的函数仓库,导航到 Branches(分支) 标签页,然后选择 Tags and releases(标签与发布)
  2. 悬停在你想要部署的函数上,然后选择 Open in Ontology Manager(在 Ontology Manager 中打开)
在 Ontology Manager 中打开所选函数。
在 Ontology Manager 中打开所选函数。
  1. 从左侧的版本选择器中选择你想使用的函数版本。
  2. 选择 Configure execution(配置执行)
配置函数的执行。
配置函数的执行。
  1. 如果你的环境中启用了 serverless 函数,你会看到在 serverless 与 deployed 之间切换的选项。如果未选择且不存在部署,默认使用 serverless。
函数在 serverless 模式下的设置。
函数在 serverless 模式下的设置。
  1. 选择 Deployed(部署式) 执行模式选项。
  1. 如果函数还没有部署,选择 Create deployment(创建部署)
函数在 deployed 模式下、尚无已有部署时的设置。
函数在 deployed 模式下、尚无已有部署时的设置。
  1. 部署首次创建时,会应用默认配置。你可以滚动到页面底部查看完整配置。
函数在 deployed 模式下的设置。
函数在 deployed 模式下的设置。
  1. 按需修改部署配置。你可以配置以下内容:
  2. 分配给部署的计算资源,包括 CPU、GPU 和内存。
  3. 基于请求负载的自动扩缩容最小值与最大值。
  4. 部署启动时将设置的环境变量。
  5. 函数在返回超时错误之前被允许运行的总时长。与其他部署设置不同,超时是针对每个函数版本单独配置的。
修改函数在 deployed 模式下的内存分配。
修改函数在 deployed 模式下的内存分配。
  1. 选择 Save and start deployment(保存并启动部署),保存任何改动并启动部署。你也可以选择 Save without starting deployment(保存但不启动部署),仅保存配置而不启动部署。
保存并启动函数在 deployed 模式下的部署。
保存并启动函数在 deployed 模式下的部署。
  1. 如果你选择了 Save and start deployment,需要等待托管该函数的部署启动完成。这可能需要几分钟。
  1. 要验证部署是否运行,导航到包含该函数的代码仓库并运行该函数。函数应当成功执行并返回预期结果。
在 deployed 模式下运行一个函数。
在 deployed 模式下运行一个函数。

延伸阅读 · 相关页面

按主题横向跳转,不必顺着目录一篇篇读。

常见问题速答 · FAQ

关于「部署型函数:常驻执行模式」,读者最常问的几个问题。

前置条件是什么?
部署前必须满足的条件,先核对再动手。本指南要求你已编写并发布了一个 Python 或 TypeScript v2 函数。关于教程,请查阅 Python 函数上手或 TypeScript v2 函数上手文档。
两种执行模式怎么选?
对比维度与选型建议。如果你的租户启用了 serverless 函数,新仓库默认会使用它。对于大多数场景,我们通常建议使用 serverless 函数。
部署架构是什么?
部署后的整体结构,理解它才能排查问题。函数可以以 serverless 模式运行(利用按需资源),也可以被部署到一个长期运行的容器中。