全新解读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

目录
相关文章
|
4月前
|
机器学习/深度学习 人工智能 监控
大型动作模型LAM:让企业重复任务实现80%效率提升的AI技术架构与实现方案
大型动作模型(LAMs)作为人工智能新架构,融合神经网络与符号逻辑,实现企业重复任务的自动化处理。通过神经符号集成、动作执行管道、模式学习、任务分解等核心技术,系统可高效解析用户意图并执行复杂操作,显著提升企业运营效率并降低人工成本。其自适应学习能力与上下文感知机制,使自动化流程更智能、灵活,为企业数字化转型提供坚实支撑。
356 0
大型动作模型LAM:让企业重复任务实现80%效率提升的AI技术架构与实现方案
|
5月前
|
存储 BI Shell
Doris基础-架构、数据模型、数据划分
Apache Doris 是一款高性能、实时分析型数据库,基于MPP架构,支持高并发查询与复杂分析。其前身是百度的Palo项目,现为Apache顶级项目。Doris适用于报表分析、数据仓库构建、日志检索等场景,具备存算一体与存算分离两种架构,灵活适应不同业务需求。它提供主键、明细和聚合三种数据模型,便于高效处理更新、存储与统计汇总操作,广泛应用于大数据分析领域。
590 2
|
3月前
|
数据采集 机器学习/深度学习 搜索推荐
MIT新论文:数据即上限,扩散模型的关键能力来自图像统计规律,而非复杂架构
MIT与丰田研究院研究发现,扩散模型的“局部性”并非源于网络架构的精巧设计,而是自然图像统计规律的产物。通过线性模型仅学习像素相关性,即可复现U-Net般的局部敏感模式,揭示数据本身蕴含生成“魔法”。
184 3
MIT新论文:数据即上限,扩散模型的关键能力来自图像统计规律,而非复杂架构
|
2月前
|
机器学习/深度学习 存储 缓存
115_LLM基础模型架构设计:从Transformer到稀疏注意力
大型语言模型(LLM)的架构设计是其性能的核心决定因素。从2017年Transformer架构的提出,到如今的稀疏注意力和混合专家模型,LLM架构经历了快速的演进。本文将全面探讨LLM基础架构的设计原理,深入分析Transformer的核心机制,详细介绍稀疏注意力、MoE等创新架构,并展望未来架构发展方向。通过数学推导和实践案例,为构建高效、强大的LLM提供全面指导。
|
2月前
|
机器学习/深度学习 自然语言处理 算法
48_动态架构模型:NAS在LLM中的应用
大型语言模型(LLM)在自然语言处理领域的突破性进展,很大程度上归功于其庞大的参数量和复杂的网络架构。然而,随着模型规模的不断增长,计算资源消耗、推理延迟和部署成本等问题日益凸显。如何在保持模型性能的同时,优化模型架构以提高效率,成为2025年大模型研究的核心方向之一。神经架构搜索(Neural Architecture Search, NAS)作为一种自动化的网络设计方法,正在为这一挑战提供创新性解决方案。本文将深入探讨NAS技术如何应用于LLM的架构优化,特别是在层数与维度调整方面的最新进展,并通过代码实现展示简单的NAS实验。
|
4月前
|
编解码 文字识别 自然语言处理
Dots.ocr:告别复杂多模块架构,1.7B参数单一模型统一处理所有OCR任务22
Dots.ocr 是一款仅1.7B参数的视觉语言模型,正在重塑文档处理技术。它将布局检测、文本识别、阅读顺序理解和数学公式解析等任务统一于单一架构,突破传统OCR多模块流水线的限制。在多项基准测试中,其表现超越大参数模型,展现出“小而精”的实用价值,标志着OCR技术向高效、统一、灵活方向演进。
591 0
Dots.ocr:告别复杂多模块架构,1.7B参数单一模型统一处理所有OCR任务22
|
5月前
|
存储 人工智能 调度
上海创智学院联合无问芯穹发布Megrez2.0,本征架构突破端模型不可能三角,以终端算力撬动云端智能
终端是实现数字智能和生命智能自由交互的重要接口,持续帮助人类拓展生产能力的边界。当下,终端智能面临着“能效-空间-智能”的不可能三角:以DeepSeek-R1为例,其参数规模高达6710亿,超出了大部分笔记本电脑的内存容量;即使勉强在一台笔记本电脑上成功运行满血版模型,理论上坚持不到9分钟就会耗尽电池;如果通过蒸馏,将满血版模型压缩到更小尺寸,此时的精度损失又可能满足不了智能水平的要求。
134 0
上海创智学院联合无问芯穹发布Megrez2.0,本征架构突破端模型不可能三角,以终端算力撬动云端智能
|
7月前
|
机器学习/深度学习 人工智能 算法
大型多模态推理模型技术演进综述:从模块化架构到原生推理能力的综合分析
该研究系统梳理了大型多模态推理模型(LMRMs)的技术发展,从早期模块化架构到统一的语言中心框架,提出原生LMRMs(N-LMRMs)的前沿概念。论文划分三个技术演进阶段及一个前瞻性范式,深入探讨关键挑战与评估基准,为构建复杂动态环境中的稳健AI系统提供理论框架。未来方向聚焦全模态泛化、深度推理与智能体行为,推动跨模态融合与自主交互能力的发展。
598 13
大型多模态推理模型技术演进综述:从模块化架构到原生推理能力的综合分析
|
5月前
|
人工智能 监控 API
MCP中台,究竟如何实现多模型、多渠道、多环境的统一管控?如何以MCP为核心设计AI应用架构?
本文产品专家三桥君探讨了以 MCP 为核心的 AI 应用架构设计,从统一接入、数据管理、服务编排到部署策略等维度,系统化分析了 AI 落地的关键环节。重点介绍了 API 网关的多终端适配、数据异步处理流程、LLM 服务的灰度发布与 Fallback 机制,以及 MCP Server 作为核心枢纽的调度功能。同时对比了公有云 API、私有化 GPU 和无服务器部署的适用场景,强调通过全链路监控与智能告警保障系统稳定性。该架构为企业高效整合 AI 能力提供了实践路径,平衡性能、成本与灵活性需求。
379 0
|
6月前
|
存储 人工智能 前端开发
Google揭秘Agent架构三大核心:工具、模型与编排层实战指南
本文为Google发布的Agent白皮书全文翻译。本文揭示了智能体如何突破传统AI边界,通过模型、工具与编排层的三位一体架构,实现自主推理与现实交互。它不仅详解了ReAct、思维树等认知框架的运作逻辑,更通过航班预订、旅行规划等案例,展示了智能体如何调用Extensions、Functions和Data Stores,将抽象指令转化为真实世界操作。文中提出的“智能体链式组合”概念,预示了未来多智能体协作解决复杂问题的革命性潜力——这不仅是技术升级,更是AI赋能产业的范式颠覆。
1925 1

热门文章

最新文章