Netflix如何大规模地使用eBPF流量日志来了解网络情况

1,372 阅读4分钟

Netflix开发了一个名为Flow Exporter的网络可观察性副车,它使用eBPF追踪点来近乎实时地捕获TCP流量。这个高性能的挎包在实例上只占不到1%的CPU和内存,为网络洞察力提供大规模的流量数据。

挑战

Netflix目前使用的云网络基础设施包括AWS服务,如VPC、DirectConnect、VPC Peering、Transit Gateways、NAT Gateways等以及Netflix拥有的设备。Netflix的软件基础设施是一个大型的分布式生态系统,由专门的功能层组成,在AWS和Netflix拥有的服务上运行。虽然我们努力使生态系统保持简单,但利用各种技术的固有性质将导致我们面临各种挑战。

  • 应用程序的依赖性和数据流的映射。 随着微服务的数量与日俱增,如果不了解和掌握应用程序的依赖关系和数据流的可见性,服务所有者和集中式团队就很难识别系统性问题。
  • 路径验证。 生产流和演播室环境中的Netflix变化速度可能导致服务无法与其他资源沟通。
  • 服务细分。 云部署的便利性导致了多个AWS账户、部署实践、互连实践等的有机增长。如果不具备网络可见性,就很难改善我们的可靠性、安全性和容量态势。
  • 网络可用性。 我们生态系统的预期持续增长使得我们很难了解我们的网络瓶颈和可能达到的极限。

云计算网络洞察力 是一套解决方案,它提供对云计算网络基础设施的操作和分析洞察力,以解决所发现的问题。通过收集、访问和分析各种来源的网络数据,如VPC流量日志、ELB访问日志、实例上的eBPF流量日志等,我们可以通过Lumen、Atlas等多种数据可视化技术向用户和中央团队提供网络洞察力。

流量导出器

Flow Exporter是一个挎包,它使用eBPF跟踪点,在支持Netflix微服务架构的实例上近乎实时地捕获TCP流量。

什么是BPF?

Berkeley Packet Filter(BPF)是一个处理虚拟指令集的内核内执行引擎,并被扩展为eBPF,以提供一种安全的方式来扩展内核功能。在某些方面,eBPF对内核的作用就像JavaScript对网站的作用一样:它允许各种新的应用程序被创建。

一个eBPF流量日志记录代表了一个或多个网络流量,其中包含了在一个可变的聚合间隔内发生的TCP/IP统计数据。

挎斗通过利用高性能的eBPF以及精心选择的传输协议来实现,在我们的车队中的任何实例上消耗不到1%的CPU和内存 。传输协议的选择,如GRPC、HTTPS和UDP,在运行时取决于实例放置的特点。

流量输出器的运行时行为可以通过快速属性的配置变化来动态管理。Flow Exporter还向Atlas发布各种运行指标。这些指标通过Lumen进行可视化,Lumen是一个自我服务的仪表盘基础设施。

那么,我们如何大规模地摄取和充实这些流量?

流量收集器是一个区域性的服务,可以摄取和充实流量。云中的IP地址可以随着时间从一个EC2实例或Titus容器移动到另一个。我们使用Sonar将一个IP地址在特定时间归属于一个特定的应用程序。Sonar是一个IPv6和IPv4地址身份跟踪服务。

Flow Collector消耗两个数据流,即通过Kafka从Sonar获得的IP地址变化事件和来自Flow Exporter侧设备的eBPF流量日志数据。它用来自Sonar的应用元数据对流量数据进行实时归属。归属的流量被推送到Keystone,并将其路由到Hive和Druid数据存储。

归属的流量数据驱动Netflix内部的各种用例,如通过Lumen仪表盘和基于机器学习的网络细分提供网络监控和网络使用预测。这些数据也被安全和其他合作伙伴团队用于洞察和事件分析。

总结

通过eBPF和一个高度可扩展和高效的流量收集管道,利用eBPF流量日志对云网络基础设施进行大规模的网络洞察是可能的。经过几次架构的迭代和一些调整,该解决方案已被证明是可以扩展的。

我们目前每小时摄取和丰富数十亿条eBPF流量日志,并为我们的云生态系统提供可见性。丰富的数据使我们能够分析各种维度的网络(如可用性、性能和安全性),以确保应用程序能够有效地在全球分散的基于云的生态系统中交付其数据载荷。

原文链接:netflixtechblog.com/how-netflix…