Neta 海外 API 扩展评测报告

这版把测试量和覆盖面都拉大了,不只看老的几条公共读接口,还把空间话题、标签集合、标签角色、真实 collection、角色元素搜索和详情、关键词列表都纳了进来。最终总共观察了 3818 次请求,其中海外长跑是低并发、拉长时间的真实可用性口径。

总观察量
3818 次
扩展验收总量
31 组 case / 248 次(含 CN 基准)
阶梯压测
2880 次
场景矩阵
120 次
海外长跑
570 次 / 19 条接口
长跑时长
50.4 分钟
长跑通过率
97.72%
长跑 p95
14.71 秒

先看结论

海外读接口还不 ready

拿国内当尺子看,海外不是只慢一点。默认首页流、collection page1、我的剧本、我的角色这几条已经直接影响可用性。

也不是所有接口都坏

list_spacessuggest_keywordslist_my_elementum 这几条现在还能当稳定基线。问题是分布不均,不是整站全红。

最该先修什么

先修 request_interactive_feed 的首页默认流和 collection page1,再修 list_my_adventure_campaignslist_my_characters,最后处理 get_hashtag_info 的长尾。

接口红绿灯

先看最关键的接口,不用先翻到底。浅绿表示当前相对稳,浅红表示问题已经足够明显。

接口状态现在的数字怎么读
list_spaces 验收 100%,阶梯压测 97.50%,平均 5.83 秒。 这条能继续当海外公共读接口基线。
suggest_keywords 验收 100%,阶梯压测 100%,平均 5.24 秒。 搜索补全当前没暴露结构问题。
list_my_elementum 验收 100%,阶梯压测 100%,平均 4.69 秒。 登录态接口里最稳的一条。
request_interactive_feed 首页默认流 验收完整度 38.75%,匹配度 70.84%。阶梯压测完整度 30.00%。 问题不是速度,是回来的内容就不够用。
request_interactive_feed collection page1 两个真实 collection 的 page1 分别有 10 / 10 和 9 / 10 退成空壳。 翻页是明确故障点。
list_my_adventure_campaigns 验收成功率 37.50%,平均 13.09 秒。 成功率太低,别直接往上接。
list_my_characters 验收成功率 62.50%,平均 22.60 秒。 成功率和速度都不达标。
get_hashtag_info 长跑平均 11.67 秒,p95 25.34 秒,最慢 116.75 秒。 成功率不是最大问题,慢尾才是。

这次到底做了什么

阶段这次怎么扩规模为什么这样看
扩展验收 共同接口继续保留,海外新增空间、标签、真实 collection、角色元素搜索和详情 31 组 case,8 轮,共 248 次,含 CN 基准 先看每条接口本身回得对不对、全不全
阶梯压测 CN 和 COM 分线拉梯度,COM 不上过高并发,但把 case 面铺开 2880 次,请求梯度 CN 2 / CN 4 / CN 8 / CN 12 / CN 16 / COM 2 / COM 4 / COM 6 / COM 8 看一上强度后,成功率、结构完整度和尾部会不会一起掉
场景矩阵 把首页、个人流、两个真实 collection 的 page0/page1、relation 场景拆开反复测 120 次,10 轮 把 interactive feed 里的真故障和无效样本分开
海外长跑 低并发、拉长时间、把总量做大 570 次,持续 50.4 分钟 看真实使用节奏下到底稳不稳

拿 CN 当尺子看 COM

这里只看两边都测了的共同接口,避免把海外专属新增 case 混进来。这样更像同卷对比。

对照面CNCOM差距
扩展验收 成功率 100.00%,完整度 99.29%,匹配度 99.64%,平均 1.41 秒,p95 1.58 秒 成功率 85.71%,完整度 91.25%,匹配度 95.83%,平均 12.22 秒,p95 33.02 秒 成功率 -14.29 点,完整度 -8.04 点,匹配度 -3.81 点,平均慢 8.69 倍,p95 慢 20.88 倍
阶梯压测 成功率 100.00%,完整度 99.17%,匹配度 99.14%,平均 2.89 秒,p95 5.50 秒 成功率 99.58%,完整度 87.92%,匹配度 94.03%,平均 3.24 秒,p95 6.50 秒 成功率 -0.42 点,完整度 -11.25 点,匹配度 -5.11 点,平均慢 1.12 倍,p95 慢 1.18 倍
海外长跑 这轮不重跑同档 CN 长跑,仍以共同接口验收和阶梯压测做基准 通过率 97.72%,完整度 92.43%,匹配度 93.33%,平均 4.30 秒,p95 14.71 秒,p99 26.96 秒 说明海外的问题不只在高并发时才出现,低并发长跑也会暴露慢尾和失败

共同接口逐项对照

共同接口CN 验收COM 验收差距
get_hashtag_info 100.00% / 100.00% / 100.00% / 1.53 秒 100.00% / 100.00% / 100.00% / 173.53 秒 0.00 点 / 0.00 点 / 0.00 点 / 113.63 倍
list_my_adventure_campaigns 100.00% / 100.00% / 100.00% / 1.38 秒 37.50% / 100.00% / 100.00% / 13.09 秒 -62.50 点 / 0.00 点 / 0.00 点 / 9.46 倍
list_my_characters 100.00% / 100.00% / 100.00% / 1.59 秒 62.50% / 100.00% / 100.00% / 22.60 秒 -37.50 点 / 0.00 点 / 0.00 点 / 14.26 倍
list_my_elementum 100.00% / 95.00% / 100.00% / 1.53 秒 100.00% / 100.00% / 100.00% / 4.69 秒 0.00 点 / +5.00 点 / 0.00 点 / 3.06 倍
list_spaces 100.00% / 100.00% / 100.00% / 1.54 秒 100.00% / 100.00% / 100.00% / 5.83 秒 0.00 点 / 0.00 点 / 0.00 点 / 3.78 倍
request_interactive_feed home 100.00% / 100.00% / 100.00% / 1.93 秒 100.00% / 38.75% / 70.84% / 6.15 秒 0.00 点 / -61.25 点 / -29.16 点 / 3.19 倍
suggest_keywords 100.00% / 100.00% / 97.50% / 1.57 秒 100.00% / 100.00% / 100.00% / 5.24 秒 0.00 点 / 0.00 点 / +2.50 点 / 3.34 倍

共同接口阶梯压测对照

共同接口CN 阶梯压测COM 阶梯压测差距
list_my_adventure_campaigns 100.00% / 100.00% / 100.00% / 5.42 秒 100.00% / 100.00% / 100.00% / 5.94 秒 0.00 点 / 0.00 点 / 0.00 点 / 1.10 倍
list_my_characters 100.00% / 100.00% / 100.00% / 5.36 秒 100.00% / 100.00% / 100.00% / 6.78 秒 0.00 点 / 0.00 点 / 0.00 点 / 1.27 倍
list_my_elementum 100.00% / 95.00% / 100.00% / 5.34 秒 100.00% / 100.00% / 100.00% / 5.83 秒 0.00 点 / +5.00 点 / 0.00 点 / 1.09 倍
list_spaces 100.00% / 100.00% / 100.00% / 6.15 秒 97.50% / 97.50% / 97.50% / 10.23 秒 -2.50 点 / -2.50 点 / -2.50 点 / 1.66 倍
request_interactive_feed home 100.00% / 100.00% / 100.00% / 5.52 秒 100.00% / 30.00% / 66.67% / 5.44 秒 0.00 点 / -70.00 点 / -33.33 点 / 0.99 倍
suggest_keywords 100.00% / 100.00% / 94.83% / 5.23 秒 100.00% / 100.00% / 100.00% / 4.76 秒 0.00 点 / 0.00 点 / +5.17 点 / 0.91 倍

海外长跑总结果

指标数值怎么读
请求总量570这轮低并发长跑一共打了这么多次
通过率97.72%557 次成功,13 次失败
返回完整度92.43%失败请求按 0 记,不是只看成功样本
预期匹配度93.33%失败请求也按 0 记,所以更接近真实可用性
最短延迟1.46 秒这轮里最快的一次
平均延迟4.30 秒整体体感速度
p502.38 秒一半请求在这个时间内完成
p753.21 秒四分之三请求在这个时间内完成
p909.78 秒开始看到重尾
p9514.71 秒尾部已经明显拖长
p9926.96 秒极端慢请求的真实重量
最慢延迟116.75 秒最糟的一次
众数区间2-5s最常见的速度落点
整体延迟区间1.46 秒 到 116.75 秒这轮观测到的完整范围

整体延迟分布

这次不再只给平均值,把整条分布都摊开。最常见的区间和极端慢尾都会一起看到。

延迟区间请求数占比
0-2s 30 5.26%
2-5s 464 81.40%
5-10s 19 3.33%
10-20s 40 7.02%
20-40s 15 2.63%
40-80s 1 0.18%
80s+ 1 0.18%

按时间段看

每 10 分钟切一段,专门看这条线是不是越跑越飘。这样能把偶发毛刺和持续性可用性分开。

时间段开始时间请求数通过率完整度匹配度平均p95
0 2026-03-24 00:47 113 100.00% 94.61% 95.61% 4.29 秒 17.71 秒
1 2026-03-24 00:57 115 98.26% 92.05% 93.04% 4.21 秒 16.84 秒
2 2026-03-24 01:07 102 93.14% 89.27% 89.93% 4.90 秒 22.02 秒
3 2026-03-24 01:17 109 98.17% 92.85% 93.64% 4.47 秒 13.56 秒
4 2026-03-24 01:27 126 98.41% 92.75% 94.18% 3.77 秒 7.28 秒
5 2026-03-24 01:37 5 100.00% 99.00% 87.50% 4.16 秒 12.98 秒

失败类型

这张表只看失败请求本身,方便判断当前更像网络抖动、接口报错,还是别的结构问题。

失败类型次数失败占比
接口返回异常 11 84.62%
返回体不是合法 JSON 2 15.38%

场景矩阵结果

interactive feed 不是整条都坏,但边界已经很清楚

个人流和两个真实 collection 的 page0、relation 场景都能回正文。问题主要集中在首页默认流和真实 collection 的 page1,那里正文返回率持续很低,基本就是空壳。

场景请求数成功率返回正文率空壳率空列表但还说可翻页平均p95
标签角色分页 10 100.00% 0.00% 0.00% 100.00% 2.97 秒 4.14 秒
标签种子 collection page0 10 100.00% 100.00% 0.00% 0.00% 3.33 秒 7.11 秒
标签种子 collection page1 10 100.00% 0.00% 100.00% 0.00% 3.09 秒 5.49 秒
标签种子 relation child 10 100.00% 100.00% 0.00% 0.00% 3.08 秒 4.62 秒
标签种子 relation same 10 100.00% 100.00% 0.00% 0.00% 3.78 秒 11.83 秒
首页 page0 10 100.00% 0.00% 100.00% 0.00% 3.35 秒 5.55 秒
首页 page1 10 100.00% 0.00% 100.00% 0.00% 2.58 秒 3.67 秒
personal_feed page0 10 100.00% 100.00% 0.00% 0.00% 3.31 秒 8.13 秒
个人种子 collection page0 10 90.00% 90.00% 0.00% 0.00% 4.36 秒 13.34 秒
个人种子 collection page1 10 90.00% 0.00% 90.00% 0.00% 2.70 秒 5.01 秒
个人种子 relation child 10 100.00% 100.00% 0.00% 0.00% 2.66 秒 3.62 秒
个人种子 relation same 10 90.00% 90.00% 0.00% 0.00% 4.53 秒 13.22 秒

怎么读。 首页 page0 正文返回率 0.00%,page1 也是 0.00%。两个真实种子的 collection page0 正文返回率都是 100.00% 和 90.00%,但 page1 都掉到 0.00% 和 0.00%。标签角色分页这条空列表但还说可翻页的比例是 100.00%。

分接口详细统计

这里把每条接口的通过率、完整度、匹配度、平均值、分位数、延迟区间和众数都摊开。扩展覆盖后,低并发长跑里也能看见外围接口的网络错误,不再只盯老几条。

接口 请求数 通过率 完整度 匹配度 平均 p50 p75 p90 p95 p99 区间 众数
request_interactive_feed personal_feed 30 93.33% 70.93% 93.33% 4.07 秒 2.15 秒 2.91 秒 11.96 秒 15.43 秒 22.02 秒 1.94 秒 到 22.02 秒 2-5s
list_space_topics 30 93.33% 89.19% 93.33% 5.08 秒 2.37 秒 2.92 秒 4.09 秒 26.96 秒 34.96 秒 1.86 秒 到 34.96 秒 2-5s
list_my_characters keyword 30 93.33% 93.33% 93.33% 3.10 秒 2.26 秒 2.53 秒 4.32 秒 11.88 秒 12.12 秒 2.03 秒 到 12.12 秒 2-5s
suggest_keywords 30 93.33% 93.33% 93.33% 3.25 秒 2.08 秒 3.07 秒 4.21 秒 11.86 秒 13.03 秒 1.46 秒 到 13.03 秒 2-5s
list_my_adventure_campaigns 30 93.33% 93.33% 93.33% 3.07 秒 2.35 秒 3.02 秒 3.26 秒 11.45 秒 11.48 秒 1.96 秒 到 11.48 秒 2-5s
search_character_or_elementum character 30 96.67% 96.67% 96.67% 4.22 秒 2.17 秒 2.66 秒 3.58 秒 12.84 秒 47.94 秒 1.73 秒 到 47.94 秒 2-5s
list_my_elementum 30 96.67% 96.67% 96.67% 3.01 秒 2.18 秒 3.08 秒 3.68 秒 6.69 秒 14.71 秒 1.63 秒 到 14.71 秒 2-5s
list_spaces 30 96.67% 96.67% 96.67% 7.08 秒 3.26 秒 3.80 秒 4.10 秒 6.21 秒 116.75 秒 1.89 秒 到 116.75 秒 2-5s
request_interactive_feed home 30 100.00% 30.00% 66.67% 2.74 秒 2.28 秒 2.71 秒 3.16 秒 3.46 秒 11.85 秒 1.98 秒 到 11.85 秒 2-5s
get_hashtag_characters 30 100.00% 96.00% 50.00% 2.28 秒 2.13 秒 2.35 秒 2.62 秒 3.37 秒 3.74 秒 1.92 秒 到 3.74 秒 2-5s
get_hashtag_info 30 100.00% 100.00% 100.00% 11.67 秒 10.05 秒 17.65 秒 22.81 秒 25.34 秒 27.97 秒 2.77 秒 到 27.97 秒 10-20s
get_hashtag_collections 30 100.00% 100.00% 100.00% 12.17 秒 10.59 秒 16.84 秒 22.25 秒 24.19 秒 24.48 秒 3.46 秒 到 24.48 秒 10-20s
list_my_elementum keyword 30 100.00% 100.00% 100.00% 3.05 秒 2.38 秒 2.72 秒 3.16 秒 6.48 秒 16.35 秒 1.95 秒 到 16.35 秒 2-5s
search_character_or_elementum elementum 30 100.00% 100.00% 100.00% 3.06 秒 2.51 秒 2.97 秒 3.35 秒 5.48 秒 15.70 秒 1.97 秒 到 15.70 秒 2-5s
request_character_or_elementum elementum 30 100.00% 100.00% 100.00% 3.07 秒 2.47 秒 3.08 秒 4.07 秒 4.67 秒 12.98 秒 2.05 秒 到 12.98 秒 2-5s
list_my_characters 30 100.00% 100.00% 100.00% 3.42 秒 2.31 秒 2.83 秒 3.36 秒 4.25 秒 29.10 秒 1.80 秒 到 29.10 秒 2-5s
request_character_or_elementum character 30 100.00% 100.00% 100.00% 2.52 秒 2.25 秒 2.75 秒 3.28 秒 4.11 秒 5.04 秒 1.60 秒 到 5.04 秒 2-5s
suggest_content 30 100.00% 100.00% 100.00% 2.55 秒 2.29 秒 2.77 秒 2.86 秒 3.05 秒 8.70 秒 1.54 秒 到 8.70 秒 2-5s
request_interactive_feed collection page0 30 100.00% 100.00% 100.00% 2.38 秒 2.24 秒 2.65 秒 2.83 秒 2.99 秒 3.51 秒 1.98 秒 到 3.51 秒 2-5s

For Improvement 高亮

当前主问题还是工程问题,不是算法问题

最硬的证据仍然集中在空壳返回、重尾、网络错误和压测下显著劣化这些地方。搜索和内容匹配不是完全没有问题,但现在还轮不到它当主锅。

优先级归类问题证据现在怎么读
P0 工程 首页默认流和真实 collection 翻页稳定空壳 场景矩阵里首页 page0 正文返回率 0.00%,page1 也是 0.00%。两个真实种子的 collection page1 正文返回率都只有 0.00% 和 0.00%。 这不是推荐不准,是某些场景根本没把正文带回来。首页默认流和翻页聚合链路要先修。
P0 工程 话题详情长尾极重 get_hashtag_info 长跑平均 11.67 秒,p95 25.34 秒,p99 27.97 秒,最慢 27.97 秒。 结果大体能回,但性能已经差到会拖住整轮测试,属于独立 blocker。
P1 工程 一上强度,海外共同接口整体明显慢于 CN 共同接口阶梯压测里,COM 比 CN 平均慢 1.12 倍,p95 慢 1.18 倍,成功率低 -0.42 点。 这更像整体稳定性和依赖背压问题,不像单个接口的小逻辑 bug。
P1 工程 覆盖面拉大后,低并发长跑也能撞到网络错误 get_hashtag_collections 成功率 100.00%,角色详情 100.00%,元素搜索 100.00%。它们都在低并发长跑里出现过网络错误。 问题不只在互动流,外围的集合、搜索、详情链路也不够稳。
P2 工程 空列表分页标记不一致 get_hashtag_characters 长跑匹配度 50.00%。场景矩阵里这条空列表但还说可继续翻页的比例是 100.00%。 这更像分页状态机或接口装配问题,不像底层数据缺失。前一轮海外 MySQL 已经证明这个标签本来就没有角色关系。
P3 算法 相关性不是当前主锅 suggest_keywords 长跑匹配度 93.33%,suggest_content 长跑匹配度 100.00%。问题更多跟失败和慢尾一起出现,而不是结果明显跑偏。 先把工程抖动压下去,再做更严格的搜索和推荐相关性评测才有意义。
P3 数据 话题 lore 还留着一个小的数据口径边角 前一轮海外 MySQL 补证已经确认,伪人大本营 有 6 条 category = null 的 lore 没被接口带出来。 这不是当前主 blocker,但应该补齐分类或把过滤规则明确写清楚。

数据库补证还有效

这版重点放在 API 量级和覆盖面扩容,没有再重复全库扫一遍。数据库归因沿用前一轮已经做过的海外 MySQL 补证,用来防止把接口问题误判成底层没数据。

对象前一轮海外 MySQL 结论这版怎么用
空间和话题 lore海外库里空间、主标签和 lore 都真实存在,伪人大本营 lore 还多出 6 条 category = null 的边角数据所以话题详情当前更像性能问题,附带一个小的数据口径边角
互动内容供给海外库里能查到大量 SUCCESS 的互动内容所以首页和翻页空壳不该被写成底层没内容,更像上层聚合或分页链路问题
角色和元素资产测试角色和元素已经能在海外库里对上所以这条链路现在不是 blocker,只是还会偶发网络错误
标签角色关系伪人大本营 本来就没有角色关系所以空列表本身没错,可疑的是空列表还写 has_next = true
用户剧本海外用户的剧本总数和接口能对上说明这条登录态接口主要是慢,不是返回错

指标定义

先说结论

这套分数不是官方 schema 打出来的自带字段。它是测试口径,目标是衡量一条接口拿来直接验收时,到底能不能用、回得清不清楚、是不是贴着预期走。

指标怎么算什么意思
通过率成功请求数 / 总请求数先看接口有没有正常回完。失败、报错、非 JSON 都算失败。
返回完整度(顶层字段分 + 列表存在分 + 列表项关键字段分 + 展示字段分 + 分页字段分) / 5看结构齐不齐,字段够不够直接拿来展示和翻页。
预期匹配度所有匹配检查项分数的平均值看结果是不是贴着预期走,尤其是搜索、列表和分页。
平均 / p50 / p75 / p90 / p95 / p99按所有请求耗时排序后取对应位置不是只看平均值,越往后越能看出慢尾是不是很重。
众数区间请求最密集的延迟区间看最常见的真实速度落点。
匹配检查怎么算例子
最少条数min(实际条数 / 要求条数, 1)要求至少 5 条,实际回 4 条,这项就是 0.8。
词覆盖命中词数 / 总词数预设 3 个词,命中 2 个,这项就是 0.67。
查询回显命中结果条数 / 检查条数检查 5 条结果,其中 4 条带查询词,这项就是 0.8。
精确值相等记 1,不等记 0比如页码要求是 0,回 0 就满分。
分页一致性分页规则命中数 / 分页规则总数会一起检查总数、页大小、页号和列表长度能不能对得上。

这些字段从哪来。 先看真实成功样本到底回了什么,再结合这条接口最小可用时必须要有的字段,最后才固化成验收口径。也就是说,它是验收 contract,不是后端官方 contract。

为什么 interactive feed 明明成功还会低分。 因为它不能只回一个 page_data。上层真正要的是 module_list 和里面的展示内容。只回分页壳子,技术上算成功,验收上也该记低分。

一句话结论

海外还不适合往 skill 测试推进

这版把测试量和覆盖面拉大以后,结论反而更稳了。海外不是只有一两条接口慢,而是首页默认流、翻页、话题详情慢尾、外围集合和详情网络错误这些问题叠在一起。先把这些工程问题收掉,再谈更上层的 skill 测试。