在这篇文章中,我们将讨论以下话题:

  • Apache Kafka 3 分钟
  • Netflix 技术栈
  • C++、Java、Python 如何工作
  • 5 大 Kafka 用例
  • 数据如何在应用之间传输

Netflix 技术栈

这篇文章基于许多 Netflix 工程博客和开源项目的研究。

完整技术栈

  • 移动和 Web:Netflix 采用 Swift 和 Kotlin 构建原生移动应用。对于 Web 应用,它使用 React
  • 前端/服务器通信:GraphQL
  • 后端服务:Netflix 依赖 ZUUL、Eureka、Spring Boot 框架和其他技术
  • 数据库:Netflix 利用 EV cache、Cassandra、CockroachDB 和其他数据库
  • 消息/流媒体:Netflix 采用 Apache Kafka 和 Flink 进行消息和流媒体目的
  • 视频存储:Netflix 使用 S3 和 Open Connect 进行视频存储
  • 数据处理:Netflix 利用 Flink 和 Spark 进行数据处理,然后使用 Tableau 可视化。Redshift 用于处理结构化数据仓库信息
  • CI/CD:Netflix 采用各种工具,如 JIRA、Confluence、PagerDuty、Jenkins、Gradle、Chaos Monkey、Spinnaker、Atlas 等

编译语言 vs. 解释语言

下图显示了编译和执行如何工作。

编译语言

编译语言由编译器编译为机器码。机器码稍后可由 CPU 直接执行。 示例:C、C++、Go

字节码语言

像 Java 这样的字节码语言,首先将源代码编译为字节码,然后 JVM 执行程序。有时 JIT(即时)编译器将源代码编译为机器码以加速执行。 示例:Java、C#

解释语言

解释语言不编译。它们在运行时由解释器解释。 示例:Python、JavaScript、Ruby

编译语言通常比解释语言运行更快。

问题:你更喜欢哪种类型的语言?

Kafka 5 大用例

Kafka 最初为大规模日志处理而构建。它保留消息直到过期,让消费者按自己的节奏拉取消息。

与其前身不同,Kafka 不仅仅是消息队列,它是用于各种用例的开源事件流平台。

让我们回顾流行的 Kafka 用例。

1. 日志处理和分析

下图显示了典型的 ELK(Elastic-Logstash-Kibana)栈。Kafka 高效地从每个实例收集日志流。ElasticSearch 从 Kafka 消费日志并索引它们。Kibana 在 ElasticSearch 之上提供搜索和可视化 UI。

2. 推荐中的数据流

像 Amazon 这样的电商网站使用过去行为和相似用户来计算产品推荐。下图显示了推荐系统如何工作。Kafka 流式传输原始点击流数据,Flink 处理它,模型训练从数据湖消费聚合数据。这允许持续改进每个用户推荐的相关性。

3. 系统监控和警报

类似于日志分析系统,我们需要收集系统指标进行监控和故障排除。区别在于指标是结构化数据,而日志是非结构化文本。指标数据发送到 Kafka 并在 Flink 中聚合。聚合数据由实时监控仪表板和警报系统消费(例如 PagerDuty)。

4. CDC(变更数据捕获)

变更数据捕获(CDC)将数据库变更流式传输到其他系统进行复制或缓存/索引更新。例如,在下图中,事务日志发送到 Kafka 并由 ElasticSearch、Redis 和辅助数据库摄取。

5. 系统迁移

升级传统服务具有挑战性——旧语言、复杂逻辑、缺乏测试。我们可以通过利用消息中间件来降低风险。在下图中,为了升级图中的订单服务,我们更新传统订单服务从 Kafka 消费输入并将结果写入 ORDER 主题。新订单服务消费相同输入并将结果写入 ORDERNEW 主题。对账服务比较 ORDER 和 ORDERNEW。如果它们相同,新服务通过测试。

问题:你还有其他 Kafka 用例可以分享吗?

数据如何在服务器之间传输

下图显示了服务器如何发送数据到另一个服务器。

假设运行在用户空间的聊天应用发送聊天消息。消息发送到内核空间中的发送缓冲区。然后数据通过网络栈,并包裹 TCP 头、IP 头和 MAC 头。数据还通过 qdisc(队列规则)进行流量控制。然后数据通过环形缓冲区发送到 NIC(网络接口卡)。

数据通过 NIC 发送到互联网。在路由器和交换机之间多次跳转后,数据到达接收服务器的 NIC。

接收服务器的 NIC 将数据放入环形缓冲区并向 CPU 发送硬中断。CPU 发送软中断,使 ksoftirqd 从环形缓冲区接收数据。然后数据通过数据链路层、网络层和传输层解包。最终,数据(聊天消息)复制到用户空间并到达接收侧的聊天应用。

问题:当环形缓冲区满时会发生什么?会丢包吗?

本文为学习目的的个人翻译,译文仅供参考。

原文链接:EP76: Netflix’s Tech Stack

版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。