SuperAPI AI 工具集

adding-personhog-rpc

编程与开发

查看项目

更新于 10-16 08:07

技能介绍

用途:这是一份面向 PostHog 内部 personhog 服务的开发指南,说明如何端到端新增一个 RPC,包括 proto 定义、代码生成、Rust 实现和客户端更新。

适用前提:personhog 只服务 person、distinct ID、group、group type mapping、cohort membership 和 feature flag hash key override 等数据。若目标数据不在文档列出的表(如 posthog_person、posthog_group、posthog_cohortpeople 等)中,则不应走 personhog。

主要步骤:先设计数据访问模式,确认 SQL 命中已有索引、区分读写与一致性要求;再在 proto/personhog/ 下定义消息与 RPC,service 与 replica 的 RPC 签名必须一致,person 数据写入才需 leader.proto;随后生成客户端桩:Python 用 bin/generate_personhog_proto.sh,Node.js 用 cd nodejs && pnpm run generate:personhog-proto,Rust 由 tonic 在 cargo build 时重新生成。

Rust 实现分三层:personhog-replica 的存储层(trait 与 postgres 实现,使用 sqlx 宏、DB_QUERY_DURATION 与 DB_ROWS_RETURNED 指标、读用 replica_pool、写用 primary_pool)、服务层(提取请求字段、调用存储、转换响应与错误码)、personhog-router 的路由接线(route_request、call_backend!、route_request! 宏及 backend trait)。

验证命令:cargo build -p personhog-proto、cargo build -p personhog-replica、cargo build -p personhog-router、cargo test -p personhog-replica、cargo test -p personhog-router。

限制:文档未提供具体 proto 字段示例、索引清单细节、错误码映射规则及性能数据,需参考其引用的 references 文件;所有查询必须走索引扫描,禁止顺序扫描。