全球互联网监控篇之---BGP数据分析篇

在研究领域中最广泛采用的BGP数据分析软件是libBGPdump,它是一个开源的C库,提供了一个简单的API来解析MRT格式的RIB dumps,并将MRT记录反序列化为自定义数据结构。它与命令行工具bgpdump一起工作,bgpdump从ASCII格式文件中读取信息并输出MRT信息。通常研究人员直接使用命令行工具将整个RIB dumps转换成文本,然后解析ASCII输出以进一步处理或保存数据。尽管在过去十年中bgpdump已经是非常有用的BGP数据分析工具,但是它缺少我们在下一节中讨论的高级特性(例如,合并和排序来自多个文件和数据源的数据、支持实时处理、可伸缩性等)

已经存在几个实时处理BGP测量数据的项目,由工业界(例如,Dyn Research)和学术界(例如,PHAS)开发,但是它们的方法要么是不公开的,要么是特定于特定应用的(即,它们不是通用框架)。一个例外是BGPmon,这是一个分布式监控系统,它通过建立具有多个AS的BGP会话来检索BGP信息,并以XML格式提供实时BGP数据流(它也封装原始MRT数据)。尽管BGPmon能够实现实时监控工具的快速原型化,但是它目前仅提供了对有限数量的探测点(与连接到RIPE RIS和RouteViews基础设施的大量VP相比)的访问,并且它不能用于处理历史数据

BGP数据的实时流化

另一方面,在实时监视的背景下,诸如RouteViews和RIPE RIS等流行的公共数据源的主要问题是它们是基于文件的分发系统,因此使得收集到的数据在可用的延迟时间内。我们的测量表明,除了由于文件循环持续时间而导致的5分钟和15分钟的延迟之外,由于发布给基础设施还有少量的可变延迟。然而,在去年99%的Updates dump可以在不到20分钟后。由于这些延迟足够低,可以支持几个近实时监视应用程序,因此我们开始开发支持这些数据源的BGPStream

BGPStream核心

BGPStream框架是有多个层次构成(图1)。在本节中,我们将讨论核心层(元数据提供程序和libBGPStream),而在本文的其余部分中,我们将通过案例研究说明上层。元数据提供者提供关于来自数据提供者(本地或远程)的数据的可用性和位置的信息,这些数据提供者是BGPStream项目外部的数据源。框架的主要库libBGPStream提供了以下功能:(1)并发处理不同项目的多个收集器收集的RIB和Updates;(2)实时数据处理;(3)数据提取、注释和错误检查;(4)生成BGP测量数据的时间顺序流;(5)用户可以通过API接收数据流。

BGPStream可分为几个独立模块:BGPReader,一个命令行工具,以ASCII格式输出请求的BGP数据;pybgpstream,Python实现的libbgpstream API;bgpcorsaro是一个工具,采用模块化的插件架构提取统计或汇总数据,输出到规则时间仓内。

全球互联网监控篇之---BGP数据分析篇

图1 BGPStream架构

目标与挑战

BGPStream的目标

1) 高效处理大量分布的BGP数据

在第2节中,我们强调了利用大量全球分布的探测点执行分析的重要性。然而,处理如此大量的数据以及探测带你的分布式和多样性(不同的定时、格式等)特性带来了一系列技术挑战。

2) 从多个数据源提供基于记录的时序数据流

BGPStream旨在提供来自多个收集器的统一排序的数据流。记录级排序(而不是交错转储文件)在至少两种情况下是重要的:(1)在分析长时间间隔时,该时间间隔内不能缓冲整个输入实现时间对齐;(2)当输入的数据源提供连续的数据流(而不是离散的转储文件),因为这样的流不能在转储文件级别上进行交叉提取。

3) 提供历史和近实时数据处理

我们考虑两种操作模式:(1)历史模式 - 在程序启动之前请求的所有BGP数据都是可用的;(2)实时模式 - 在程序运行时请求的BGP数据变得可用。在实时模式下,BGPStream堆栈加上用户应用程序,处理数据必须比收集器生成数更快。我们最小化BGPStream处理的延迟,从而最大化近实时的用户应用程序的可用时间来执行实时互联网监视和测量。

实时模式还介绍了多个收集器排序记录的问题。这个问题涉及到:(1)缓冲区的大小,(2)应用程序可用数据的完整性,(3)延迟。根据用户应用程序的特定目标和资源来评估这种权衡,因此我们设计BGPStream可以在实时模式下执行尽力而为的记录交叉提取,并且根据应用程序的特定目标来选择特定的解决方案。

4) 支持大量应用和用户

BGPStream在网络监测与故障诊断以及科学数据分析等领域具有广阔的应用前景。目标用户不应局限于高性能计算和集群基础设施的可用性上。BGPStream框架提供了一套适合不同应用程序和开发范式(例如,历史数据分析、快速原型、脚本编写、实时监控)的工具和API。

5) 可伸缩性

由于BGP的探测点的关键目的是监视和理解互联网基础设施,因此收集器项目支持的探测点的数量会不断增加。同时,技术挑战(例如,对复杂的中间人攻击的近实时检测)需要满足日益复杂的计算需求的解决方案。我们设计了BGPStream来支持在分布式和“大数据分析”环境中的部署:例如,Spark本身支持Python,使得BGPStream可以在这种开箱即用的环境中使用。

6) 方便扩展

尽管我们的解决方案被设计成与当前标准和最流行的可用数据源一起工作,但我们设计了一个堆叠和模块化的框架,便于对新技术和数据源的支持。BGPStream是一个正在演进的项目,需要与数据提供者、互补技术的开发人员和用户的协调一起以推进BGP监测和测量数据分析的最新进展。

BGPStram元数据提供商

分析BGP测量数据面临的挑战之一是识别和获取相关数据RouteViews和RIPE RIS都可以通过HTTP提供数据,并将基本目录列表样式索引添加到数据中。识别用于大规模分析的适当文件(跨多个收集器和长时间段)包括手动浏览和下载,或者编写适合每个项目存储库结构的爬虫脚本。下载数据本身可能需要相当长的时间(例如,在2014中收集的所有数据是2TB)。此外,由于两个项目在收集新数据时不断向其归档中添加新数据,因此近实时监视需要定制脚本来定期从网站并下载新数据。BGPStream通过元数据提供程序隐藏了这些复杂性:以组件的形式提供对本地或远程数据存储库(数据提供程序,例如,RouteViews和RIPE RIS数据库)生成文件信息的访问。

我们实现了这样一个元数据提供者,称为BGPStream Broker的Web服务。其功能(1)向libBGPStream提供元数据,(2)负载平衡,(3)用于过载保护的响应窗口,(4)支持实时数据处理。这个Broker连续地提取数据从提供者存储库,将关于新文件的元数据存储到SQL数据库中,并回答HTTP查询以识别匹配一组参数的文件的位置。Broker的一个实例托管在圣地亚哥大学圣地亚哥分校的圣地亚哥超级计算机中心,默认情况下由libBGPStream进行安装,允许在任何互联网连接的机器上“开箱即用”地使用BGPStream。

Broker只存储官方存储库上可用文件的元数据,而不是文件本身。这种方法最小化了瓶颈的可能性,因为对Broker的查询和来自Broker的响应都是轻量级的,实际数据由外部数据提供程序提供。这种配置还使得添加额外数据提供者、负载平衡和冗余变得简单,因为Broker可以在多个镜像服务器之间透明地循环或者采用更复杂的策略(例如,从圣地亚哥大学圣地亚哥分校机器发送的请求是通常指向校园镜像)。

虽然Broker Data Interface是主要的数据访问接口,但我们还提供了三个用于分析本地文件的其他接口:单文件、CSV文件和SQLite。以下部分假设Broker被用作数据接口。


分享到:


相關文章: