今天我们要讲的是
有没有想过像谷歌这样的搜索引擎是如何工作的? 他们如何分析数万亿份文档并在几百毫秒内快速搜索精确匹配?
如果你好奇,那么 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堆栈
埃尔克(也称为弹性堆栈)是一个非常流行的用于存储和分析日志数据的堆栈。
它由三个主要的开源工具组成:
点击屋
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 机器人,那么您应该看看强化学习。
这是机器学习的一个分支,深入研究如何使用奖励来教导智能体在新环境中的行为。
如果您想了解更多信息,Brilliant 有一个令人惊叹的 课程 深入研究强化学习。
与所有其他 Brilliant 课程一样,它与动画、实践图形和详细说明完全互动,例如
杰出的 是一个拥有大量数学、数据科学、计算机科学和机器学习内容的学习平台。 他们的内容结构紧凑,包含大量交互式动画、图形等。
这使得使用 Brilliant 应用程序建立日常学习习惯变得非常容易,而不是在 Instagram 或 Twitter 上浪费时间。
通过下面的链接,您可以获得 30 天免费试用 检查一下。 订阅时您还将获得 20% 的折扣。