跳到主要内容

Functions

最后更新:2026 年 7 月 16 日

你游戏的服务端逻辑 —— 全球运行,自动扩缩。用 TypeScript、JavaScript、Python 或 Go 编写,用 PlayServ CLI 部署 —— 没有基础设施要你操心。

多区域自动扩缩按 env 覆盖实时日志

Functions 一节位于 Project 侧边栏的 Engineering 之下。五个标签页覆盖了全部内容:Overview、Functions、Bindings、Logs 和 History。

信息

Function 由 PlayServ CLI 创建和部署,从你的本地工程运行。一次部署完成后,这个 Function 就会出现在下面各个标签页中,带有实时状态、指标和日志。


Overview​

当前 Environment 中所有 Function 的实时健康看板。

Functions —— 带实时指标的 Overview 标签页

Functions live
当前正在接收流量的 Function 数量。下方的增量显示近期新增了多少个。
Replicas running
所有区域中活跃实例的总数,按区域数量以及其中正在扩缩的数量细分。
Invocations 24h
当前和上一个 24 小时的调用次数并排显示,配有走势图和相对前一周期的变化量。
Error rate 24h
失败调用所占的百分比。健康时为绿色并标注 within target;偏高时为红色,并用增量标示变化方向。
P95 latency 24h
第 95 百分位的响应时间。within target 表示你还在 SLA 之内。每次部署之后,这是最快的回归信号。

Function 列表​

Project 中的所有 Function,汇总在一张表里。

Functions —— Function 列表标签页

按名称、描述或语言搜索。用 Status 和 Runtime 下拉框筛选 —— 在较大的项目里很有用,比如你只想看正在失败的 Python Function。

每一行都把要紧的东西摆在明面上:

标识

语言标记(Js、Py、Go、C#)、Function 名称,以及来自清单的一行描述。

健康状况

状态标记、副本数(运行中 / 期望值)、当前与上一个 24 小时周期的调用次数、错误率、P95 延迟,以及部署日期和 commit SHA。

状态​

live

已部署并正在承载流量。正常的健康状态。

staged

已部署但不接收流量。适合在转为 live 之前做灰度验证。

failing

副本正在崩溃,或错误数超过了配置的阈值。需要处理。

disabled

已手动停止。所有副本都已下线,这个 Function 不会接受调用。

点击右上角的 + New function,可以从模板脚手架出一个新 Function。这项功能尚未推出 —— 请用 CLI 创建新的 Function。


Function 详情面板​

点击任意一行,右侧会打开详情面板。顶部显示 Function 名称、扩缩策略、上次部署日期与 commit SHA,以及实时状态。四个标签页提供完整的控制。

Status​

单个 Function 的实时健康状况。顶部有三块统计区:

Function 详情 —— 带副本列表和 At a glance 的 Status 标签页

Status & Auth
当前状态与部署日期。Auth 显示调用方需要什么 —— 公开 endpoint 用 none,受保护的用 player。
Last Invocation
这个 Function 上次被调用是多久以前,以及那个窗口内的 P95 延迟。
Replicas & Calls
运行中的副本数、按两个周期拆分的 24 小时调用次数,以及 24 小时错误率和错误总数。

Replicas 列出每个活跃实例的 ID、区域、uptime、内存和 CPU。点击 Scale 可立即调整副本数 —— 无需重新部署。点击任意副本行可展开 At a glance:

Status
实时状态与 uptime
Region
部署所在区域
Memory
峰值用量(当前 MB / 上限 MB)
CPU
15 分钟平均值
Started
这个副本实例是何时起来的
Deploy
当前运行的 commit SHA,标注为 (current)
Last error
最近一条错误信息,没有则显示 —

Bindings​

运行时注入到这个 Function 里的全部配置。分两块。

Function 详情 —— 带 env var 和 secret 的 Bindings 标签页

Env vars —— 完整的变量表:

Name
变量名 —— 例如 LOG_LEVEL、NODE_ENV
Effective value
运行时实际收到的值
Source
恒为 manifest —— 在 platform.json 中声明
Manifest default
声明的默认值,与 autofix 一同显示
Override (this env)
按 Environment 的覆盖值;可就地编辑。生效时会高亮。

覆盖值立即生效并重启副本 —— 不需要重新部署。清单中的默认值在这里是只读的。

Secrets —— 关联到这个 Function 的凭据:

Name
secret 名称 —— 例如 STRIPE_WEBHOOK_SECRET、DATABASE_URL
Status
已解析时为 linked;secret 尚未设置时为 missing
Used by
有多少个 Function 共用这个 secret
Rotated
这个 secret 上次轮换的日期

点击 Rotate 生成新值。点击 Open project Bindings → 管理 Project 级的全部 secret。

Settings​

这个 Function 的运行时行为。独立保存 —— 不需要重新部署代码。

Function 详情 —— Settings 标签页

Runtime
Memory tier
每个副本的内存。默认:Standard (256 MB)。必须是清单中声明的五个档位之一 —— 中间值会在部署时被拒。
Timeout
handler 的最长执行时间。默认:300 s。硬上限是 3600 s。对所有调用类型都适用。
Max concurrency
每个副本并发调用数的硬上限。默认:50。当扩缩策略为 auto 且指标为请求并发时,Scaling 卡片中的 Target 值会作为相对该上限的软触发阈值。
Access
Auth requirement
none —— 允许匿名调用方;适合公开 webhook 和开放 endpoint。player —— 调用方必须出示已登录的 Player 会话(叠加在 Project 的 pk_* key 之上的 Player JWT);PlayServ 会在 handler 内填好 ctx.player。
Scaling
Policy
manual —— 副本数由你自己控制。auto —— 平台按请求并发相对 Max concurrency 的比例自动扩缩。
Replicas (desired)
策略为 manual 时的目标实例数。点击 Scale 立即生效。

Deploys​

这个特定 Function 的完整部署历史 —— 每一次经手过它的构建,最新的在最前。

Status
live · draining(流量正在切向更新的版本)· archived
Deployed at
该次部署的时间戳
Revision
git 分支 · 短 commit SHA
By
部署者的头像和邮箱
Build
succeeded,或 Build failed 并附上构建日志链接
Action
处于 live 和 draining 的部署显示 locked;archived 的显示删除图标

在旧版本的在途请求处理完毕、流量完全切换之前,这次部署会处于 draining 状态。

信息

Deploys 面板是只读的。所有部署的唯一可信来源是你的 CLI —— 在这里既不能触发部署,也不能回滚。


Function 的版本​

默认情况下,每次部署都会替换掉那个没有 tag 的 latest,它承载全部流量。若要让同一个 Function 的第二个可寻址版本并行运行 —— 用于灰度验证,或某个固定版本的客户端 —— 就带上 version tag 部署:

playserv-cli deploy --tag ver2

带 tag 的部署会拿到自己的可寻址 URL,并且默认不分走任何流量 —— 所有常规调用仍由没有 tag 的 latest 承接。用同一个 tag 重新部署会就地改指向(后写者胜);不同 tag 之间互不覆盖。

要调用某个特定版本,在调用 /fn/{slug} 时用 header 带上它的 tag:

X-Playserv-Function-Version: ver2

不带版本 header 时,调用会走 latest。如果 header 里指定的 tag 并未上线,调用会以 function_version_not_found 失败 —— 不会悄悄回落到 latest。从另一个 Function 发起时,SDK 用调用上的 target_version 选择版本,而不是 header。

tag 规则

version tag 长度为 3 到 22 个字符,由小写字母、数字和连字符组成,且必须以字母开头 —— 例如 ver2 或 v2-canary。v1 比合法 tag 短了一个字符。

提升会带着 tag 走

把某个部署从 dev 提升到 prod 时,它的 tag 会一并带过去:带 tag 的来源会以同样的 tag 落在 prod 且不发生流量切换(可用同一个 header 访问);不带 tag 的来源则成为 prod 新的 latest。


按分支自动部署​

Project 可以把 git 分支绑定到 Environment,这样往该分支推送就会自动部署到映射的 Environment —— 例如 main → prod、develop → dev。绑定建立之后,合并到该分支就会触发部署,不需要手动执行 CLI;产生的构建会带着分支和 commit 出现在 Deploys 和 History 视图中,与 CLI 部署一模一样。

分支绑定按 Project 管理(列出、创建、更新、移除),每条绑定把一个分支映射到一个目标 Environment。没有绑定的分支就不会自动部署 —— 在你添加绑定之前,推送到它的提交会被部署流水线忽略。

备注

自动部署和手动 CLI 部署底层用的是同一条流水线 —— 分支绑定只是决定自动化构建落到哪个 Environment。无论部署是由推送触发还是由 CLI 触发,version tag 和提升的行为完全一致。


Bindings 标签页​

Functions 一节顶部的 Bindings 标签页是一个覆盖整个 Project 的视图 —— 所有 Function 的所有 env var 汇总在一张扁平表里,列与单个 Function 视图中的相同。

审计覆盖值
一眼看清当前 Environment 中,哪些 Function 有生效的按 env 覆盖。
发现漂移
在一个视图里找出整个 Project 中偏离了清单默认值的变量。
批量修改
不必逐个打开 Function,就能跨多个 Function 做按 env 的改动。改动立即生效。

Logs​

面向整个 Environment、跨所有 Function 的实时日志流。

Functions —— 带实时流的 Logs 标签页

Function 选择器

左侧面板列出所有 Function 及其未读数。点击即可筛选,用复选框可多选。Mark all / Unmark all 切换全选状态。

日志流

每条记录包含:精确到毫秒的时间戳、级别标记(INFO 蓝色 · WARN 琥珀色 · ERROR 红色)、Function 名称和消息内容。带追踪的调用会附上 trace: <id> 后缀 —— 同一次调用产生的所有行共用这个 ID。

流控制项:

Time range
最近 24 小时(默认)· 最近 7 天 · 自定义区间
Level
INFO · WARN · ERROR · NONE
Search
在所有日志消息中做全文检索
Live
开启后实时推送新记录
提示

调试时把范围筛到单个 Function 并打开 Live —— 你触发调用的同时就能实时看到输出。


History​

Project 中任何 Function 经历过的每一次部署 —— 覆盖整个 Project 的部署日志,最新的在最前。

每条记录显示一个状态圆点(绿色 = 成功,红色 = 失败)、带分支和短 commit SHA 的 git 修订、commit 信息、作者、相对时间、改动的 Function 数量以及构建时长。失败的构建会显示 Build failed 标记,并附 View build logs 链接。

用 Time range 和 Environment 下拉框筛选。

信息

History 收录每一次成形的部署 —— 包括失败的构建和没有改动任何 Function 的推送。用 Environment 筛选器把 dev 和 prod 的历史分开看。


下一步​