Facebook平台的架构

上传人:飞****9 文档编号:128308112 上传时间:2020-04-20 格式:PDF 页数:39 大小:591.44KB
返回 下载 相关 举报
Facebook平台的架构_第1页
第1页 / 共39页
Facebook平台的架构_第2页
第2页 / 共39页
Facebook平台的架构_第3页
第3页 / 共39页
Facebook平台的架构_第4页
第4页 / 共39页
Facebook平台的架构_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《Facebook平台的架构》由会员分享,可在线阅读,更多相关《Facebook平台的架构(39页珍藏版)》请在金锄头文库上搜索。

1、第 6 章 数据增长 Facebook平台的架构 Dave Fetterman 给我看你的流程图而藏起你的表 我将仍然莫名其妙 如果给我看你的表 那 么我将不再需要你的流程图 因为它们太明显了 Fred Brooks The Mythical Man Month 人月神话 6 1 简介 当前大多数计算机科学的学生将Fred Brooks的这句话理解为 给我看你的代码而藏起 你的数据结构 信息架构师坚信 处于大多数系统核心的是数据 而不是算法 随 着Web的兴起 用户产生和消费的数据比以往更加推动了信息技术的使用 Web用户不 会去接触QuickSort 快速排序 他们会访问一个数据仓库 这些数

2、据可以是通用的 如一本电话簿 也可以是私有的 如一个在线仓库 也可以是 个人的 如一个博客 也可以是开放的 如当地的天气情况 还可以是严格保护的 如 在线银行记录 在任何情况下 Web呈现的几乎所有面对用户的功能归根结底都是提供一 个界面 访问站点专有的一组核心数据 这些信息构成了几乎所有网站的核心价值 不 论它是由顶级员工研究团队创建的还是由世界各地的用户创建的 数据推动了用户喜欢 的产品 所以架构师围绕数据创建了其余的传统 n层 软件栈 逻辑层与显示层 这个故事讲的是Facebook的数据 以及它如何与Facebook平台的创建一起发展 Facebook 是一个很有用的围绕数据建立架构的例

3、子 包括用户提 交的个人关系映射表 传记信息 以及文本或其他媒体内容 Facebook的工程师在构建 109 原则与特性结构 功能多样性 模块 概念完整性 依赖关系 修改独立性进程 自动传播 数据访问 可构建性 增长适应性 熵增抵抗力 站点其余部分的架构时 关注的是显示和操作这些社会关系数据 这个站点的大多数业 务逻辑与这些社会关系数据密切相关 诸如对各种页面的流程和访问模式 搜索的实现 查看新闻内容 以及对内容应用可见性规则 对于用户来说 这个站点的价值直接来自 于他和与他有关的人对该系统所贡献的数据的价值 Facebook社会关系网站 在概念上是一个标准的n层栈 用户的请求会从Facebo

4、ok的内 部库中取出数据 然后通过Facebook的逻辑进行转换 最后通过Facebook的界面输出 Facebook的工程师意识到这些数据的用处超过了这些容器的限制 Facebook平台的创建 显著地改变了Facebook数据访问系统的形态 它包含的愿景远远超出了n层栈的分离功 能 目标是以应用的形式来集成外部的系统 利用居于架构中心的用户社会关系数据 该平台开发了一组Web服务 Facebook平台应用编程接口 或Facebook API 一门查询 语言 Facebook查询语言 或FQL 以及一种数据驱动的标记语言 Facebook标记语 言 或FBML 目的是将应用开发者的系统与Fac

5、ebook的系统结合在一起 随着某些数据集越来越广泛地提供出来 而且用户要求跨越多个网和桌面应用来统一使 用他们的数据 阅读本章的架构师可能会发现自己已经是这样一个平台的消费者 或者 围绕着自己站点的数据建立了类似的平台 本章将向读者展示Facebook以一种受控的方 式向外界开放数据的过程 跟随数据演进的每一步的架构选择 以及调和数据开放与渗 透在社会关系系统中独特的隐私需求的过程 它包括 促进这些类型的集成 将数据功能从内部栈调用移到外部可见的Web服务上 Facebook API 授权访问这个Web服务 注意保持这个社会关系系统的隐私性 创建一种数据查询语言 减轻这个Web服务的新客户端

6、的负担 Facebook FQL 创建一种数据驱动的标记语言 将应用的显示集成回Facebook 同时也支持使用 其他方式不能访问的数据 Facebook FBML 当我们将应用的架构从分离的栈进行了足够的演进之后 创建一些技术来弥补Facebook体验与外部应用体验之间的差异 对于数据平台的使用者 本章展示了我们所做的设计决定和这些决定背后的理由 用户 会话 身份认证 Web服务和各种处理应用逻辑的方式等概念将不断重复出现 它们是 Web上所有这些类型的平台的主题 理解它们背后的思想为数据架构提供了巨大的实践 机会 而且考虑到这些平台制造者将来可能创建的功能和形式 这种理解也相当重要 我们鼓

7、励数据平台制造者心里想着自己的数据集 然后从Facebook开放其数据模型的方 式中学习 某些设计选择和折中可能只适合Facebook 或只适合处理有隐私保护的社会 110第6章 关系数据 可能不完全适用于给定的数据集 但不管怎样 在每一步我们都给出了一个 实际的问题 一个数据驱动的解决方案 以及该解决方案的高层实现 对于每个新的解 决方案 我们基本上会创建一个新的产品或平台 所以在任何时候我们都必须让这个新 产品符合用户的预期 反过来 我们会伴随每一步的演进创造一些新技术 有时候会改 变围绕应用的Web架构 Facebook平台的开源版本可以从 样 本章的代码是用PHP写的 请随意查看 不过

8、请注意 出于清晰性的考虑 这里的 代码是缩写过的 我们从这些类型的集成的动机开始 通过一个例子来讲解一个 外部的 应用逻辑和数 据 一个书店 Facebook的社会关系数据 用户信息和朋友关系 以及它们的集成 6 1 1 某些应用核心数据 Web应用 即使是不提供也不使用任何的数据平台 基本上仍然是由它们内部的数据来 驱动的 以为例 它一是个假想的网站 提供书籍方面的信 息 如果用户感兴趣 它可能也提供购买这些书的功能 这个站点的功能可能包括可 查找的库存索引 关于每件产品的基本信息 以及用户每本书作出的评论 访问这些具 体的信息构成了这个应用的核心 驱动了架构的其他部分 该站点可能使用Fla

9、sh和 A J A X 技 术 支 持 通 过 移 动 设 备 来 访 问 并 提 供 一 个 一 流 的 用 户 界 面 然 而 存在的根本理由是让访问者能够利用某些方法得到示例6 1中 这样的核心映射关系 例6 1 书籍数据映射的例子 book get info isbn title author publisher price cover picture book get reviews isbn set review ids bookuser get reviews books user id set review ids review get info review id isbn

10、books user id rating commentary 所有这些最终都实现为类似简单集合的东西 能够从一个经索引的数据表中取出 这样 的书籍站点如果要有存在的价值 可能还会实现其他一些不太简单的功能 如例6 2中 的简单 查找 例6 2 简单查找映射 search title string title string set isbn relevance score 这些功能中包含的每个键值通常都会表现为上的一个或多个页面 有一组特有的逻辑围绕着这批数据 通过一种特有的方式显示出来 例如 要查看评论者 X提交的一些评论 的用户可能会被引向页面 fettermansbooks com re

11、views php books user id X 或者要看ISBN号为Y的某本书的所有信息 包括所有 对个人评论页面的链接 用户会被引向页面http fettermansbooks com book php isbn Y 数据增长 Fa c e b o o k 平台的架构111 像这样的站点有一个特点是值得注意的 即几乎所有数据都 对所有用户开放 它在book get info这样的映射中生成所有的内容 帮助用户发现有 关某本书的尽可能多的信息 这对于一个卖书的站点可能是好事 但在接下来的使用社 会关系数据的例子中 可见性限制决定了数据访问层的许多架构考虑 6 1 2 一些Facebook核

12、心数据 随着所谓 Web 2 0 的网络技术逐渐流行 数据在系统中的核心地位就变得更明显了 Web 2 0展现的核心主题就是它们是数据驱动的 用户本身提供了绝大部分的数据 Facebook像一样 主要由一组核心数据映射构成 它们驱动 着网站的观感和功能 这些Facebook映射的极端精简集合看起来如例6 3所示 例6 3 社会关系数据映射示例 user get friends uid set uids user get info uid name pic books current location can see uid viewer uid viewee table name field

13、name 0 or 1 这里的uid指的是 数字化的 Facebook用户标识符 从user get info返回的info指 的是用户的描述信息 参见Facebook开发文档中的users getInfo 可能包含了用户最喜 欢的书籍名称 因为他们曾在上输入过 这个系统从核心上来看与 http 区别不大 只有中心数据不同 因此站点的功能也不同 这 些功能围绕着用户与其他用户的联系 朋友 用户的内容 描述信息 以及内容 的可视法则 can see 这个can see数据集是很特殊的 Facebook对于用户生成的数据有一个非常核心的隐私 概念 即用户X查看用户Y的信息的业务规则 这种数据从不直

14、接可见 但它驱动了一些 重要的考虑 当我们查看外部应用的逻辑 数据与Facebook的逻辑 数据集成的例子时 会看到这些考虑反复出现 就其本身而言 Facebook到处使用这种数据集令它与 这样的站点区别开来 Facebook平台和其他社会关系平台认识到这种社会关系映射是有用的 这种用处不仅体 现在这样的站点内部 也体现在与这样的 站点功能进行集成时 6 1 3 Facebook的应用平台 对于和的共同用户来说 此时因特网应用 的图景如图6 1所示 112第6章 在一般的n层架构中 应用将输入 对于Web来说 就是GET POST和cookie信息的集 合 映射为对原始数据的请求 这些原始数据

15、可能存在于数据库中 它们被转换为内存 中的数据 并通过一些业务逻辑进行智能化处理 输出模块将针对显示对这些数据对象 进行转换 变成HTML JavaScript CSS等 这里 在图的顶部 是运行在基础设施之 上的应用程序n层栈 在应用出现在Facebook平台之前 Facebook完全运行在同样的架 构上 重要的是 在两个架构中 业务逻辑 包括Facebook的隐私 实际上都是根据一 些规则来执行的 这些规则建立在系统的某些数据组件之上 图6 1 分离的Facebook和n层应用栈 更大量的相关数据意味着业务逻辑可以提供更多个人定制的内容 所以在http 或其他应用 上浏览书籍 写书评 阅读

16、或购买的体验 会被来 自Facebook的用户社会关系数据加强和放大 具体来说 显示朋友的书评 期望清单和 购买情况将有助于用户的购买决定 发现新的书籍 或强化与其他用户之间的联系 如 果Facebook的内部映射user get friends可以由这样的其 他外部应用访问 就会为这些原本分离的应用提供强大的社会关系上下文 让应用程序 不需要创建它自己的社会关系网络 所有这种类型的应用都可以与这种数据进行很好的 数据增长 Fa c e b o o k 平台的架构113 App数据 SQL对象 App逻辑层 App基础设施 FB数据 FB数据 隐私规则 FB显示层 FB基础设施 App显示层浏览器 浏览器 集成 因为开发者可以将这些核心Facebook映射应用于无数其他Web应用 用户在这些 应用里提供或消费内容 Facebook平台的技术通过在社会关系网络和数据架构方面的一系列改进 实现了这一点 应用可以通过Facebook平台的数据服务来访问有用的社会关系数据 为外部的 Web应用 桌面操作系统应用和其他设备上的应用提供社会关系上下文 应 用 可 以 通 过 一 种 名 为 F B

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号