循序渐进 · 教学 · 函数(七)

管理已发布的函数

函数发布之后,在 Ontology Manager 里统一查看和管理。这一篇讲搜索、概览页、配置继承、快照,以及时间/内存等强制上限。

全部目录 ← 上一篇 管理已发布的函数 下一篇 →
本文来源 · Source 内容整理自 Palantir Foundry 官方文档:
https://www.palantir.com/docs/foundry/functions/manage-functions/
原始标题:Function management > Manage published functions

先记住这几条

① 统一入口是 Ontology Manager
所有类型的函数发布后都在这里查看和管理。
② 有强制资源上限
执行时间与内存都有硬限制,超限会被终止 —— 这是最常见的线上故障原因。
③ 配置可继承
函数配置支持继承机制,改一处影响一片。
④ 快照保证一致性
consistent snapshots 确保函数看到的本体状态是一致的。
0

写在前面

发布后,所有类型的函数都可以通过 Ontology Manager 查看和管理。

1

搜索函数

搜索函数

要点:函数多了之后,先学会怎么快速找到它。

要搜索函数,导航到 Ontology Manager 并选择 Functions(函数) 标签页。你可以按函数上的大多数元数据进行搜索,包括但不限于函数名、描述、API 名称与 RID。

在 Ontology Manager 中搜索函数
在 Ontology Manager 中搜索函数
2

函数概览页

函数概览页

要点:单看一个函数的基本信息与健康状态。

在 Ontology Manager 中,选择一个函数即可查看其输入、输出、使用历史与函数指标,包括成功与失败次数以及 P95 执行时长。

在 Ontology Manager 中查看函数概览
在 Ontology Manager 中查看函数概览
3

函数配置页

函数配置页

要点:配置执行相关参数,注意配置是可以继承的。

某些类型的函数允许你配置超时、内存上限等资源。如果你的函数支持任何配置选项,你可以在 Configuration(配置) 标签页查看并编辑它们。如果该标签页不存在,说明函数不支持任何配置选项。

配置覆盖是按函数版本生效的。取决于你发布函数所用的应用,新版本可能采用默认配置,你可能需要重新应用之前的配置覆盖。

例如,你可以配置 TypeScript 函数的超时,如下图所示。

在 Ontology Manager 中管理函数运行时配置
在 Ontology Manager 中管理函数运行时配置

Configuration inheritance

函数在发布新版本时,开箱即用地支持继承配置覆盖。配置根据语义化版本规范,从上一个稳定版本继承。如果发布的是非稳定版本,配置将从上一个版本继承,无论它是否为稳定发布。

配置继承要求你的仓库包含更新的模板配置。你可以检查隐藏的 templateConfiguration.json 文件,确认仓库所基于的版本。

  • 对于 TypeScript v1 函数仓库,必须满足 parentTemplateVersion >= 3.512.0
  • 对于 Python 函数仓库,必须满足 parentTemplateVersion >= 0.423.0
4

一致性快照

一致性快照

要点:保证函数执行期间读到的是同一份本体快照,避免读到半截状态。

函数支撑的动作会自动在单次运行中的所有读请求上使用同一个 Ontology 快照。

一致性快照提供以下特性:

  • 数据一致性: 没有快照时,函数内连续的 Ontology 查询可能因底层数据在两次请求之间发生变化而返回不同版本的数据。有了快照,你的函数运行在一个一致的 Ontology 视图上,类似于数据库事务中的快照隔离。
  • 性能提升: 在所有 Ontology 请求间复用同一个快照,显著提升了 Ontology 读性能。单个函数支撑的动作,以及其中的任何查询,都能享受到这一好处。

Snapshot configuration

如果你需要为高级用例显式管理快照,可以在函数配置页使用以下选项配置快照行为:

  • 默认(推荐): 除非遇到与快照相关的错误,否则保持该选项选中。
  • 禁用快照: 当你需要在一次运行中获取每次查询的最新数据,或因长时运行的工作负载而遇到快照错误时使用。
  • 启用快照: 当你需要在所有读之间获得一致的时点视图、并希望获得更好的读性能,且你的函数能够容忍数据在运行中不更新时使用。对大多数用例不推荐。

默认情况下,带有源(sources)的函数针对实时数据运行,不使用快照。不建议强制启用快照,因为函数可能执行写入或调用外部系统。

5

强制上限

强制上限

要点:时间限制、内存限制、多线程、对象集上限 —— 踩线就失败,务必先看清楚。

平台设置了若干限制,以防止函数在执行时消耗过多资源。

Time limit

函数默认限制运行时间为 60 秒。这些限制可以在函数配置页修改。

在实时预览中运行函数时,允许运行长达 280 秒,即使已在函数配置页修改过。

通过 Automate 执行的函数异步运行,最长可达 4 小时,超出标准执行限制。

TypeScript v1 函数还额外限制 30 秒 CPU 时间,且不可配置。当函数超过这一阈值时,原因通常是低效的数据加载逻辑。请参阅优化性能一节,了解如何避免 CPU 超时。

Memory limit

内存限制因 TypeScript v1、TypeScript v2 与 Python 函数而异。

TypeScript v1

函数执行限制内存使用为 128 MB(兆字节)。这个限制很少达到;通常函数会先遇到时间限制或对象加载限制,而非内存限制。

Deployed Python functions

部署式 Python 函数默认内存使用为 2 GB(吉字节)。目前,部署式 Python 函数无法在函数配置页配置内存使用。

Serverless Python and TypeScript v2 functions

Serverless 函数默认内存使用为 1024 MiB(兆比字节)。这可以在函数配置页512 MiB 配置到 5120 MiB

Multithreading

对于 TypeScript v1,函数执行在单线程上,任意时刻只允许一个计算。但你可以并行化对象集或链接的加载。更多信息请参阅优化性能

对于 TypeScript v2 与 Python 函数,你可以使用内置的 Node.js worker_threads 与 Python threading 库进行多线程处理。

Object set limits with TypeScript v1

使用对象集时,调用 .all().allAsync() 会在以下情况抛出错误:

  • 一次性从对象集加载超过 100,000 个对象。一般而言,即便加载数万个对象也会遇到时间或内存限制。若你遇到此限制,请考虑使用聚合获取汇总数据,或使用排序与限制获取对象子集。
  • 一次性使用超过 3 个邻近搜索(search arounds)

某些聚合与分桶操作存在限制。详见聚合一节。

延伸阅读 · 相关页面

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

常见问题速答 · FAQ

关于「管理已发布的函数」,读者最常问的几个问题。

搜索函数是什么?
函数多了之后,先学会怎么快速找到它。要搜索函数,导航到 Ontology Manager 并选择 Functions(函数)标签页。你可以按函数上的大多数元数据进行搜索,包括但不限于函数名、描述、API 名称与 RID。
函数概览页是什么?
单看一个函数的基本信息与健康状态。在 Ontology Manager 中,选择一个函数即可查看其输入、输出、使用历史与函数指标,包括成功与失败次数以及 P95 执行时长。
函数配置页是什么?
配置执行相关参数,注意配置是可以继承的。某些类型的函数允许你配置超时、内存上限等资源。如果你的函数支持任何配置选项,你可以在 Configuration(配置)标签页查看并编辑它们。如果该标签页不存在,说明函数不支持任何配置选项。
一致性快照是什么?
保证函数执行期间读到的是同一份本体快照,避免读到半截状态。函数支撑的动作会自动在单次运行中的所有读请求上使用同一个 Ontology 快照。