我们如何构建Cloudflare的数据平台和AI代理

以下是我们如何构建Cloudflare的统一分析平台Town Lake ,以及在其上运行的内部AI代理Skipper。

Cloudflare每秒处理超过10亿个事件。我们的网络覆盖120多个国家/地区的330多个城市。每个HTTP请求、每个Worker调用、每个R2读取操作的背后,都有数据,还有很多数据。多年来,这些数据并不容易获取。它存在于数十个生产数据库、ClickHouse集群、Kafka流、Google Cloud存储桶、BigQuery数据集和一长串管道中。

为了回答一个简单的问题,例如“按流量计算,今天注册的域名在前100名中有多少?”, Cloudflare的一位分析师必须知道要询问哪个系统,使用什么凭据,编写什么查询语言,以及他们正在查看的数据是抽样的、新鲜的还是过时的七天。因此,很难从数据中收集到明智的见解。

为了解决这个问题,我们构建了两个内部工具: Cloudflare的统一数据分析平台Town Lake,以及在其上运行的人工智能数据代理Skipper。Town Lake是Cloudflare所知道的一切的单个SQL接口,而Skipper是Cloudflare的任何人如何用简单的英语提问,并在几秒钟内得到正确的、可审计的答案。这是我们如何构建这两者的故事。

问题的形状如果你曾在一家经历过高速增长时期的公司工作过,你就会知道数据蔓延是什么样的。我们有几个具体的症状:太多不同的系统。想要调查客户问题的产品工程师可能需要向Postgres查询帐户元数据、向ClickHouse查询分析事件、向BigQuery查询使用情况汇总、向R2查询原始日志以及向Kafka主题查询实时信号。

每个系统都有自己的凭据、语言和保留策略。采样数据。这适用于控制面板,但不适用于计费等域。我们的分析管道缩减样本,每秒处理超过7亿个事件。当您希望加载分析仪表板时,这是正确的行为,但当您尝试计算某人开具发票所需的使用情况时,这完全是错误的行为。