CloudFlare 如何每秒处理一百万条日志

今天我们要讲的是

有没有想过像谷歌这样的搜索引擎是如何工作的? 他们如何分析数万亿份文档并在几百毫秒内快速搜索精确匹配?

如果你好奇,那么 Brilliant 推出了一个精彩的 课程 深入研究构建搜索引擎。

与所有其他课程一样,它与动画、动手图形和详细解释等完全互动

  • 网络爬虫并提取相关信息

  • 建立索引并查询

  • 处理短语和通配符的算法

杰出的 是一个拥有海量CS、数学、科学和统计内容的学习平台。

他们将课程分成小块,非常适合您在 Instagram 或 Twitter 上浪费 10 分钟的短暂休息时间。

通过下面的链接,您可以获得 30 天免费试用 检查一下。 订阅时您还将获得 20% 的折扣。

Cloudflare 是一家科技公司,提供内容交付网络、域名注册、DDoS 缓解等服务。

当他们的 DDoS 防护服务错误地将您标记为机器人时,您可能已经看过他们的验证码页面之一。

或者 呃,你可能认识他们 病毒视频 上周,他们的一名员工秘密记录了他们解雇她的情况。

超过 20% 的互联网使用 Cloudflare 进行 CDN/DDoS 保护,因此该公司显然在确保互联网顺利运行方面发挥着巨大作用。

上周,他们发表了一篇非常有趣的博客文章,深入研究了他们用于日志系统的技术堆栈。 系统需要摄取近百万行日志 每一秒 具有高可用性。

Colin Douch 是 CloudFlare 可观察性团队的技术主管,他写了一篇精彩的文章 邮政 关于他们的架构。

我们将对其进行总结并添加一些背景信息。

CloudFlare 的技术堆栈

我们将首先回顾 CloudFlare 做出的所有主要技术选择,并对每一项进行简要概述。

卡夫卡

Apache Kafka 是一个开源事件流平台(您使用它在后端的不同组件之间传输消息)。

Kafka 系统由生产者、消费者和 Kafka 经纪人组成。 向 Kafka 发布消息的后端服务是生产者,读取/摄取消息的服务是消费者。 经纪人负责处理转移并帮助生产者与消费者脱钩。

卡夫卡的好处包括

  • 分散式 – Kafka 是为了分布式而构建的 高度 可扩展。 Kafka 集群可以拥有数百个节点,每秒处理数百万个事件。 我们之前讨论过如何 PayPal 将 Kafka 扩展到每天 1.3 万亿条消息

  • 可配置 – 它具有高度可配置性,因此您可以对其进行调整以满足您的要求。 也许您想要超低延迟并且不介意某些消息是否丢失。 或者,您可能需要将消息一次性发送并始终得到收件人的确认

  • 容错 – Kafka 可以配置为极其耐用(将消息存储在磁盘上并跨多个节点复制它们),因此您不必担心消息丢失

我们发表了一篇关于 Kafka 的深入研究文章,您可以阅读 这里

卡夫卡镜子制造者

如果您是一家大公司,您将在世界各地拥有多个数据中心,每个数据中心可能都有自己的 Kafka 集群。 卡夫卡镜子制造者 是 Kafka 生态系统中非常有用的工具,可让您在两个或多个 Kafka 集群之间复制数据。

这样,如果 AWS 员工被 us-east-1 的电源线绊倒,您就不会陷入困境。

ELK堆栈

埃尔克(也称为弹性堆栈)是一个非常流行的用于存储和分析日志数据的堆栈。

它由三个主要的开源工具组成:

  • 弹性搜索 – 基于 Apache 的快速、高度可扩展的全文搜索数据库 卢塞恩。 数据库提供 REST API,您可以使用 JSON 创建文档。 它使用 倒排索引数据结构 索引所有文本文件并快速搜索它们。

  • 日志存储 – 一个数据处理管道,可用于从不同来源获取数据,对其进行转换,然后将其加载到数据库(在本例中为 Elasticsearch)。 您可以应用不同的过滤器来清理数据并检查其正确性。

  • 木花 – 位于 Elasticsearch 之上的可视化层。 它提供了一个用户友好的仪表板,用于查询和可视化存储在 Elasticsearch 中的数据。 您可以创建图表、获取警报等。

点击屋

ClickHouse 是一个分布式开源数据库,10 年前由 Yandex(俄罗斯的 Google)开发,用于为 Metrica(一种类似于 Google Analytics 的实时分析工具)提供支持。

在某些情况下,Yandex 的 Metrica 在约 375 台服务器的集群上运行 Clickhouse,它们在数据库中存储超过 20 万亿行(总数据接近 20 PB)。 所以……它的设计考虑到了规模。

Clickhouse是 面向列的 重点强调高写入吞吐量和快速读取操作。 为了最大限度地减少存储空间(并提高 I/O 效率),数据库使用了一些巧妙的 压缩技术。 它还支持类似 SQL 的查询语言,以便非开发人员(BI 分析师等)也可以使用它。

您可以阅读有关 ClickHouse 的架构选择 这里

CloudFlare 的日志记录管道

为了创建日志,Cloudflare 中的系统使用各种日志记录库。 这些是特定于语言的,所以他们使用

和更多。 工程师可以灵活地使用他们想要使用的日志库。

Cloudflare 正在运行 系统日志 (日志守护进程)在他们所有的机器上。 这会读取日志并应用一些速率限制和重写规则(添加发出日志的计算机的名称、计算机所在的数据中心的名称等)。

然后,守护进程将日志包装在 JSON 包装器中,并将其转发到 Cloudflare 的核心数据中心。

CloudFlare 拥有两个主要核心数据中心,一个位于美国,另一个位于欧洲。 对于后端的每台机器,任何生成的日志都会发送到 两个都 数据中心。 他们复制数据以实现容错(因此任一数据中心都可能发生故障,但它们不会丢失日志)。

在数据中心,消息被路由到 Kafka 队列。 Kafka 队列使用 Kafka Mirror Maker 在美国和欧洲数据中心保持同步,以便所有日志的完整副本都位于每个核心数据中心。

使用 Kafka 有几个好处

  • 添加消费者 – 如果您想添加另一个读取日志并处理日志的后端服务,您可以在不更改架构的情况下做到这一点。 您只需将后端服务注册为日志的新消费者组即可。

  • 消费者停电 – Kafka 充当缓冲区并存储日志数小时。 如果使用 Kafka 日志的后端服务之一发生中断,该服务可以重新启动并且不会丢失任何数据(它只会恢复 Kafka 中中断的位置)。 CloudFlare 可以容忍任何消费者长达 8 小时的总中断,而不会丢失任何数据。

存储日志

为了长期存储日志,CloudFlare 依赖两个后端

  • ELK堆栈

  • Clickhouse集群

ELK堆栈

正如我们提到的,ELK 由 ElasticSearch、Logstash 和 Kibana 组成。 Logstash 用于摄取和转换日志。 ElasticSearch 用于存储和检索它们。 Kibana 用于可视化和监控它们。

对于 ElasticSearch,CloudFlare 将其 90 个节点的集群分为不同类型

  • 主节点 – 这些充当 ElasticSearch master 和 协调 插入到簇中。

  • 数据节点 – 这些处理实际插入 ElasticSearch 节点和存储

  • HTTP 节点 – 这些处理读取日志的 HTTP 查询

点击屋

CloudFlare 有一个 10 节点 Clickhouse 集群。 目前,它充当 ELK 堆栈提供的相同日志的替代接口。 然而,CloudFlare 正在过渡到 Clickhouse 作为其主要存储。

有关更多详细信息,请阅读完整的博客文章 这里

如何记住 Quastor 文章中的概念

我们通过一个 Quastor 摘要和技术潜水中的工程概念。

为了帮助您在日常工作中记住这些概念(或工作面试),我正在创建 闪存卡 总结了所有 Quastor 摘要和技术潜水中的这些核心概念。

闪存卡完全可编辑 并且旨在集成在 间隔重复计划 (Anki) 让你可以轻松地永远记住这些概念。

这是一项额外福利 奎斯特专业版 除了技术深入文章之外的成员。

如果你对 AlphaGo 印象深刻(DeepMind 的机器人掌握了围棋)或 OpenAI 的 Dota 2 机器人,那么您应该看看强化学习。

这是机器学习的一个分支,深入研究如何使用奖励来教导智能体在新环境中的行为。

如果您想了解更多信息,B​​rilliant 有一个令人惊叹的 课程 深入研究强化学习。

与所有其他 Brilliant 课程一样,它与动画、实践图形和详细说明完全互动,例如

杰出的 是一个拥有大量数学、数据科学、计算机科学和机器学习内容的学习平台。 他们的内容结构紧凑,包含大量交互式动画、图形等。

这使得使用 Brilliant 应用程序建立日常学习习惯变得非常容易,而不是在 Instagram 或 Twitter 上浪费时间。

通过下面的链接,您可以获得 30 天免费试用 检查一下。 订阅时您还将获得 20% 的折扣。

Leave a Reply

Your email address will not be published. Required fields are marked *

近期新闻​

编辑精选​