全新解读Twitter、Facebook和LinkedIn业务模型与架构

简介:

本文从流处理、事件溯源Event Sourcing、Reactive和EDA/CEP角度总结Twitter、Facebook和LinkedIn的业务模型与架构设计特点。

 

通常一个网站系统的架构设计取决于其业务特点,Twitter、Facebook和LinkedIn业务特点是:大量不断动作事件写入的同时,需要实时更新各种不同汇总页面。属于并发编程中大量并发写和大量并发读同时存在的场景。

 

《Stream processing, Event sourcing, Reactive, CEP… and making sense of it all》(www.confluent.io/blog/making-sense-of-stream-processing)一文对这种业务模式进行了总结,并指出了流处理、事件溯源Event Sourcing、Reactive和EDA/CEP内在的逻辑一致性。

 

在普通数据库范式下,比如一个博客系统,用户发出一篇博文,其他用户可从时间线浏览该用户的发表的博文。通常我们会设计一个博文的数据表结构,其中字段有:博文内容、发布时间等,用户发出的博文写入存储到这个数据表中,而其他用户阅读这个用户的博文列表则通过"select * from 博文 where useId=xxx"这样SQL语句实现。

 

因为博文比较长,不太可能同时有大量用户发表长文,所以,可能不存在大量写操作,但是如果是微博系统,有大量用户经常发布微博,这就存在大量动作事件写入;同时,又有大量粉丝不断查询读取该用户的微博列表,包括其他各种信息。

 

这种业务模型特点在Twitter、Facebook和LinkedIn存在很明显:

 

Twitter
 

最普通的Twitter设计是将用户发布的微博存储到关系数据库中,一个微博很简单:一些内容、时间戳和ID,用户只要点击"发布"这个按钮就会引起数据库的一个写操作。

 

 

另外一个方面,阅读者是从时间线读取Twitter数据库,如上图的Output(read)。这两个方式的数据结构也是完全不同的,如下图:

 

 

阅读时,对于每条微博Tweet,不只是有微博的基本内容,而且有用户的名称,照片和发布信息,以及粉丝数量等等。

 

那么你如何从简单的输入转变到这种更加复杂的输出呢?当然,普通方式使用关系数据表设计一个数据表结构,然后将微博数据插入其中,再用下面SQL读取:

 

 

这是以时间先后查询最近100个Tweet,当然,更有甚者,会通过存储过程等语句提高性能,但是这种查询却无法伸缩扩展,而且给数据库带来非常大的负载。

 

当一个用户浏览他的时间线时,遍历他关注的那些人的Tweet也是很昂贵的,SQL查询是非常耗时的,开始,Twitter是提前计算用户的时间线,然后缓存结果,这样用户查看时会很快,为了这样做,他们需要一个处理过程来将适合写操作的单个事件翻译成适合读操作的汇总聚合,称为fanout service。

 

Facebook
 

它有许多按钮比如like让你写些什么然后保存到Facebook的数据库中,当你点按Like时,就产生一个事件,数据结构很简单:用户ID以及所喜欢的条目ID。

 

如果从输出方面看,也就是从Facebook读取,这时会意想不到的复杂,不只是有喜欢的内容,还有作者名称和照片,然后显示有160216个人喜欢,有6027分享和12851评论,输入和输出数据结果如下:

 

 

这种输入到输出的翻译过程大概是这样:将简单的一个个事件作为输入,产生复杂的个性化的数据结构,你不能想象有什么数据库能够在一边更新一边输出这么多信息。也就是说,对于这样一个有100000个喜欢不断产生,而你要实时不断输出这些喜欢的输出内容,这种大量动态更新和大量读取同时操作的场景使用缓存和数据库都是很难实现的。

 

从以上Twitter和Facebook案例我们能发现一个重复出现的模式:输入事件,对应用户界面某个按钮,而且非常简单,不可变的,我们只是简单地存储它们,我们将它们看成是真相来源source of truth。

 

从网站上看到的每个内容都是从这些原始事件读取,有一个处理进程专门从原始事件产生汇总结果,当新的事件不断进行,不断更新缓存,这个处理进程是确定的,可以重新启动。你可以将网站上发生的每件事都喂给这个进程,你甚至可以重构任何时刻的缓存,这是一种cached view of the event log。

 

LinkedIn
 

以LinkedIn为案例,每个人发布自己的当前工作情况,这些事件写入数据库,而读取页面有各种各样,这里以搜索为例,当你输入一些关键词,比如公司名,那么在这个公司的所有人员都应该出现在提示框中。

 

 

为了实现搜索,你需要搜索索引,这个索引其实是另外一种聚合结构,当有新的数据事件加入,这个结构也需要跟随新数据变化。

 

总结
 
 

 

总结以上Twitter、Facebook和LinkedIn的模式如下:

 

 

大量持续不断的单个事件写入数据库中,这也就是一种事件流,根据这个持续不断的事件流,你能够构建不同的聚合结构,如View视图 缓存和搜索索引,你还能设置一个独立的Process处理过程,翻译转换到输出流output stream;总之,有了事件流,你能依据这个流做很多事情。

 

  1. 你能将所有事件转换到一个大数据仓库,在那里可以进行数据分析和查询。

  2. 你能更新完整文本搜索索引,这样当用户点击搜索框时,能够搜索到实时的数据。

  3. 你能使用事件对缓存进行更新,这样缓存能够方便快速读取最新数据。

  4. 最后,你可以将一个事件流转换到另外一个输出流,作为其他系统的输入,这样能够串联起一个复杂的事件驱动大型系统。

 

不管怎样,传统数据库也采取这种事件处理方式进行读写,比如像PostgreSQL, MySQL's InnoDB 和Oracle, 和 append-only B-trees of CouchDB, Datomic 和LMDB 等MVCC数据库都是相同类似思想。这里我们是将数据库引擎内部机制作为应用程序架构来实现。

 

总之,大量事件写操作伴随同时大量读操作发生的这种互联网新模型催生了新的解决方案,在简单读写场景下可以使用关系数据库直接完成,但是这种复杂大数据量并发场景关系数据库已经不能胜任,只能打开数据库这个盒子,将数据库引擎实现的模型搬出盒子,迁移到服务层或微服务中实现,从而能够保证高可用性和高一致性。当然,由于涉及到分布式系统,虽然横向扩展伸缩非常好,但是也需要结合CAP定理进行设计权衡。

 

更详细对原文解释可见:《如何理解Stream processing, Event sourcing, Reactive, CEP?》

 

来源:jdon.com

译者:板桥banq


本文来自云栖社区合作伙伴"DBAplus",原文发布时间:2016-05-31

目录
相关文章
|
1月前
|
存储 分布式计算 API
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
82 0
|
9天前
|
机器学习/深度学习 自然语言处理 C++
TSMamba:基于Mamba架构的高效时间序列预测基础模型
TSMamba通过其创新的架构设计和训练策略,成功解决了传统时间序列预测模型面临的多个关键问题。
32 4
TSMamba:基于Mamba架构的高效时间序列预测基础模型
|
1月前
|
机器学习/深度学习 网络架构 计算机视觉
目标检测笔记(一):不同模型的网络架构介绍和代码
这篇文章介绍了ShuffleNetV2网络架构及其代码实现,包括模型结构、代码细节和不同版本的模型。ShuffleNetV2是一个高效的卷积神经网络,适用于深度学习中的目标检测任务。
68 1
目标检测笔记(一):不同模型的网络架构介绍和代码
|
2月前
|
机器学习/深度学习
ACM MM24:复旦提出首个基于扩散模型的视频非限制性对抗攻击框架,主流CNN和ViT架构都防不住它
【9月更文挑战第23天】复旦大学研究团队提出了ReToMe-VA,一种基于扩散模型的视频非限制性对抗攻击框架,通过时间步长对抗性潜在优化(TALO)与递归令牌合并(ReToMe)策略,实现了高转移性且难以察觉的对抗性视频生成。TALO优化去噪步骤扰动,提升空间难以察觉性及计算效率;ReToMe则确保时间一致性,增强帧间交互。实验表明,ReToMe-VA在攻击转移性上超越现有方法,但面临计算成本高、实时应用受限及隐私安全等挑战。[论文链接](http://arxiv.org/abs/2408.05479)
72 3
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
【AI大模型】BERT模型:揭秘LLM主要类别架构(上)
【AI大模型】BERT模型:揭秘LLM主要类别架构(上)
|
2月前
|
机器学习/深度学习 测试技术 数据处理
KAN专家混合模型在高性能时间序列预测中的应用:RMoK模型架构探析与Python代码实验
Kolmogorov-Arnold网络(KAN)作为一种多层感知器(MLP)的替代方案,为深度学习领域带来新可能。尽管初期测试显示KAN在时间序列预测中的表现不佳,近期提出的可逆KAN混合模型(RMoK)显著提升了其性能。RMoK结合了Wav-KAN、JacobiKAN和TaylorKAN等多种专家层,通过门控网络动态选择最适合的专家层,从而灵活应对各种时间序列模式。实验结果显示,RMoK在多个数据集上表现出色,尤其是在长期预测任务中。未来研究将进一步探索RMoK在不同领域的应用潜力及其与其他先进技术的结合。
94 4
|
2月前
|
分布式计算 负载均衡 监控
p2p网络架构模型
P2P(Peer-to-Peer)模式是一种网络架构模型,在这种模型中,每个节点(peer)既是服务的提供者也是服务的消费者。这意味着每个参与的节点都可以直接与其他节点通信,并且可以相互提供资源和服务,例如文件共享、流媒体传输等。
81 6
|
2月前
|
机器学习/深度学习 数据采集
详解Diffusion扩散模型:理论、架构与实现
【9月更文挑战第23天】扩散模型(Diffusion Models)是一类基于随机过程的深度学习模型,通过逐步加噪和去噪实现图像生成,在此领域表现优异。模型分正向扩散和反向生成两阶段:前者从真实数据加入噪声至完全噪音,后者则学习从噪声中恢复数据,经由反向过程逐步还原生成清晰图像。其主要架构采用U-net神经网络,实现过程中需数据预处理及高斯噪声添加等步骤,最终通过模型逆向扩散生成新数据,具有广泛应用前景。
|
3月前
|
机器学习/深度学习 自然语言处理 数据处理
|
3月前
|
网络协议 安全 网络性能优化
OSI 模型详解:网络通信的七层架构
【8月更文挑战第31天】
666 0