跳到主要内容

PostHog Cloud 集群架构

PostHog 目前运营着三个不同的 ClickHouse 集群:

  1. Prod-US:美国区主生产集群
  2. Prod-EU:欧盟区主生产集群
  3. Dev:开发测试集群
React Flow mini map

分片和副本架构

分片(Sharding)

分片是将数据水平分割成多个部分并分布到不同节点的技术。在我们的架构中:

加载中...
  • 目的:提高系统的处理能力和存储容量
  • 原理:根据分片键(如用户ID、时间等)将数据分散到不同节点
  • 优势
    • 单表数据量突破单机限制
    • 提升并行处理能力
    • 减少单节点压力

副本(Replication)

副本是数据的完整拷贝,用于提供高可用性和故障恢复能力。

加载中...
  • 目的:保证数据可用性和一致性
  • 原理:通过 ZooKeeper 管理复制过程和故障转移
  • 优势
    • 提供故障恢复能力
    • 支持读取负载均衡
    • 提高数据可靠性

分片和副本配置

集群分片数副本数总节点数说明
美国区在线集群224平衡性能和可用性
美国区离线集群212优化成本
欧盟区存储节点8216大规模并行处理
开发测试集群122测试环境配置

共同特征

所有集群都具有以下共同特点:

  • 由 ClickHouse 团队管理
  • 运行版本为 23.12.5.81
  • 相似的数据模式
  • 统一的数据保留策略
  • 统一的备份策略
  • 统一的监控和告警机制

ZooKeeper 配置

我们使用 ZooKeeper 来管理 ClickHouse 的复制表。它负责管理副本之间的数据复制并确保一致性。

配置项美国区欧盟区开发环境
节点数量3个节点3个节点3个节点
实例类型m7g.2xlargem6g.2xlarget4g.small
CPU8 vCPUs (Graviton2)8 vCPUs (Graviton2)2 vCPUs (Graviton2)
内存32 GiB RAM32 GiB RAM2 GiB RAM
网络带宽15 Gbps10 Gbps5 Gbps
存储200 GiB GP3 EBS200 GiB GP3 EBS100 GiB GP3 EBS
EBS吞吐量1250 MB/s593.75 MB/s260 MB/s
React Flow mini map

美国区生产集群 (Prod-US)

配置项在线集群离线集群
分片数2个分片2个分片
副本数2个副本1个副本
实例类型i3en.12xlargeim4gn.16xlarge
CPU48 vCPUs64 vCPUs (Graviton2)
内存384 GiB RAM256 GiB RAM
网络带宽50 Gbps100 Gbps
本地存储4x7.5TB NVMe SSD (RAID 10)4x7.5TB NVMe SSD (RAID 10)
EBS存储3x10TB GP3 + 1x16TB GP33x16TB GP3 + 1x1TB GP3
React Flow mini map

欧盟区生产集群 (Prod-EU)

配置项存储节点协调节点
节点数量8个分片,2个副本1个实例
实例类型m6g.8xlargec7g.metal
CPU32 vCPUs (Graviton2)64 vCPUs (Graviton3)
内存128 GiB RAM128 GiB RAM
网络带宽12 Gbps30 Gbps
存储10TB GP3 EBS4x2.5TB GP3 EBS

协调节点架构说明

欧盟区采用了计算存储分离的架构:

  1. 计算层

    • 单个强大的协调节点
    • 负责查询规划和结果聚合
    • 高性能 Graviton3 处理器
    • 大内存配置适合复杂查询
  2. 存储层

    • 8个分片,每个分片2个副本
    • 分布式存储减少单节点压力
    • 支持并行数据获取
    • 通过副本保证高可用
  3. 数据流程

    • 客户端发送查询请求到协调节点
    • 协调节点解析并规划查询
    • 并行从存储节点获取数据
    • 在协调节点完成数据聚合
    • 返回最终结果给客户端
加载中...

开发测试集群 (Dev)

配置项规格
分片数1个分片
副本数2个副本
实例类型m6id.4xlarge
CPU16 vCPUs (Intel Xeon 8375C)
内存64 GiB RAM
网络带宽12.5 Gbps
存储950 GiB NVMe临时磁盘
React Flow mini map

当前挑战

目前集群面临的最大挑战是磁盘吞吐量,主要由于频繁的数据变更操作(mutations)导致。每次变更都需要重写大量数据,这会占用正常查询和插入操作的资源。

解决方案

  1. 迁移到具有本地 NVMe 存储的节点
  2. 使用 RAID 10 far 2 配置,提供约 1000 MB/s 写入和 4000 MB/s 读取速度
  3. 结合 EBS 存储实现分层存储策略

目前美国区已完全迁移到 NVMe 支持的节点,欧盟区也将逐步完成迁移。