实时抓取网页数据(LinkedIn内部的数据基础设施的演变,你知道几个?)

优采云 发布时间: 2021-09-30 21:20

  实时抓取网页数据(LinkedIn内部的数据基础设施的演变,你知道几个?)

  在去年的架构师峰会上,来自LinkedIn的高级软件工程师高磊发表了题为“LinkedIn的数据处理架构”的演讲,重点介绍了LinkedIn内部数据基础设施的演进,包括Databus数据总线项目。当时引起了很多人的好奇。前不久,LinkedIn工程团队的官方博客宣布Databus项目开源。

  在互联网架构中,数据系统通常被划分为数据源系统,作为基础数据库来存储用户生成的写操作;并派生数据库或索引以提供读取和其他复杂查询操作。后者往往来源于独立的数据存储,对其中的数据进行变换,有时还包括复杂的业务逻辑处理。缓存中的数据也来自主数据存储。当主数据存储发生变化时,缓存中的数据需要刷新或失效。

  LinkedIn内部有很多专用的数据存储和服务系统,形成了一个多元化的生态系统。基本的 OLTP 数据存储用于处理面向用户的写操作和部分读操作。其他专用系统提供负责任的查询,或使用缓存来加速查询结果。因此,整个生态系统需要一个可靠的、支持事务的、一致的数据变更捕获系统。

  Databus 是一种实时低延迟数据捕获系统。从2005年开始开发,2011年在LinkedIn上正式进入生产系统。

  在 Databus 的 Github 页面上,他们介绍了他们选择当前解决方案的决策过程。

  有两种常见的方法来处理这种需求:

  应用驱动双向写:在这种模式下,应用层同时向数据库和另一个消息系统发起写操作。这个实现看起来很简单,因为写入数据库的应用程序代码是可以控制的。但是会引入一致性问题,因为没有复杂的协调协议(比如两阶段提交协议或者paxos算法),所以当出现问题时,很难保证数据库和消息系统完全锁定相同的状态。两个系统需要准确完成相同的写操作,并以相同的顺序完成序列化。如果写操作是有条件的或者有部分更新语义,那么事情会变得更加麻烦。

  数据库日志挖掘:将数据库作为真实数据的唯一来源,从事务或提交日志中提取更改。这样可以解决一致性问题,但是很难实现,因为Oracle、MySQL等数据库有私有事务日志格式和复制冗余方案,版本升级后很难保证可用性。由于解决方案是处理由应用程序代码发起的数据更改,然后将它们写入另一个数据库,因此冗余系统必须是用户级的并且独立于源。对于瞬息万变的科技公司来说,这种与数据源的独立性对于避免应用程序堆栈的技术锁定或绑定到二进制格式非常重要。

  在评估了两种方法的优缺点后,我们决定选择日志挖掘,以一致性和单一事实来源为最高优先级,而不是易于实施。

  Databus 传输层的端到端延迟为微秒。每个服务器每秒可以处理数千个数据吞吐量更改事件。它还支持无限回溯能力和丰富的变更订阅功能。大纲结构如下图所示。

  

  从图中可以看出,Search Index 和 Read Replicas 等系统是 Databus 的消费者。当主OLTP数据库发生写操作时,与其相连的中继系统会将数据拉取到中继。在搜索索引或缓存中签入的数据总线消费者客户端将从中继中提取数据并更新索引或缓存。

  数据总线提供以下功能:

  

  上图介绍了Databus系统的组成,包括中继、引导服务和客户端库。Bootstrap 服务包括 Bootstrap Producer 和 Bootstrap Server。快速变化的消费者直接从 Relay 获取事件。如果消费者的数据更新明显滞后,那么它需要的数据不在 Relay 日志中,而是在 Bootstrap Producer 中。提交给它的数据将是自消费者上次处理更改以来所有数据更改的快照。

  数据总线继电器的功能主要包括:

  从数据总线源读取更改的行并将它们序列化为内存缓存中的数据总线更改事件。侦听来自 Databus 客户端(包括 Bootstrap Producer)的请求并传输新的 Databus 数据更改事件。

  Databus客户端的功能主要包括:

  在Relay上查看新的数据变化事件,执行具体业务逻辑的回调。如果 Relay 太落后,则向 Bootstrap Server 发起查询。新的Databus客户端会向Bootstrap Server发起bootstrap启动查询,然后切换到relay发起查询。为了完成最新的数据变化事件,单个客户端可以处理整个Databus数据流,也可以成为消费者集群的一部分,每个消费者只处理部分流数据

  Databus Bootstrap Producer只是一个特定的Databus客户端,它的功能是:

  检查中继上的新数据更改事件 将更改存储在 MySQL 数据库 MySQL 数据库中以供 Bootstrap 和客户端使用

  Databus Bootstrap Server 的主要功能是*敏*感*词*来自Databus 客户端的请求,并返回长期追溯的数据变化事件。

  在LinkedIn上,Databus支持的系统有:

  对Databus项目感兴趣的同学可以到Github查看更多信息和相关源码。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线